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