aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlejandro PiƱeiro <[email protected]>2020-04-29 10:29:50 +0200
committerMarge Bot <[email protected]>2020-05-11 23:52:46 +0000
commitc3af695bb0bae8aea119a2d05983acd57366b0fb (patch)
treed98bf40f387e4d0452bb8c307f13bd78c6a011fe /src
parent50c2c76ea31edf987594e8b811b7d62be71f5a33 (diff)
v3d/tex: set up default values for Configuration Parameter 1 if possible
Texture access has three configuration parameters, P0 (texture), P1 (sampler) and P2(lookup). P1 and P2 are optional, but if P2 is needed (like for example to set the offset for texelFetchOffset), then you need to set P1. But until now when setting up P1 we were asking the driver to fill up the address with the shader state. But in that case we can just fill that address with the default value NULL. So let's avoid asking the driver to fill that default values, and do it directly on the compiler. This is a good-to-have on OpenGL, and likely would be needed on Vulkan. Reviewed-by: Iago Toral Quiroga <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4962>
Diffstat (limited to 'src')
-rw-r--r--src/broadcom/compiler/v3d40_tex.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/broadcom/compiler/v3d40_tex.c b/src/broadcom/compiler/v3d40_tex.c
index d47d3c30851..2996313e518 100644
--- a/src/broadcom/compiler/v3d40_tex.c
+++ b/src/broadcom/compiler/v3d40_tex.c
@@ -213,7 +213,7 @@ v3d40_vir_emit_tex(struct v3d_compile *c, nir_tex_instr *instr)
(instr->op == nir_texop_lod ||
memcmp(&p2_unpacked, &p2_unpacked_default, sizeof(p2_unpacked)) != 0);
- if (needs_p2_config || output_type_32_bit ||
+ if (output_type_32_bit ||
nir_tex_instr_need_sampler(instr)) {
struct V3D41_TMU_CONFIG_PARAMETER_1 p1_unpacked = {
.output_type_32_bit = output_type_32_bit,
@@ -244,6 +244,19 @@ v3d40_vir_emit_tex(struct v3d_compile *c, nir_tex_instr *instr)
p1_packed |= unit << 24;
vir_WRTMUC(c, QUNIFORM_TMU_CONFIG_P1, p1_packed);
+ } else if (needs_p2_config) {
+ /* Configuration parameters need to be set up in
+ * order, and if P2 is needed, you need to set up P1
+ * too even if sampler info is not needed by the
+ * texture operation. But we can set up default info,
+ * and avoid asking the driver for the sampler state
+ * address
+ */
+ uint32_t p1_packed_default;
+ V3D41_TMU_CONFIG_PARAMETER_1_pack(NULL,
+ (uint8_t *)&p1_packed_default,
+ &p1_unpacked_default);
+ vir_WRTMUC(c, QUNIFORM_CONSTANT, p1_packed_default);
}
if (needs_p2_config)