From: Maxence Le Doré <Maxence Le Doré>
---
src/gallium/auxiliary/tgsi/tgsi_exec.c | 42 ++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index ddff409..aa1b140 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -294,6 +294,40 @@ micro_lrp(union tgsi_exec_channel *dst,
}
static void
+micro_ilsb(union tgsi_exec_channel *dst,
+ const union tgsi_exec_channel *src)
+{
+ int i = 0, j = 0;
+
+ for(i = 0; i < 4; i++) {
+ int x = src->i[i];
+ int mask;
+ int res = -1;
+ for(j = 0; j < 32; j++) {
+ mask = 1 << j;
+ if (x & mask) {
+ res = j;
+ break;
+ }
+ }
+ dst->i[i] = res;
+ }
+}
+
+static void
+micro_ulsb(union tgsi_exec_channel *dst,
+ const union tgsi_exec_channel *src)
+{
+ int i = 0;
+ for(i = 0 ; i < 4 ; i++) {
+ if(src->u[i] == 0)
+ dst->i[i] = -1;
+ else
+ dst->i[i] = ffs(src->u[i]) - 1; /* see u_math.h */
+ }
+}
+
+static void
micro_mad(union tgsi_exec_channel *dst,
const union tgsi_exec_channel *src0,
const union tgsi_exec_channel *src1,
@@ -4276,6 +4310,10 @@ exec_instruction(
exec_vector_binary(mach, inst, micro_idiv, TGSI_EXEC_DATA_INT,
TGSI_EXEC_DATA_INT);
break;
+ case TGSI_OPCODE_ILSB:
+ exec_vector_unary(mach, inst, micro_ilsb, TGSI_EXEC_DATA_INT,
TGSI_EXEC_DATA_INT);
+ break;
+
case TGSI_OPCODE_IMAX:
exec_vector_binary(mach, inst, micro_imax, TGSI_EXEC_DATA_INT,
TGSI_EXEC_DATA_INT);
break;
@@ -4316,6 +4354,10 @@ exec_instruction(
exec_vector_binary(mach, inst, micro_udiv, TGSI_EXEC_DATA_UINT,
TGSI_EXEC_DATA_UINT);
break;
+ case TGSI_OPCODE_ULSB:
+ exec_vector_unary(mach, inst, micro_ulsb, TGSI_EXEC_DATA_INT,
TGSI_EXEC_DATA_UINT);
+ break;
+
case TGSI_OPCODE_UMAD:
exec_vector_trinary(mach, inst, micro_umad, TGSI_EXEC_DATA_UINT,
TGSI_EXEC_DATA_UINT);
break;
--
1.8.5.2
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev