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 mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev