Mesa (gallium-0.1): tgsi: add generic instruction builder
Keith Whitwell
keithw at kemper.freedesktop.org
Fri Aug 28 14:01:22 UTC 2009
Module: Mesa
Branch: gallium-0.1
Commit: 8f72c32a10d84b8d02a204a94c721ab4dcd4fcc9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f72c32a10d84b8d02a204a94c721ab4dcd4fcc9
Author: Keith Whitwell <keithw at vmware.com>
Date: Mon Aug 24 11:32:06 2009 +0100
tgsi: add generic instruction builder
When translating an incoming shader (rather than building one from scratch)
it's preferable to be able to call a single, generic instruction emitter
rather than figuring out which of the opcode-specific functions to call.
(cherry picked from commit b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2)
---
src/gallium/auxiliary/tgsi/tgsi_ureg.c | 23 +++++++++++++++++++++++
src/gallium/auxiliary/tgsi/tgsi_ureg.h | 10 ++++++++++
2 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index cd10c50..385ecf8 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -637,6 +637,29 @@ ureg_fixup_insn_size(struct ureg_program *ureg,
}
+void
+ureg_insn(struct ureg_program *ureg,
+ unsigned opcode,
+ const struct ureg_dst *dst,
+ unsigned nr_dst,
+ const struct ureg_src *src,
+ unsigned nr_src )
+{
+ unsigned insn, i;
+ boolean saturate;
+
+ saturate = nr_dst ? dst[0].Saturate : FALSE;
+
+ insn = ureg_emit_insn( ureg, opcode, saturate, nr_dst, nr_src );
+
+ for (i = 0; i < nr_dst; i++)
+ ureg_emit_dst( ureg, dst[i] );
+
+ for (i = 0; i < nr_src; i++)
+ ureg_emit_src( ureg, src[i] );
+
+ ureg_fixup_insn_size( ureg, insn );
+}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
index 07ee47a..b6566c1 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
@@ -215,6 +215,16 @@ ureg_fixup_label(struct ureg_program *ureg,
unsigned instruction_number );
+/* Generic instruction emitter. Use if you need to pass the opcode as
+ * a parameter, rather than using the emit_OP() varients below.
+ */
+void
+ureg_insn(struct ureg_program *ureg,
+ unsigned opcode,
+ const struct ureg_dst *dst,
+ unsigned nr_dst,
+ const struct ureg_src *src,
+ unsigned nr_src );
/***********************************************************************
More information about the mesa-commit
mailing list