mirror of https://github.com/PCSX2/pcsx2.git
GSdx-hw: SwSpriteRender, implement all ALPHA.C.
This commit is contained in:
parent
d648755d75
commit
09116d8964
|
@ -813,6 +813,8 @@ void GSRendererHW::SwSpriteRender()
|
||||||
|
|
||||||
uint8 tex0_tcc = m_context->TEX0.TCC;
|
uint8 tex0_tcc = m_context->TEX0.TCC;
|
||||||
uint8 alpha_b = m_context->ALPHA.B;
|
uint8 alpha_b = m_context->ALPHA.B;
|
||||||
|
uint8 alpha_c = m_context->ALPHA.C;
|
||||||
|
uint8 alpha_fix = m_context->ALPHA.FIX;
|
||||||
|
|
||||||
for (int y = 0; y < h; y++, ++sy, ++dy)
|
for (int y = 0; y < h; y++, ++sy, ++dy)
|
||||||
{
|
{
|
||||||
|
@ -856,23 +858,27 @@ void GSRendererHW::SwSpriteRender()
|
||||||
// Blending
|
// Blending
|
||||||
ASSERT(m_context->ALPHA.A == 0);
|
ASSERT(m_context->ALPHA.A == 0);
|
||||||
ASSERT(alpha_b == 1 || alpha_b == 2);
|
ASSERT(alpha_b == 1 || alpha_b == 2);
|
||||||
ASSERT(m_context->ALPHA.C == 0);
|
|
||||||
ASSERT(m_context->ALPHA.D == 1);
|
ASSERT(m_context->ALPHA.D == 1);
|
||||||
ASSERT(m_context->ALPHA.FIX == 0);
|
|
||||||
|
|
||||||
GSVector4i sc_alpha_vec =
|
// Flag C
|
||||||
sc.yyww() // 0x00AA00BB00AA00BB00aa00bb00aa00bb
|
GSVector4i sc_alpha_vec;
|
||||||
.srl32(16) // 0x000000AA000000AA000000aa000000aa
|
|
||||||
.ps32() // 0x00AA00AA00aa00aa00AA00AA00aa00aa
|
if (alpha_c == 2)
|
||||||
.xxyy(); // 0x00AA00AA00AA00AA00aa00aa00aa00aa
|
sc_alpha_vec = GSVector4i(alpha_fix).xxxx().ps32();
|
||||||
|
else
|
||||||
|
sc_alpha_vec = (alpha_c == 0 ? sc : dc0)
|
||||||
|
.yyww() // 0x00AA00BB00AA00BB00aa00bb00aa00bb
|
||||||
|
.srl32(16) // 0x000000AA000000AA000000aa000000aa
|
||||||
|
.ps32() // 0x00AA00AA00aa00aa00AA00AA00aa00aa
|
||||||
|
.xxyy(); // 0x00AA00AA00AA00AA00aa00aa00aa00aa
|
||||||
|
|
||||||
switch (alpha_b)
|
switch (alpha_b)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
dc = sc.sub16(dc0).mul16l(sc_alpha_vec).sra16(7).add16(dc0); // (((Cs - Cd) * As) >> 7) + Cd, must use sra16 due to signed 16 bit values
|
dc = sc.sub16(dc0).mul16l(sc_alpha_vec).sra16(7).add16(dc0); // (((Cs - Cd) * C) >> 7) + Cd, must use sra16 due to signed 16 bit values
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dc = sc.mul16l(sc_alpha_vec).sra16(7).add16(dc0); // (((Cs - 0) * As) >> 7) + Cd, must use sra16 due to signed 16 bit values
|
dc = sc.mul16l(sc_alpha_vec).sra16(7).add16(dc0); // (((Cs - 0) * C) >> 7) + Cd, must use sra16 due to signed 16 bit values
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// dc alpha channels (dc.u16[3], dc.u16[7]) dirty
|
// dc alpha channels (dc.u16[3], dc.u16[7]) dirty
|
||||||
|
|
Loading…
Reference in New Issue