gallium/tgsi: Add some missing opcodes to tgsi_ureg.
authorEric Anholt <eric@anholt.net>
Mon, 6 Jan 2020 21:55:55 +0000 (13:55 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 2 Sep 2020 16:58:44 +0000 (09:58 -0700)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6567>

src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h
src/gallium/auxiliary/tgsi/tgsi_ureg.h

index 2ade618..1aff513 100644 (file)
@@ -40,11 +40,14 @@ OP11(ARL)
 OP11(MOV)
 OP11(LIT)
 OP11(RCP)
+OP11(DRCP)
 OP11(RSQ)
+OP11(DRSQ)
 OP11(EXP)
 OP11(LOG)
 OP12(MUL)
 OP12(ADD)
+OP12(DADD)
 OP12(DP3)
 OP12(DP4)
 OP12(DST)
@@ -53,9 +56,11 @@ OP12(MAX)
 OP12(SLT)
 OP12(SGE)
 OP13(MAD)
+OP13(DMAD)
 OP12_TEX(TEX_LZ)
 OP13(LRP)
 OP11(SQRT)
+OP11(DSQRT)
 OP11(FRC)
 OP12_TEX(TXF_LZ)
 OP11(FLR)
@@ -100,6 +105,7 @@ OP01_LBL(UIF)
 OP00_LBL(ELSE)
 OP00(ENDIF)
 OP11(CEIL)
+OP11(DCEIL)
 OP11(I2F)
 OP11(NOT)
 OP11(TRUNC)
@@ -113,6 +119,8 @@ OP12_TEX(TXQ)
 OP00(CONT)
 OP01(EMIT)
 OP01(ENDPRIM)
+OP00(BARRIER)
+OP01(MEMBAR)
 OP00_LBL(BGNLOOP)
 OP00(BGNSUB)
 OP00_LBL(ENDLOOP)
@@ -125,6 +133,10 @@ OP12(FSEQ)
 OP12(FSGE)
 OP12(FSLT)
 OP12(FSNE)
+OP12(DSEQ)
+OP12(DSGE)
+OP12(DSLT)
+OP12(DSNE)
 OP12(IDIV)
 OP12(IMAX)
 OP12(IMIN)
@@ -146,6 +158,12 @@ OP12(USGE)
 OP12(USHR)
 OP12(USLT)
 OP12(USNE)
+OP12(I64SLT)
+OP12(I64SGE)
+OP12(U64SEQ)
+OP12(U64SLT)
+OP12(U64SGE)
+OP12(U64SNE)
 OP01(SWITCH)
 OP01(CASE)
 OP00(DEFAULT)
@@ -165,13 +183,27 @@ OP11(SAMP2HND)
 
 OP12(IMUL_HI)
 OP12(UMUL_HI)
+OP13(IBFE)
 OP13(UBFE)
+OP14(BFI)
+OP11(BREV)
+OP11(POPC)
+OP11(IMSB)
+OP11(UMSB)
+OP11(LSB)
+OP12(LDEXP)
+OP12(DLDEXP)
+
 OP11(F2D)
 OP11(D2F)
 OP11(U2D)
 OP11(D2U)
 OP12(DMUL)
 
+OP11(INTERP_CENTROID)
+OP12(INTERP_SAMPLE)
+OP12(INTERP_OFFSET)
+
 #undef OP00
 #undef OP01
 #undef OP10
index 29a1ec0..c2bc6d7 100644 (file)
@@ -814,6 +814,32 @@ static inline void ureg_##op( struct ureg_program *ureg,                \
    ureg_fixup_insn_size( ureg, insn.insn_token );                       \
 }
 
+#define OP14( op )                                                      \
+static inline void ureg_##op( struct ureg_program *ureg,                \
+                              struct ureg_dst dst,                      \
+                              struct ureg_src src0,                     \
+                              struct ureg_src src1,                     \
+                              struct ureg_src src2,                     \
+                              struct ureg_src src3 )                    \
+{                                                                       \
+   enum tgsi_opcode opcode = TGSI_OPCODE_##op;                          \
+   struct ureg_emit_insn_result insn;                                   \
+   if (ureg_dst_is_empty(dst))                                          \
+      return;                                                           \
+   insn = ureg_emit_insn(ureg,                                          \
+                         opcode,                                        \
+                         dst.Saturate,                                  \
+                         0,                                             \
+                         1,                                             \
+                         4);                                            \
+   ureg_emit_dst( ureg, dst );                                          \
+   ureg_emit_src( ureg, src0 );                                         \
+   ureg_emit_src( ureg, src1 );                                         \
+   ureg_emit_src( ureg, src2 );                                         \
+   ureg_emit_src( ureg, src3 );                                         \
+   ureg_fixup_insn_size( ureg, insn.insn_token );                       \
+}
+
 #define OP14_TEX( op )                                                  \
 static inline void ureg_##op( struct ureg_program *ureg,                \
                               struct ureg_dst dst,                      \