Fixed a number of issues in Voodoo recompiler, fixes dark rendering in MiG-29 Fulcrum.

This commit is contained in:
SarahW 2017-10-29 16:07:46 +00:00
commit e388086943

View file

@ -1129,10 +1129,14 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0xfd); addbyte(0xfd);
addbyte(0xc8); addbyte(0xc8);
} }
addbyte(0x66); /*PACKUSWB XMM3, XMM1*/ addbyte(0xf3); /*MOVD XMM3, XMM1*/
addbyte(0x0f);
addbyte(0x7e);
addbyte(0xd9);
addbyte(0x66); /*PACKUSWB XMM3, XMM3*/
addbyte(0x0f); addbyte(0x0f);
addbyte(0x67); addbyte(0x67);
addbyte(0xd9); addbyte(0xdb);
if (tca_sub_clocal_1) if (tca_sub_clocal_1)
{ {
addbyte(0x66); /*MOVD EBX, XMM3*/ addbyte(0x66); /*MOVD EBX, XMM3*/
@ -1457,17 +1461,9 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0xff); addbyte(0xff);
addbyte(0x66); /*PADDW XMM1, XMM4*/ addbyte(0x66); /*PADDW XMM1, XMM4*/
addbyte(0x0f); addbyte(0x0f);
addbyte(0xfc); addbyte(0xfd);
addbyte(0xcc); addbyte(0xcc);
} }
if (tc_invert_output)
{
addbyte(0x66); /*PXOR XMM1, FF*/
addbyte(0x0f);
addbyte(0xef);
addbyte(0x0d);
addlong((uint32_t)&xmm_ff_w);
}
addbyte(0x66); /*PACKUSWB XMM0, XMM0*/ addbyte(0x66); /*PACKUSWB XMM0, XMM0*/
addbyte(0x0f); addbyte(0x0f);
@ -1481,6 +1477,14 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0x0f); addbyte(0x0f);
addbyte(0x67); addbyte(0x67);
addbyte(0xc9); addbyte(0xc9);
if (tc_invert_output)
{
addbyte(0x66); /*PXOR XMM1, FF*/
addbyte(0x0f);
addbyte(0xef);
addbyte(0x0d);
addlong((uint32_t)&xmm_ff_b);
}
if (tca_zero_other) if (tca_zero_other)
{ {
@ -1658,7 +1662,7 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0xc0); addbyte(0xc0);
} }
if (params->alphaMode & ((1 << 0) | (1 << 4))) if ((params->alphaMode & ((1 << 0) | (1 << 4))) || (!(cc_mselect == 0 && cc_reverse_blend == 0) && (cc_mselect == CC_MSELECT_AOTHER || cc_mselect == CC_MSELECT_ALOCAL)))
{ {
/*EBX = a_other*/ /*EBX = a_other*/
switch (a_sel) switch (a_sel)