Mesa (master): gallium/ntt: Add support for store_per_vertex_output.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jan 15 00:25:46 UTC 2021
Module: Mesa
Branch: master
Commit: 37363ef66369d1108c6215e8f0bdbba8b9f317fd
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=37363ef66369d1108c6215e8f0bdbba8b9f317fd
Author: Eric Anholt <eric at anholt.net>
Date: Wed Jan 13 16:18:02 2021 -0800
gallium/ntt: Add support for store_per_vertex_output.
Needed by virgl and r600 to use NTT.
Reviewed-by: Gert Wollny <gert.wollny at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8488>
---
src/gallium/auxiliary/nir/nir_to_tgsi.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c b/src/gallium/auxiliary/nir/nir_to_tgsi.c
index 6fac47b5353..e130d553aff 100644
--- a/src/gallium/auxiliary/nir/nir_to_tgsi.c
+++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c
@@ -989,6 +989,18 @@ ntt_ureg_src_dimension_indirect(struct ntt_compile *c, struct ureg_src usrc,
}
}
+static struct ureg_dst
+ntt_ureg_dst_dimension_indirect(struct ntt_compile *c, struct ureg_dst udst,
+ nir_src src)
+{
+ if (nir_src_is_const(src)) {
+ return ureg_dst_dimension(udst, nir_src_as_uint(src));
+ } else {
+ return ureg_dst_dimension_indirect(udst,
+ ntt_reladdr(c, ntt_get_src(c, src)),
+ 0);
+ }
+}
/* Some load operations in NIR will have a fractional offset that we need to
* swizzle down before storing to the result register.
*/
@@ -1483,7 +1495,12 @@ ntt_emit_store_output(struct ntt_compile *c, nir_intrinsic_instr *instr)
invariant);
}
- out = ntt_ureg_dst_indirect(c, out, instr->src[1]);
+ if (instr->intrinsic == nir_intrinsic_store_per_vertex_output) {
+ out = ntt_ureg_dst_indirect(c, out, instr->src[2]);
+ out = ntt_ureg_dst_dimension_indirect(c, out, instr->src[1]);
+ } else {
+ out = ntt_ureg_dst_indirect(c, out, instr->src[1]);
+ }
unsigned write_mask = nir_intrinsic_write_mask(instr);
@@ -1564,6 +1581,7 @@ ntt_emit_intrinsic(struct ntt_compile *c, nir_intrinsic_instr *instr)
break;
case nir_intrinsic_store_output:
+ case nir_intrinsic_store_per_vertex_output:
ntt_emit_store_output(c, instr);
break;
More information about the mesa-commit
mailing list