tgsi: Implement BREAKC in interpreter.
authorMichal Krol <michal@vmware.com>
Tue, 22 Dec 2009 10:58:45 +0000 (11:58 +0100)
committerMichal Krol <michal@vmware.com>
Tue, 22 Dec 2009 15:11:40 +0000 (16:11 +0100)
src/gallium/auxiliary/tgsi/tgsi_exec.c

index 717358620c58ce6da45b05278eb1fbbc26b8c1e1..123117cb0a36f92d1e08590a23d367b2f88a6e5c 100644 (file)
@@ -3246,6 +3246,25 @@ exec_instruction(
    case TGSI_OPCODE_NOP:
       break;
 
+   case TGSI_OPCODE_BREAKC:
+      FETCH(&r[0], 0, CHAN_X);
+      /* update CondMask */
+      if (r[0].u[0] && (mach->ExecMask & 0x1)) {
+         mach->LoopMask &= ~0x1;
+      }
+      if (r[0].u[1] && (mach->ExecMask & 0x2)) {
+         mach->LoopMask &= ~0x2;
+      }
+      if (r[0].u[2] && (mach->ExecMask & 0x4)) {
+         mach->LoopMask &= ~0x4;
+      }
+      if (r[0].u[3] && (mach->ExecMask & 0x8)) {
+         mach->LoopMask &= ~0x8;
+      }
+      /* Todo: if mach->LoopMask == 0, jump to end of loop */
+      UPDATE_EXEC_MASK(mach);
+      break;
+
    default:
       assert( 0 );
    }