Mesa (main): broadcom/compiler: make vir_VPM_WRITE_indirect handle non-uniform offsets

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue May 11 09:58:36 UTC 2021


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

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Mon May 10 09:06:54 2021 +0200

broadcom/compiler: make vir_VPM_WRITE_indirect handle non-uniform offsets

Reviewed-by: Juan A. Suarez <jasuarez at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10723>

---

 src/broadcom/compiler/nir_to_vir.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c
index c1653d4db5b..89655cc5ccd 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -1713,17 +1713,22 @@ emit_frag_end(struct v3d_compile *c)
 static inline void
 vir_VPM_WRITE_indirect(struct v3d_compile *c,
                        struct qreg val,
-                       struct qreg vpm_index)
+                       struct qreg vpm_index,
+                       bool uniform_vpm_index)
 {
         assert(c->devinfo->ver >= 40);
-        vir_STVPMV(c, vpm_index, val);
+        if (uniform_vpm_index)
+                vir_STVPMV(c, vpm_index, val);
+        else
+                vir_STVPMD(c, vpm_index, val);
 }
 
 static void
 vir_VPM_WRITE(struct v3d_compile *c, struct qreg val, uint32_t vpm_index)
 {
         if (c->devinfo->ver >= 40) {
-                vir_VPM_WRITE_indirect(c, val, vir_uniform_ui(c, vpm_index));
+                vir_VPM_WRITE_indirect(c, val,
+                                       vir_uniform_ui(c, vpm_index), true);
         } else {
                 /* XXX: v3d33_vir_vpm_write_setup(c); */
                 vir_MOV_dest(c, vir_reg(QFILE_MAGIC, V3D_QPU_WADDR_VPM), val);
@@ -2461,10 +2466,8 @@ emit_store_output_gs(struct v3d_compile *c, nir_intrinsic_instr *instr)
          * different offsets in the VPM and we need to use the scatter write
          * instruction to have a different offset for each lane.
          */
-        if (nir_src_is_dynamically_uniform(instr->src[1]))
-                vir_VPM_WRITE_indirect(c, val, offset);
-        else
-                vir_STVPMD(c, offset, val);
+         vir_VPM_WRITE_indirect(c, val, offset,
+                                nir_src_is_dynamically_uniform(instr->src[1]));
 
         if (vir_in_nonuniform_control_flow(c)) {
                 struct qinst *last_inst =
@@ -2492,10 +2495,7 @@ emit_store_output_vs(struct v3d_compile *c, nir_intrinsic_instr *instr)
                 bool is_uniform_offset =
                         !vir_in_nonuniform_control_flow(c) &&
                         !nir_src_is_divergent(instr->src[1]);
-                if (is_uniform_offset)
-                        vir_VPM_WRITE_indirect(c, val, offset);
-                else
-                        vir_STVPMD(c, offset, val);
+                vir_VPM_WRITE_indirect(c, val, offset, is_uniform_offset);
         }
 }
 



More information about the mesa-commit mailing list