From 067ad7eccc1ab56e9777c9e69ff20418bfc4e2c0 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Mon, 10 May 2021 08:50:04 +0200 Subject: [PATCH] broadcom/compiler: move vertex shader output handling to its own function Reviewed-by: Juan A. Suarez Part-of: --- src/broadcom/compiler/nir_to_vir.c | 47 +++++++++++++++++------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index d55dce530b3..7f645118991 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -2474,33 +2474,38 @@ emit_store_output_gs(struct v3d_compile *c, nir_intrinsic_instr *instr) } static void -ntq_emit_store_output(struct v3d_compile *c, nir_intrinsic_instr *instr) +emit_store_output_vs(struct v3d_compile *c, nir_intrinsic_instr *instr) { /* XXX perf: Use stvpmv with uniform non-constant offsets and * stvpmd with non-uniform offsets and enable * PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR. */ - if (c->s->info.stage == MESA_SHADER_FRAGMENT) { - ntq_emit_color_write(c, instr); - } else if (c->s->info.stage == MESA_SHADER_GEOMETRY) { - emit_store_output_gs(c, instr); - } else { - assert(c->s->info.stage == MESA_SHADER_VERTEX); - assert(instr->num_components == 1); + assert(c->s->info.stage == MESA_SHADER_VERTEX); + assert(instr->num_components == 1); - uint32_t base = nir_intrinsic_base(instr); - if (nir_src_is_const(instr->src[1])) { - vir_VPM_WRITE(c, - ntq_get_src(c, instr->src[0], 0), - base + nir_src_as_uint(instr->src[1])); - } else { - vir_VPM_WRITE_indirect(c, - ntq_get_src(c, instr->src[0], 0), - vir_ADD(c, - ntq_get_src(c, instr->src[1], 1), - vir_uniform_ui(c, base))); - } - } + uint32_t base = nir_intrinsic_base(instr); + if (nir_src_is_const(instr->src[1])) { + vir_VPM_WRITE(c, + ntq_get_src(c, instr->src[0], 0), + base + nir_src_as_uint(instr->src[1])); + } else { + vir_VPM_WRITE_indirect(c, + ntq_get_src(c, instr->src[0], 0), + vir_ADD(c, + ntq_get_src(c, instr->src[1], 1), + vir_uniform_ui(c, base))); + } +} + +static void +ntq_emit_store_output(struct v3d_compile *c, nir_intrinsic_instr *instr) +{ + if (c->s->info.stage == MESA_SHADER_FRAGMENT) + ntq_emit_color_write(c, instr); + else if (c->s->info.stage == MESA_SHADER_GEOMETRY) + emit_store_output_gs(c, instr); + else + emit_store_output_vs(c, instr); } /**