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>
This commit is contained in:
Zack Rusin 2013-04-28 10:50:55 -04:00
parent 1dfea559c3
commit 999cd79c9e
3 changed files with 4 additions and 8 deletions

View 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);

View 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;

View 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
---------------