diff options
author | Alejandro PiƱeiro <[email protected]> | 2020-04-29 10:29:50 +0200 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-05-11 23:52:46 +0000 |
commit | c3af695bb0bae8aea119a2d05983acd57366b0fb (patch) | |
tree | d98bf40f387e4d0452bb8c307f13bd78c6a011fe /src | |
parent | 50c2c76ea31edf987594e8b811b7d62be71f5a33 (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.c | 15 |
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) |