tgsi: allow negation of all integer types
authorZack Rusin <zackr@vmware.com>
Sun, 28 Apr 2013 14:50:55 +0000 (10:50 -0400)
committerZack Rusin <zackr@vmware.com>
Thu, 2 May 2013 06:43:42 +0000 (02:43 -0400)
It's valid because we reuse certain arithmetic operations
for both signed and unsigned types (e.g. uadd, umad, which
have a bit unfortunate naming)

Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_tgsi.c
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/docs/source/tgsi.rst

index 7255d97943920fae44f23511e7c676b838ef4ade..66ff14c888ac248f01596153866cbbb0b3c49262 100644 (file)
@@ -339,9 +339,9 @@ lp_build_emit_fetch(
          assert(0);
          break;
       case TGSI_TYPE_SIGNED:
+      case TGSI_TYPE_UNSIGNED:
          res = lp_build_negate( &bld_base->int_bld, res );
          break;
-      case TGSI_TYPE_UNSIGNED:
       case TGSI_TYPE_VOID:
       default:
          assert(0);
index d5db6b953ecaaa67c0be20cfc91e8b866e085314..eec49a8d2ef55559ef3f066bd88c7d86f6286acf 100644 (file)
@@ -280,6 +280,7 @@ tgsi_opcode_infer_src_type( uint opcode )
    /* XXX some src args may be signed for SAD ? */
    case TGSI_OPCODE_SAD:
    case TGSI_OPCODE_U2F:
+   case TGSI_OPCODE_UADD:
    case TGSI_OPCODE_UDIV:
    case TGSI_OPCODE_UMOD:
    case TGSI_OPCODE_UMAD:
@@ -314,8 +315,6 @@ tgsi_opcode_infer_src_type( uint opcode )
    case TGSI_OPCODE_IABS:
    case TGSI_OPCODE_ISSG:
    case TGSI_OPCODE_UARL:
-   /* UADD is both signed and unsigned require signed for working modifiers */
-   case TGSI_OPCODE_UADD:
       return TGSI_TYPE_SIGNED;
    default:
       return TGSI_TYPE_FLOAT;
index 0a5b2274a9a5e210ee4ea59ed2bd7bcc452bb1d2..a528fd27688f4cdd70c70e9c45f0d63b093b7953 100644 (file)
@@ -32,11 +32,8 @@ For inputs which have a floating point type, both absolute value and negation
 modifiers are supported (with absolute value being applied first).
 TGSI_OPCODE_MOV is considered to have float input type for applying modifiers.
 
-For inputs which have signed type only the negate modifier is supported. This
-includes instructions which are otherwise ignorant if the type is signed or
-unsigned, such as TGSI_OPCODE_UADD.
-
-For inputs with unsigned type no modifiers are allowed.
+For inputs which have signed or unsigned type only the negate modifier is
+supported.
 
 Instruction Set
 ---------------