Module: Mesa
Branch: staging/22.0
Commit: 77934240580e21eef7fa56231326b3e42f7aafb9
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=77934240580e21eef7fa56231326b3e42f7aafb9

Author: Emma Anholt <e...@anholt.net>
Date:   Thu Apr  7 15:26:46 2022 -0700

nir_to_tgsi: Fix the address reg mapping for images and SSBOs to match G-T-T.

I missed these in the previous fix to mimic GLSL-to-TGSI address reg
behavior, which r600 relies on.

Fixes: 4bb9c0a28a5f ("nir_to_tgsi: Use the same address reg mappings as 
GLSL-to-TGSI did.")

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15824>
(cherry picked from commit e15154a735d8507f45117471f854107442e8a339)

Conflicts:
        src/gallium/auxiliary/nir/nir_to_tgsi.c

---

 .pick_status.json                       |  2 +-
 src/gallium/auxiliary/nir/nir_to_tgsi.c | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 3807658a2ce..4044dc2c96a 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -3284,7 +3284,7 @@
         "description": "nir_to_tgsi: Fix the address reg mapping for images 
and SSBOs to match G-T-T.",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 5,
+        "resolution": 1,
         "because_sha": "4bb9c0a28a5f06341060353dba1a017d154d51a4"
     },
     {
diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c 
b/src/gallium/auxiliary/nir/nir_to_tgsi.c
index ddd6dcdf7da..c0a54541f87 100644
--- a/src/gallium/auxiliary/nir/nir_to_tgsi.c
+++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c
@@ -1245,13 +1245,13 @@ ntt_emit_alu(struct ntt_compile *c, nir_alu_instr 
*instr)
 
 static struct ureg_src
 ntt_ureg_src_indirect(struct ntt_compile *c, struct ureg_src usrc,
-                      nir_src src)
+                      nir_src src, int addr_reg)
 {
    if (nir_src_is_const(src)) {
       usrc.Index += ntt_src_as_uint(c, src);
       return usrc;
    } else {
-      return ureg_src_indirect(usrc, ntt_reladdr(c, ntt_get_src(c, src), 0));
+      return ureg_src_indirect(usrc, ntt_reladdr(c, ntt_get_src(c, src), 
addr_reg));
    }
 }
 
@@ -1412,7 +1412,7 @@ ntt_emit_mem(struct ntt_compile *c, nir_intrinsic_instr 
*instr,
    switch (mode) {
    case nir_var_mem_ssbo:
       memory = ntt_ureg_src_indirect(c, ureg_src_register(TGSI_FILE_BUFFER, 0),
-                                     instr->src[is_store ? 1 : 0]);
+                                     instr->src[is_store ? 1 : 0], 2);
       nir_src = 1;
       break;
    case nir_var_mem_shared:
@@ -1576,7 +1576,7 @@ ntt_emit_image_load_store(struct ntt_compile *c, 
nir_intrinsic_instr *instr)
 
    struct ureg_src resource =
       ntt_ureg_src_indirect(c, ureg_src_register(TGSI_FILE_IMAGE, 0),
-                            instr->src[0]);
+                            instr->src[0], 2);
 
    struct ureg_dst dst;
    if (instr->intrinsic == nir_intrinsic_image_store) {
@@ -1703,18 +1703,18 @@ ntt_emit_load_input(struct ntt_compile *c, 
nir_intrinsic_instr *instr)
 
    switch (instr->intrinsic) {
    case nir_intrinsic_load_input:
-      input = ntt_ureg_src_indirect(c, input, instr->src[0]);
+      input = ntt_ureg_src_indirect(c, input, instr->src[0], 0);
       ntt_store(c, &instr->dest, input);
       break;
 
    case nir_intrinsic_load_per_vertex_input:
-      input = ntt_ureg_src_indirect(c, input, instr->src[1]);
+      input = ntt_ureg_src_indirect(c, input, instr->src[1], 0);
       input = ntt_ureg_src_dimension_indirect(c, input, instr->src[0]);
       ntt_store(c, &instr->dest, input);
       break;
 
    case nir_intrinsic_load_interpolated_input: {
-      input = ntt_ureg_src_indirect(c, input, instr->src[1]);
+      input = ntt_ureg_src_indirect(c, input, instr->src[1], 0);
 
       nir_intrinsic_instr *bary_instr =
          nir_instr_as_intrinsic(instr->src[0].ssa->parent_instr);

Reply via email to