gallium: add some more double opcodes to avoid unnecessary lowering
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 25 Jul 2014 20:46:42 +0000 (16:46 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Fri, 20 Feb 2015 00:32:35 +0000 (19:32 -0500)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/docs/source/tgsi.rst
src/gallium/include/pipe/p_shader_tokens.h

index d04f9da86ac3c93725718a663c679f091f24b736..4d838fdd52ca17fe4f6b5e0651c82a35dc23e325 100644 (file)
@@ -257,6 +257,11 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
    { 1, 1, 0, 0, 0, 0, COMP, "D2U", TGSI_OPCODE_D2U },
    { 1, 1, 0, 0, 0, 0, COMP, "U2D", TGSI_OPCODE_U2D },
    { 1, 1, 0, 0 ,0, 0, COMP, "DRSQ", TGSI_OPCODE_DRSQ },
+   { 1, 1, 0, 0, 0, 0, COMP, "DTRUNC", TGSI_OPCODE_DTRUNC },
+   { 1, 1, 0, 0, 0, 0, COMP, "DCEIL", TGSI_OPCODE_DCEIL },
+   { 1, 1, 0, 0, 0, 0, COMP, "DFLR", TGSI_OPCODE_DFLR },
+   { 1, 1, 0, 0, 0, 0, COMP, "DROUND", TGSI_OPCODE_DROUND },
+   { 1, 1, 0, 0, 0, 0, COMP, "DSSG", TGSI_OPCODE_DSSG },
 };
 
 const struct tgsi_opcode_info *
index e20af79d9f378522dcf3e47f440492fbb9f665f1..b0a975aa70aa281dd4e50357065e6e81d7811213 100644 (file)
@@ -1861,6 +1861,45 @@ two-component vectors with doubled precision in each component.
 
   dst.zw = src.zw - \lfloor src.zw\rfloor
 
+.. opcode:: DTRUNC - Truncate
+
+.. math::
+
+  dst.xy = trunc(src.xy)
+
+  dst.zw = trunc(src.zw)
+
+.. opcode:: DCEIL - Ceiling
+
+.. math::
+
+  dst.xy = \lceil src.xy\rceil
+
+  dst.zw = \lceil src.zw\rceil
+
+.. opcode:: DFLR - Floor
+
+.. math::
+
+  dst.xy = \lfloor src.xy\rfloor
+
+  dst.zw = \lfloor src.zw\rfloor
+
+.. opcode:: DROUND - Fraction
+
+.. math::
+
+  dst.xy = round(src.xy)
+
+  dst.zw = round(src.zw)
+
+.. opcode:: DSSG - Set Sign
+
+.. math::
+
+  dst.xy = (src.xy > 0) ? 1.0 : (src.xy < 0) ? -1.0 : 0.0
+
+  dst.zw = (src.zw > 0) ? 1.0 : (src.zw < 0) ? -1.0 : 0.0
 
 .. opcode:: DFRACEXP - Convert Number to Fractional and Integral Components
 
index fc41cc9fc06ccfa3f7d6dcb1eb3e9445812c36af..95ac5900f3b0bcd6f6f3a83bd055092e67bdd5fc 100644 (file)
@@ -519,7 +519,12 @@ struct tgsi_property_data {
 #define TGSI_OPCODE_D2U                 215
 #define TGSI_OPCODE_U2D                 216
 #define TGSI_OPCODE_DRSQ                217 /* eg, cayman also has DRSQ */
-#define TGSI_OPCODE_LAST                218
+#define TGSI_OPCODE_DTRUNC              218 /* nvc0 */
+#define TGSI_OPCODE_DCEIL               219 /* nvc0 */
+#define TGSI_OPCODE_DFLR                220 /* nvc0 */
+#define TGSI_OPCODE_DROUND              221 /* nvc0 */
+#define TGSI_OPCODE_DSSG                222
+#define TGSI_OPCODE_LAST                223
 
 #define TGSI_SAT_NONE            0  /* do not saturate */
 #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */