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

Author: Mary Guillemard <[email protected]>
Date:   Thu Nov 16 15:29:07 2023 +0100

nak: Pass offset to load_frag_w

This fix IPA.OFFSET getting an undef for the offset and restore previous
behavior.

Fixes: 618bdb85718f ("nak: Rework FS input interpolation")
Signed-off-by: Mary Guillemard <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26239>

---

 src/nouveau/compiler/nak_nir.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/nouveau/compiler/nak_nir.c b/src/nouveau/compiler/nak_nir.c
index d8e382ba2f1..d3c7ffb1742 100644
--- a/src/nouveau/compiler/nak_nir.c
+++ b/src/nouveau/compiler/nak_nir.c
@@ -557,8 +557,11 @@ nak_xfb_from_nir(const struct nir_xfb_info *nir_xfb)
 }
 
 static nir_def *
-load_frag_w(nir_builder *b, enum nak_interp_loc interp_loc)
+load_frag_w(nir_builder *b, enum nak_interp_loc interp_loc, nir_def *offset)
 {
+   if (offset == NULL)
+      offset = nir_imm_int(b, 0);
+
    const uint16_t w_addr =
       nak_sysval_attr_addr(SYSTEM_VALUE_FRAG_COORD) + 12;
 
@@ -570,7 +573,7 @@ load_frag_w(nir_builder *b, enum nak_interp_loc interp_loc)
    uint32_t flags_u32;
    memcpy(&flags_u32, &flags, sizeof(flags_u32));
 
-   return nir_ipa_nv(b, nir_imm_float(b, 0), nir_imm_int(b, 0),
+   return nir_ipa_nv(b, nir_imm_float(b, 0), offset,
                      .base = w_addr, .flags = flags_u32);
 }
 
@@ -639,7 +642,7 @@ lower_fs_input_intrin(nir_builder *b, nir_intrinsic_instr 
*intrin, void *data)
          nak_sysval_attr_addr(SYSTEM_VALUE_POINT_COORD) :
          nak_sysval_attr_addr(SYSTEM_VALUE_FRAG_COORD);
 
-      nir_def *w = load_frag_w(b, interp_loc);
+      nir_def *w = load_frag_w(b, interp_loc, NULL);
       nir_def *coord = load_interpolated_input(b, intrin->def.num_components,
                                                addr,
                                                NAK_INTERP_MODE_PERSPECTIVE,
@@ -742,7 +745,7 @@ lower_fs_input_intrin(nir_builder *b, nir_intrinsic_instr 
*intrin, void *data)
 
       nir_def *inv_w = NULL;
       if (interp_mode == NAK_INTERP_MODE_PERSPECTIVE)
-         inv_w = nir_frcp(b, load_frag_w(b, interp_loc));
+         inv_w = nir_frcp(b, load_frag_w(b, interp_loc, offset));
 
       nir_def *res = load_interpolated_input(b, intrin->def.num_components,
                                              addr, interp_mode, interp_loc,

Reply via email to