svga: encode sample count in resource declarations

No regressions before the corresponding host-side change.

Reviewed-by: Neha Bhende <bhenden@vmware.com>
This commit is contained in:
Brian Paul 2017-07-31 06:40:12 -06:00
parent 49678e9e49
commit e334e104d0
4 changed files with 6 additions and 0 deletions

View file

@ -267,6 +267,7 @@ typedef union {
struct {
unsigned int : 11;
unsigned int resourceDimension : 5; /* VGPU10_RESOURCE_DIMENSION */
unsigned int sampleCount : 7;
};
struct {
unsigned int : 11;

View file

@ -223,6 +223,9 @@ svga_init_shader_key_common(const struct svga_context *svga,
}
}
assert(view->texture->nr_samples < (1 << 5)); /* 5-bit field */
key->tex[i].num_samples = view->texture->nr_samples;
/* If we have a non-alpha view into an svga3d surface with an
* alpha channel, then explicitly set the alpha channel to 1
* when sampling. Note that we need to check the

View file

@ -105,6 +105,7 @@ struct svga_compile_key
unsigned swizzle_g:3;
unsigned swizzle_b:3;
unsigned swizzle_a:3;
unsigned num_samples:5; /**< Up to 16 samples */
} tex[PIPE_MAX_SAMPLERS];
/* Note: svga_compile_keys_equal() depends on the variable-size
* tex[] array being at the end of this structure.

View file

@ -3067,6 +3067,7 @@ emit_resource_declarations(struct svga_shader_emitter_v10 *emit)
opcode0.resourceDimension =
tgsi_texture_to_resource_dimension(emit->sampler_target[i],
emit->key.tex[i].is_array);
opcode0.sampleCount = emit->key.tex[i].num_samples;
operand0.value = 0;
operand0.numComponents = VGPU10_OPERAND_0_COMPONENT;
operand0.operandType = VGPU10_OPERAND_TYPE_RESOURCE;