From: Maxence Le Doré <Maxence Le Doré>

---
 src/gallium/auxiliary/tgsi/tgsi_exec.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 25d3373..ddff409 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -316,6 +316,16 @@ micro_mov(union tgsi_exec_channel *dst,
 }
 
 static void
+micro_popcnt(union tgsi_exec_channel *dst,
+             const union tgsi_exec_channel *src)
+{
+  dst->i[0] = util_bitcount(src->u[0]); /* util_bitcount from umath.h */
+  dst->i[1] = util_bitcount(src->u[1]);
+  dst->i[2] = util_bitcount(src->u[2]);
+  dst->i[3] = util_bitcount(src->u[3]);
+}
+
+static void
 micro_rcp(union tgsi_exec_channel *dst,
           const union tgsi_exec_channel *src)
 {
@@ -3671,6 +3681,10 @@ exec_instruction(
       exec_vector_binary(mach, inst, micro_max, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
       break;
 
+   case TGSI_OPCODE_POPCNT:
+      exec_vector_unary(mach, inst, micro_popcnt, TGSI_EXEC_DATA_INT, 
TGSI_EXEC_DATA_UINT);
+      break;
+
    case TGSI_OPCODE_SLT:
       exec_vector_binary(mach, inst, micro_slt, TGSI_EXEC_DATA_FLOAT, 
TGSI_EXEC_DATA_FLOAT);
       break;
-- 
1.8.5.2

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to