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>
(cherry picked from commit 97f5721bfc)
This commit is contained in:
Jose Maria Casanova Crespo 2024-04-15 12:22:31 +02:00 committed by Eric Engestrom
parent 4c4b655c9e
commit 062a764258
2 changed files with 3 additions and 1 deletions

View file

@ -2074,7 +2074,7 @@
"description": "broadcom/compiler: needs_quad_helper_invocation enable PER_QUAD TMU access",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

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;