i965: Make brw_CONT and brw_BREAK take the pop count.
authorEric Anholt <eric@anholt.net>
Sun, 29 Aug 2010 06:18:18 +0000 (23:18 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 30 Aug 2010 17:26:05 +0000 (10:26 -0700)
We always need to set it, so pass it in.

src/mesa/drivers/dri/i965/brw_eu.h
src/mesa/drivers/dri/i965/brw_eu_emit.c
src/mesa/drivers/dri/i965/brw_vs_emit.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c

index 6e9e210cf17d321fba6fc11a0d428d0fed86f0a3..c63db164609c7ce9a90ecca331366a4da0965cdd 100644 (file)
@@ -931,8 +931,8 @@ struct brw_instruction *brw_DO(struct brw_compile *p,
 struct brw_instruction *brw_WHILE(struct brw_compile *p, 
               struct brw_instruction *patch_insn);
 
-struct brw_instruction *brw_BREAK(struct brw_compile *p);
-struct brw_instruction *brw_CONT(struct brw_compile *p);
+struct brw_instruction *brw_BREAK(struct brw_compile *p, int pop_count);
+struct brw_instruction *brw_CONT(struct brw_compile *p, int pop_count);
 /* Forward jumps:
  */
 void brw_land_fwd_jump(struct brw_compile *p, 
index a6ca030afe54ddecc609ea73e024c21ab712dc22..0906150613b3e39f09f28cc69bad66687bf0b4d6 100644 (file)
@@ -777,7 +777,7 @@ void brw_ENDIF(struct brw_compile *p,
    }
 }
 
-struct brw_instruction *brw_BREAK(struct brw_compile *p)
+struct brw_instruction *brw_BREAK(struct brw_compile *p, int pop_count)
 {
    struct brw_instruction *insn;
    insn = next_insn(p, BRW_OPCODE_BREAK);
@@ -788,10 +788,11 @@ struct brw_instruction *brw_BREAK(struct brw_compile *p)
    insn->header.execution_size = BRW_EXECUTE_8;
    /* insn->header.mask_control = BRW_MASK_DISABLE; */
    insn->bits3.if_else.pad0 = 0;
+   insn->bits3.if_else.pop_count = pop_count;
    return insn;
 }
 
-struct brw_instruction *brw_CONT(struct brw_compile *p)
+struct brw_instruction *brw_CONT(struct brw_compile *p, int pop_count)
 {
    struct brw_instruction *insn;
    insn = next_insn(p, BRW_OPCODE_CONTINUE);
@@ -802,6 +803,7 @@ struct brw_instruction *brw_CONT(struct brw_compile *p)
    insn->header.execution_size = BRW_EXECUTE_8;
    /* insn->header.mask_control = BRW_MASK_DISABLE; */
    insn->bits3.if_else.pad0 = 0;
+   insn->bits3.if_else.pop_count = pop_count;
    return insn;
 }
 
index 700e5ab6f64f1deecbbe78ada3bb69df208e893d..720a6566fd2f0d6f02d91c4e8547c7185464455d 100644 (file)
@@ -1654,7 +1654,6 @@ void brw_vs_emit(struct brw_vs_compile *c )
       const struct prog_instruction *inst = &c->vp->program.Base.Instructions[insn];
       struct brw_reg args[3], dst;
       GLuint i;
-      struct brw_instruction *temp;
 
 #if 0
       printf("%d: ", insn);
@@ -1841,14 +1840,12 @@ void brw_vs_emit(struct brw_vs_compile *c )
          break;
       case OPCODE_BRK:
         brw_set_predicate_control(p, get_predicate(inst));
-        temp = brw_BREAK(p);
-        temp->bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
+        brw_BREAK(p, if_depth_in_loop[loop_depth]);
         brw_set_predicate_control(p, BRW_PREDICATE_NONE);
          break;
       case OPCODE_CONT:
         brw_set_predicate_control(p, get_predicate(inst));
-        temp = brw_CONT(p);
-        temp->bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
+        brw_CONT(p, if_depth_in_loop[loop_depth]);
          brw_set_predicate_control(p, BRW_PREDICATE_NONE);
          break;
       case OPCODE_ENDLOOP: 
index d72bd0825c4cae8f20d527bd2fd9ad70d496726c..c1083c594224ce43450cd12945650ec794c454a4 100644 (file)
@@ -1822,7 +1822,6 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
        struct brw_reg args[3][4], dst[4];
        int j;
        int mark = mark_tmps( c );
-       struct brw_instruction *temp;
 
         c->cur_inst = i;
 
@@ -2071,13 +2070,11 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
                if_depth_in_loop[loop_depth] = 0;
                break;
            case OPCODE_BRK:
-               temp = brw_BREAK(p);
-               temp->bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
+               brw_BREAK(p, if_depth_in_loop[loop_depth]);
                brw_set_predicate_control(p, BRW_PREDICATE_NONE);
                break;
            case OPCODE_CONT:
-               temp = brw_CONT(p);
-               temp->bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
+               brw_CONT(p, if_depth_in_loop[loop_depth]);
                brw_set_predicate_control(p, BRW_PREDICATE_NONE);
                break;
            case OPCODE_ENDLOOP: