Mesa (main): broadcom/compiler: move vertex shader output handling to its own function
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue May 11 09:58:36 UTC 2021
Module: Mesa
Branch: main
Commit: 067ad7eccc1ab56e9777c9e69ff20418bfc4e2c0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=067ad7eccc1ab56e9777c9e69ff20418bfc4e2c0
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Mon May 10 08:50:04 2021 +0200
broadcom/compiler: move vertex shader output handling to its own function
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 | 45 +++++++++++++++++++++-----------------
1 file changed, 25 insertions(+), 20 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) {
+ 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)));
+ }
+}
+
+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) {
+ 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);
-
- 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)));
- }
- }
+ else
+ emit_store_output_vs(c, instr);
}
/**
More information about the mesa-commit
mailing list