From: Alejandro PiƱeiro Date: Wed, 29 Apr 2020 08:29:50 +0000 (+0200) Subject: v3d/tex: set up default values for Configuration Parameter 1 if possible X-Git-Tag: upstream/21.0.0~10104 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c3af695bb0bae8aea119a2d05983acd57366b0fb;p=platform%2Fupstream%2Fmesa.git 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 Part-of: --- diff --git a/src/broadcom/compiler/v3d40_tex.c b/src/broadcom/compiler/v3d40_tex.c index d47d3c3..2996313 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)