gallivm/tgsi: fix up breakc
authorRoland Scheidegger <sroland@vmware.com>
Fri, 19 Apr 2013 01:26:20 +0000 (03:26 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Sat, 20 Apr 2013 00:27:53 +0000 (02:27 +0200)
It seems there was a typo in gallivm breakc handling (I am actually still
not sure it is really needed but otherwise that statement really should go
away). Also fix the wrong src argument type, even though they weren't really
used.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_info.c

index af1b8aa76aee65ad9263ef45216c4e096d7f6dfc..af8abb1fcd6f03b126dadd42ca294c341878ae82 100644 (file)
@@ -221,7 +221,7 @@ static void lp_exec_break_condition(struct lp_exec_mask *mask,
    LLVMValueRef cond_mask = LLVMBuildAnd(builder,
                                          mask->exec_mask,
                                          cond, "cond_mask");
-   cond_mask = LLVMBuildNot(builder, cond, "break_cond");
+   cond_mask = LLVMBuildNot(builder, cond_mask, "break_cond");
 
    mask->break_mask = LLVMBuildAnd(builder,
                                    mask->break_mask,
index 8b46785d66c121fb67db26411a49478c964c1fe7..75b06632b41d02bfa34def3e6287f38f77339b03 100644 (file)
@@ -3239,6 +3239,7 @@ exec_case(struct tgsi_exec_machine *mach,
    UPDATE_EXEC_MASK(mach);
 }
 
+/* FIXME: this will only work if default is last */
 static void
 exec_default(struct tgsi_exec_machine *mach)
 {
@@ -4200,7 +4201,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_BREAKC:
-      FETCH(&r[0], 0, TGSI_CHAN_X);
+      IFETCH(&r[0], 0, TGSI_CHAN_X);
       /* update CondMask */
       if (r[0].u[0] && (mach->ExecMask & 0x1)) {
          mach->LoopMask &= ~0x1;
index aee2d3081b2434e33860140eea5f6e9c80b69bad..d5db6b953ecaaa67c0be20cfc91e8b866e085314 100644 (file)
@@ -298,6 +298,9 @@ tgsi_opcode_infer_src_type( uint opcode )
    case TGSI_OPCODE_SAMPLE_I:
    case TGSI_OPCODE_SAMPLE_I_MS:
    case TGSI_OPCODE_UIF:
+   case TGSI_OPCODE_CASE:
+   case TGSI_OPCODE_SWITCH:
+   case TGSI_OPCODE_BREAKC:
       return TGSI_TYPE_UNSIGNED;
    case TGSI_OPCODE_MOD:
    case TGSI_OPCODE_I2F: