i965: restore the flag after building the subroutine of the

GS thread. fix #13240
This commit is contained in:
Xiang, Haihao 2007-12-19 10:36:56 +08:00
parent 27de28fc3e
commit 41ed6be1da

View file

@ -564,6 +564,8 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c )
struct brw_reg primmask;
struct brw_instruction *jmp;
struct brw_reg v1_null_ud = vec1(retype(brw_null_reg(), BRW_REGISTER_TYPE_UD));
GLuint saveflag;
alloc_regs(c);
@ -582,10 +584,15 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c )
(1<<_3DPRIM_TRIFAN_NOSTIPPLE)));
jmp = brw_JMPI(p, ip, ip, brw_imm_w(0));
{
brw_push_insn_state(p);
saveflag = p->flag_value;
brw_push_insn_state(p);
brw_emit_tri_setup( c );
brw_pop_insn_state(p);
/* note - thread killed in subroutine */
p->flag_value = saveflag;
/* note - thread killed in subroutine, so must
* restore the flag which is changed when building
* the subroutine. fix #13240
*/
}
brw_land_fwd_jump(p, jmp);
@ -598,9 +605,11 @@ void brw_emit_anyprim_setup( struct brw_sf_compile *c )
(1<<_3DPRIM_LINESTRIP_CONT_BF)));
jmp = brw_JMPI(p, ip, ip, brw_imm_w(0));
{
saveflag = p->flag_value;
brw_push_insn_state(p);
brw_emit_line_setup( c );
brw_pop_insn_state(p);
p->flag_value = saveflag;
/* note - thread killed in subroutine */
}
brw_land_fwd_jump(p, jmp);