They are needed by glsl_to_tgsi for an efficient implementation using native integers. Reviewed-by: Brian Paul <brianp@vmware.com>tags/mesa-8.0-rc1
@@ -3366,6 +3366,28 @@ micro_usne(union tgsi_exec_channel *dst, | |||
dst->u[3] = src0->u[3] != src1->u[3] ? ~0 : 0; | |||
} | |||
static void | |||
micro_uarl(union tgsi_exec_channel *dst, | |||
const union tgsi_exec_channel *src) | |||
{ | |||
dst->i[0] = src->u[0]; | |||
dst->i[1] = src->u[1]; | |||
dst->i[2] = src->u[2]; | |||
dst->i[3] = src->u[3]; | |||
} | |||
static void | |||
micro_ucmp(union tgsi_exec_channel *dst, | |||
const union tgsi_exec_channel *src0, | |||
const union tgsi_exec_channel *src1, | |||
const union tgsi_exec_channel *src2) | |||
{ | |||
dst->u[0] = src0->u[0] ? src1->u[0] : src2->u[0]; | |||
dst->u[1] = src0->u[1] ? src1->u[1] : src2->u[1]; | |||
dst->u[2] = src0->u[2] ? src1->u[2] : src2->u[2]; | |||
dst->u[3] = src0->u[3] ? src1->u[3] : src2->u[3]; | |||
} | |||
static void | |||
exec_instruction( | |||
struct tgsi_exec_machine *mach, | |||
@@ -4126,6 +4148,14 @@ exec_instruction( | |||
assert(0); | |||
break; | |||
case TGSI_OPCODE_UARL: | |||
exec_vector_unary(mach, inst, micro_uarl, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_UINT); | |||
break; | |||
case TGSI_OPCODE_UCMP: | |||
exec_vector_trinary(mach, inst, micro_ucmp, TGSI_EXEC_DATA_FLOAT, TGSI_EXEC_DATA_UINT); | |||
break; | |||
default: | |||
assert( 0 ); | |||
} |
@@ -189,6 +189,9 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] = | |||
{ 1, 2, 0, 0, 0, 0, "RESINFO", TGSI_OPCODE_RESINFO }, | |||
{ 1, 2, 0, 0, 0, 0, "SAMPLE_POS", TGSI_OPCODE_SAMPLE_POS }, | |||
{ 1, 2, 0, 0, 0, 0, "SAMPLE_INFO", TGSI_OPCODE_SAMPLE_INFO }, | |||
{ 1, 1, 0, 0, 0, 0, "UARL", TGSI_OPCODE_UARL }, | |||
{ 1, 3, 0, 0, 0, 0, "UCMP", TGSI_OPCODE_UCMP }, | |||
}; | |||
const struct tgsi_opcode_info * |
@@ -1013,6 +1013,25 @@ XXX so let's discuss it, yeah? | |||
dst.w = src0.w \oplus src1.w | |||
.. opcode:: UCMP - Integer Conditional Move | |||
.. math:: | |||
dst.x = src0.x ? src1.x : src2.x | |||
dst.y = src0.y ? src1.y : src2.y | |||
dst.z = src0.z ? src1.z : src2.z | |||
dst.w = src0.w ? src1.w : src2.w | |||
.. opcode:: UARL - Integer Address Register Load | |||
Moves the contents of the source register, assumed to be an integer, into the | |||
destination register, which is assumed to be an address (ADDR) register. | |||
.. opcode:: SAD - Sum Of Absolute Differences | |||
.. math:: |
@@ -363,7 +363,10 @@ struct tgsi_property_data { | |||
#define TGSI_OPCODE_SAMPLE_POS 155 | |||
#define TGSI_OPCODE_SAMPLE_INFO 156 | |||
#define TGSI_OPCODE_LAST 157 | |||
#define TGSI_OPCODE_UARL 157 | |||
#define TGSI_OPCODE_UCMP 158 | |||
#define TGSI_OPCODE_LAST 159 | |||
#define TGSI_SAT_NONE 0 /* do not saturate */ | |||
#define TGSI_SAT_ZERO_ONE 1 /* clamp to [0,1] */ |