gallium: add an IABS opcode to TGSI
authorBryan Cain <bryancain3@gmail.com>
Sat, 7 Jan 2012 16:43:04 +0000 (10:43 -0600)
committerBryan Cain <bryancain3@gmail.com>
Sat, 7 Jan 2012 21:37:32 +0000 (15:37 -0600)
This is a necessary operation that is missing from TGSI.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/docs/source/tgsi.rst
src/gallium/include/pipe/p_shader_tokens.h

index 7ea8511c3902845219900eff67761e69c8130c58..3e2b899d40ed1ef0de88d9260a33f37834ed96a4 100644 (file)
@@ -4193,6 +4193,10 @@ exec_instruction(
       exec_vector_trinary(mach, inst, micro_ucmp, TGSI_EXEC_DATA_UINT, TGSI_EXEC_DATA_UINT);
       break;
 
+   case TGSI_OPCODE_IABS:
+      exec_vector_unary(mach, inst, micro_iabs, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_INT);
+      break;
+
    default:
       assert( 0 );
    }
index 6cd580a7fe250ab13bac51f0a6dccfb165673e87..c9acdb9fbf8c973cd0c7b74189cf002fbedc4db9 100644 (file)
@@ -192,6 +192,7 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
    
    { 1, 1, 0, 0, 0, 0, "UARL", TGSI_OPCODE_UARL },
    { 1, 3, 0, 0, 0, 0, "UCMP", TGSI_OPCODE_UCMP },
+   { 1, 1, 0, 0, 0, 0, "IABS", TGSI_OPCODE_IABS },
 };
 
 const struct tgsi_opcode_info *
index 45af528b8e98f8f8ce74c7acf7addc9d5ea1e476..7e7010f407ff41e98c200509b25c89dbc94f1f5f 100644 (file)
@@ -1043,6 +1043,19 @@ XXX so let's discuss it, yeah?
   destination register, which is assumed to be an address (ADDR) register.
 
 
+.. opcode:: IABS - Integer Absolute Value
+
+.. math::
+
+  dst.x = |src.x|
+
+  dst.y = |src.y|
+
+  dst.z = |src.z|
+
+  dst.w = |src.w|
+
+
 .. opcode:: SAD - Sum Of Absolute Differences
 
 .. math::
index b24b64c586111288e423fa53309a24b963b982fb..75e17a1f74edecaa93d518fdb15b5a1f31151cad 100644 (file)
@@ -376,8 +376,9 @@ struct tgsi_property_data {
 
 #define TGSI_OPCODE_UARL                157
 #define TGSI_OPCODE_UCMP                158
+#define TGSI_OPCODE_IABS                159
 
-#define TGSI_OPCODE_LAST                159
+#define TGSI_OPCODE_LAST                160
 
 #define TGSI_SAT_NONE            0  /* do not saturate */
 #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */