Voodoo now implements texture RGB as a multiplier input in the colour combiner.
This commit is contained in:
parent
7084337906
commit
e162b6166e
3 changed files with 41 additions and 1 deletions
|
|
@ -833,7 +833,8 @@ enum
|
||||||
CC_MSELECT_CLOCAL = 1,
|
CC_MSELECT_CLOCAL = 1,
|
||||||
CC_MSELECT_AOTHER = 2,
|
CC_MSELECT_AOTHER = 2,
|
||||||
CC_MSELECT_ALOCAL = 3,
|
CC_MSELECT_ALOCAL = 3,
|
||||||
CC_MSELECT_TEX = 4
|
CC_MSELECT_TEX = 4,
|
||||||
|
CC_MSELECT_TEXRGB = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
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_g = state->tex_a[0];
|
||||||
msel_b = state->tex_a[0];
|
msel_b = state->tex_a[0];
|
||||||
break;
|
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:
|
default:
|
||||||
fatal("Bad cc_mselect %i\n", cc_mselect);
|
fatal("Bad cc_mselect %i\n", cc_mselect);
|
||||||
|
|
|
||||||
|
|
@ -1647,6 +1647,13 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
|
||||||
addbyte(0x7e);
|
addbyte(0x7e);
|
||||||
addbyte(0xc1);
|
addbyte(0xc1);
|
||||||
}
|
}
|
||||||
|
if (cc_mselect == CC_MSELECT_TEXRGB)
|
||||||
|
{
|
||||||
|
addbyte(0xf3); /*MOVD XMM4, XMM0*/
|
||||||
|
addbyte(0x0f);
|
||||||
|
addbyte(0x7e);
|
||||||
|
addbyte(0xe0);
|
||||||
|
}
|
||||||
|
|
||||||
if ((params->fbzMode & FBZ_CHROMAKEY))
|
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));
|
addlong(offsetof(voodoo_state_t, tex_a));
|
||||||
addbyte(2);
|
addbyte(2);
|
||||||
break;
|
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:
|
default:
|
||||||
addbyte(0x66); /*PXOR XMM3, XMM3*/
|
addbyte(0x66); /*PXOR XMM3, XMM3*/
|
||||||
addbyte(0x0f);
|
addbyte(0x0f);
|
||||||
|
|
|
||||||
|
|
@ -1628,6 +1628,13 @@ static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo
|
||||||
addbyte(0x7e);
|
addbyte(0x7e);
|
||||||
addbyte(0xc1);
|
addbyte(0xc1);
|
||||||
}
|
}
|
||||||
|
if (cc_mselect == CC_MSELECT_TEXRGB)
|
||||||
|
{
|
||||||
|
addbyte(0xf3); /*MOVD XMM4, XMM0*/
|
||||||
|
addbyte(0x0f);
|
||||||
|
addbyte(0x7e);
|
||||||
|
addbyte(0xe0);
|
||||||
|
}
|
||||||
|
|
||||||
if ((params->fbzMode & FBZ_CHROMAKEY))
|
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));
|
addlong(offsetof(voodoo_state_t, tex_a));
|
||||||
addbyte(2);
|
addbyte(2);
|
||||||
break;
|
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:
|
default:
|
||||||
addbyte(0x66); /*PXOR XMM3, XMM3*/
|
addbyte(0x66); /*PXOR XMM3, XMM3*/
|
||||||
addbyte(0x0f);
|
addbyte(0x0f);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue