Module: Mesa
Branch: main
Commit: df7185d0d14542eeec7f4159b423537f34381d6e
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=df7185d0d14542eeec7f4159b423537f34381d6e

Author: Iago Toral Quiroga <[email protected]>
Date:   Tue May 18 08:19:32 2021 +0200

broadcom/compiler: don't emit TLB loads for components that don't exist

This avoids debug builds to assert crash. Components that don't exist
won't be used and will be eventually DCEd, so simply lower them to 0.

Fixes CTS tests like these in debug builds:
dEQP-VK.pipeline.logic_op.r8_uint.clear
dEQP-VK.pipeline.logic_op.r8_uint.and
dEQP-VK.pipeline.logic_op.r8_uint.and_reverse
dEQP-VK.pipeline.logic_op.r8_uint.copy
dEQP-VK.pipeline.logic_op.r8_uint.and_inverted
dEQP-VK.pipeline.logic_op.r8_uint.no_op
dEQP-VK.pipeline.logic_op.r8_uint.xor
dEQP-VK.pipeline.logic_op.r8_uint.or

Reviewed-by: Alejandro PiƱeiro <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10801>

---

 src/broadcom/compiler/v3d_nir_lower_logic_ops.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/broadcom/compiler/v3d_nir_lower_logic_ops.c 
b/src/broadcom/compiler/v3d_nir_lower_logic_ops.c
index 2cd613b26a4..c5c30ab7c71 100644
--- a/src/broadcom/compiler/v3d_nir_lower_logic_ops.c
+++ b/src/broadcom/compiler/v3d_nir_lower_logic_ops.c
@@ -202,12 +202,23 @@ v3d_get_format_swizzle_for_rt(struct v3d_compile *c, int 
rt)
 }
 
 static nir_ssa_def *
-v3d_nir_get_tlb_color(nir_builder *b, int rt, int sample)
+v3d_nir_get_tlb_color(nir_builder *b, struct v3d_compile *c, int rt, int 
sample)
 {
-        nir_ssa_def *color[4];
-        for (int i = 0; i < 4; i++)
-                color[i] = nir_load_tlb_color_v3d(b, 1, 32, nir_imm_int(b, 
rt), .base = sample, .component = i);
+        uint32_t num_components =
+                util_format_get_nr_components(c->fs_key->color_fmt[rt].format);
 
+        nir_ssa_def *color[4];
+        for (int i = 0; i < 4; i++) {
+                if (i < num_components) {
+                        color[i] =
+                                nir_load_tlb_color_v3d(b, 1, 32, 
nir_imm_int(b, rt),
+                                                       .base = sample,
+                                                       .component = i);
+                } else {
+                        /* These will be DCEd */
+                        color[i] = nir_imm_int(b, 0);
+                }
+        }
         return nir_vec4(b, color[0], color[1], color[2], color[3]);
 }
 
@@ -257,7 +268,7 @@ static nir_ssa_def *
 v3d_nir_emit_logic_op(struct v3d_compile *c, nir_builder *b,
                       nir_ssa_def *src, int rt, int sample)
 {
-        nir_ssa_def *dst = v3d_nir_get_tlb_color(b, rt, sample);
+        nir_ssa_def *dst = v3d_nir_get_tlb_color(b, c, rt, sample);
 
         nir_ssa_def *src_chans[4], *dst_chans[4];
         for (unsigned i = 0; i < 4; i++) {

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to