summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2013-04-28 10:50:55 -0400
committerZack Rusin <zackr@vmware.com>2013-05-02 02:43:42 -0400
commit999cd79c9e1a5dc2d3f126670a1ca7ea4e7ee128 (patch)
tree748b3794ce1a32d90a2ad8f8b6b3fc7c3967dcb9 /src
parent1dfea559c3f188a7a82a4abc09765ba09e939522 (diff)
downloadexternal_mesa3d-999cd79c9e1a5dc2d3f126670a1ca7ea4e7ee128.zip
external_mesa3d-999cd79c9e1a5dc2d3f126670a1ca7ea4e7ee128.tar.gz
external_mesa3d-999cd79c9e1a5dc2d3f126670a1ca7ea4e7ee128.tar.bz2
tgsi: allow negation of all integer types
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>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_tgsi.c2
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_info.c3
-rw-r--r--src/gallium/docs/source/tgsi.rst7
3 files changed, 4 insertions, 8 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c
index 7255d97..66ff14c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.c
@@ -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);
diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c
index d5db6b9..eec49a8 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
@@ -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;
diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst
index 0a5b227..a528fd2 100644
--- a/src/gallium/docs/source/tgsi.rst
+++ b/src/gallium/docs/source/tgsi.rst
@@ -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
---------------