From 4c0f1fb5ec6117f07c9c911d7f74ff0d18c51d98 Mon Sep 17 00:00:00 2001 From: Bryan Cain Date: Sat, 7 Jan 2012 10:43:04 -0600 Subject: [PATCH] gallium: add an IABS opcode to TGSI This is a necessary operation that is missing from TGSI. Reviewed-by: Brian Paul --- src/gallium/auxiliary/tgsi/tgsi_exec.c | 4 ++++ src/gallium/auxiliary/tgsi/tgsi_info.c | 1 + src/gallium/docs/source/tgsi.rst | 13 +++++++++++++ src/gallium/include/pipe/p_shader_tokens.h | 3 ++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 7ea8511c390..3e2b899d40e 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -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 ); } diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c index 6cd580a7fe2..c9acdb9fbf8 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_info.c +++ b/src/gallium/auxiliary/tgsi/tgsi_info.c @@ -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 * diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst index 45af528b8e9..7e7010f407f 100644 --- a/src/gallium/docs/source/tgsi.rst +++ b/src/gallium/docs/source/tgsi.rst @@ -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:: diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index b24b64c5861..75e17a1f74e 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -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] */ -- 2.30.2