Module: Mesa Branch: main Commit: cb39dca2d35ccac0e8d65f92d792fe0c935b4815 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb39dca2d35ccac0e8d65f92d792fe0c935b4815
Author: Iago Toral Quiroga <ito...@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 <jasua...@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); } } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit