From e162b6166e5eb136ced1e7d6d709a42aa19346d3 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 20 Nov 2016 17:16:00 +0000 Subject: [PATCH] Voodoo now implements texture RGB as a multiplier input in the colour combiner. --- src/vid_voodoo.c | 8 +++++++- src/vid_voodoo_codegen_x86-64.h | 17 +++++++++++++++++ src/vid_voodoo_codegen_x86.h | 17 +++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/vid_voodoo.c b/src/vid_voodoo.c index 0bf3e0a..81b19ed 100644 --- a/src/vid_voodoo.c +++ b/src/vid_voodoo.c @@ -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); diff --git a/src/vid_voodoo_codegen_x86-64.h b/src/vid_voodoo_codegen_x86-64.h index 5200f70..622f5d0 100644 --- a/src/vid_voodoo_codegen_x86-64.h +++ b/src/vid_voodoo_codegen_x86-64.h @@ -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); diff --git a/src/vid_voodoo_codegen_x86.h b/src/vid_voodoo_codegen_x86.h index fa0c84f..13bb687 100644 --- a/src/vid_voodoo_codegen_x86.h +++ b/src/vid_voodoo_codegen_x86.h @@ -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);