summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2017-07-31 06:40:12 -0600
committerBrian Paul <[email protected]>2018-09-05 11:22:42 -0600
commite334e104d0fe8a9704a51ad897cdae34006273da (patch)
tree0ac2e05961d86247a194511853bc4b1ecf0072af /src/gallium
parent49678e9e49fd53000b265904ccabca08b64c4583 (diff)
svga: encode sample count in resource declarations
No regressions before the corresponding host-side change. Reviewed-by: Neha Bhende <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/svga/include/VGPU10ShaderTokens.h1
-rw-r--r--src/gallium/drivers/svga/svga_shader.c3
-rw-r--r--src/gallium/drivers/svga/svga_shader.h1
-rw-r--r--src/gallium/drivers/svga/svga_tgsi_vgpu10.c1
4 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/svga/include/VGPU10ShaderTokens.h b/src/gallium/drivers/svga/include/VGPU10ShaderTokens.h
index 4440235890c..1f9746e1cc6 100644
--- a/src/gallium/drivers/svga/include/VGPU10ShaderTokens.h
+++ b/src/gallium/drivers/svga/include/VGPU10ShaderTokens.h
@@ -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;
diff --git a/src/gallium/drivers/svga/svga_shader.c b/src/gallium/drivers/svga/svga_shader.c
index c9cc0f739a3..e16842f2358 100644
--- a/src/gallium/drivers/svga/svga_shader.c
+++ b/src/gallium/drivers/svga/svga_shader.c
@@ -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
diff --git a/src/gallium/drivers/svga/svga_shader.h b/src/gallium/drivers/svga/svga_shader.h
index b703e048b24..b80cf181441 100644
--- a/src/gallium/drivers/svga/svga_shader.h
+++ b/src/gallium/drivers/svga/svga_shader.h
@@ -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.
diff --git a/src/gallium/drivers/svga/svga_tgsi_vgpu10.c b/src/gallium/drivers/svga/svga_tgsi_vgpu10.c
index 4292894056e..e7a636f1740 100644
--- a/src/gallium/drivers/svga/svga_tgsi_vgpu10.c
+++ b/src/gallium/drivers/svga/svga_tgsi_vgpu10.c
@@ -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;