Voodoo now implements texture RGB as a multiplier input in the colour combiner.

This commit is contained in:
SarahW 2016-11-20 17:16:00 +00:00
commit e162b6166e
3 changed files with 41 additions and 1 deletions

View file

@ -833,7 +833,8 @@ enum
CC_MSELECT_CLOCAL = 1,
CC_MSELECT_AOTHER = 2,
CC_MSELECT_ALOCAL = 3,
CC_MSELECT_TEX = 4
CC_MSELECT_TEX = 4,
CC_MSELECT_TEXRGB = 5
};
enum
@ -2957,6 +2958,11 @@ static void voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, vood
msel_g = state->tex_a[0];
msel_b = state->tex_a[0];
break;
case CC_MSELECT_TEXRGB:
msel_r = state->tex_r[0];
msel_g = state->tex_g[0];
msel_b = state->tex_b[0];
break;
default:
fatal("Bad cc_mselect %i\n", cc_mselect);

View file

@ -1647,6 +1647,13 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0x7e);
addbyte(0xc1);
}
if (cc_mselect == CC_MSELECT_TEXRGB)
{
addbyte(0xf3); /*MOVD XMM4, XMM0*/
addbyte(0x0f);
addbyte(0x7e);
addbyte(0xe0);
}
if ((params->fbzMode & FBZ_CHROMAKEY))
{
@ -2109,6 +2116,16 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addlong(offsetof(voodoo_state_t, tex_a));
addbyte(2);
break;
case CC_MSELECT_TEXRGB:
addbyte(0x66); /*PUNPCKLBW XMM4, XMM2*/
addbyte(0x0f);
addbyte(0x60);
addbyte(0xe2);
addbyte(0xf3); /*MOVQ XMM3, XMM4*/
addbyte(0x0f);
addbyte(0x7e);
addbyte(0xdc);
break;
default:
addbyte(0x66); /*PXOR XMM3, XMM3*/
addbyte(0x0f);

View file

@ -1628,6 +1628,13 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addbyte(0x7e);
addbyte(0xc1);
}
if (cc_mselect == CC_MSELECT_TEXRGB)
{
addbyte(0xf3); /*MOVD XMM4, XMM0*/
addbyte(0x0f);
addbyte(0x7e);
addbyte(0xe0);
}
if ((params->fbzMode & FBZ_CHROMAKEY))
{
@ -2095,6 +2102,16 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
addlong(offsetof(voodoo_state_t, tex_a));
addbyte(2);
break;
case CC_MSELECT_TEXRGB:
addbyte(0x66); /*PUNPCKLBW XMM4, XMM2*/
addbyte(0x0f);
addbyte(0x60);
addbyte(0xe2);
addbyte(0xf3); /*MOVQ XMM3, XMM4*/
addbyte(0x0f);
addbyte(0x7e);
addbyte(0xdc);
break;
default:
addbyte(0x66); /*PXOR XMM3, XMM3*/
addbyte(0x0f);