broadcom/compiler: needs_quad_helper_invocation enable PER_QUAD TMU access

We take advantage of the needs_quad_helper_invocation information to
only enable the PER_QUAD TMU access on Fragment Shaders when it is needed.

PER_QUAD access is also disabled on stages different to fragment shader.
Being enabled was causing MMU errors when TMU was doing indexed by vertexid
reads on disabled lanes on vertex stage. This problem was exercised by some
shaders from the GTK new GSK_RENDERER=ngl that were accessing a constant buffer
offset[6], but having PER_QUAD enabled on the TMU access by VertexID was
doing hidden incorrect access to not existing vertex 6 and 7 as TMU was
accessing the full quad.

cc: mesa-stable

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28740>
This commit is contained in:
Jose Maria Casanova Crespo
2024-04-15 12:22:31 +02:00
committed by Marge Bot
parent d2b9e21689
commit 97f5721bfc

View File

@@ -656,6 +656,8 @@ ntq_emit_tmu_general(struct v3d_compile *c, nir_intrinsic_instr *instr,
*/
uint32_t perquad =
is_load && !vir_in_nonuniform_control_flow(c) &&
c->s->info.stage == MESA_SHADER_FRAGMENT &&
c->s->info.fs.needs_quad_helper_invocations &&
!c->emitted_discard ?
GENERAL_TMU_LOOKUP_PER_QUAD :
GENERAL_TMU_LOOKUP_PER_PIXEL;