softpipe: handle 32-bit bitfield inserts
authorDave Airlie <airlied@redhat.com>
Thu, 21 Mar 2019 04:15:43 +0000 (14:15 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 21 Mar 2019 23:30:26 +0000 (09:30 +1000)
Fixes piglits if ARB_gpu_shader5 is enabled

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/auxiliary/tgsi/tgsi_exec.c

index f66df18c7f543445d5652d7d04ac28d1983598df..5f55de0390cc0e3b613a590f322a3a103737294f 100644 (file)
@@ -4967,10 +4967,14 @@ micro_bfi(union tgsi_exec_channel *dst,
 {
    int i;
    for (i = 0; i < 4; i++) {
-      int width = src3->u[i] & 0x1f;
+      int width = src3->u[i];
       int offset = src2->u[i] & 0x1f;
-      int bitmask = ((1 << width) - 1) << offset;
-      dst->u[i] = ((src1->u[i] << offset) & bitmask) | (src0->u[i] & ~bitmask);
+      if (width == 32) {
+         dst->u[i] = src1->u[i];
+      } else {
+         int bitmask = ((1 << width) - 1) << offset;
+         dst->u[i] = ((src1->u[i] << offset) & bitmask) | (src0->u[i] & ~bitmask);
+      }
    }
 }