From b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Mon, 24 Aug 2009 11:32:06 +0100 Subject: 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. --- src/gallium/auxiliary/tgsi/tgsi_ureg.c | 23 +++++++++++++++++++++++ src/gallium/auxiliary/tgsi/tgsi_ureg.h | 10 ++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c index 7922931361..7762243ef8 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c @@ -605,6 +605,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 5a48bb7a35..fbf174b209 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h @@ -199,6 +199,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 ); /*********************************************************************** -- cgit v1.2.3