mirror of https://github.com/PCSX2/pcsx2.git
GS/D3D: Add initial support for complex shuffles.
This commit is contained in:
parent
20f03e237e
commit
713bd132dc
|
@ -52,6 +52,7 @@
|
||||||
#define PS_POINT_SAMPLER 0
|
#define PS_POINT_SAMPLER 0
|
||||||
#define PS_REGION_RECT 0
|
#define PS_REGION_RECT 0
|
||||||
#define PS_SHUFFLE 0
|
#define PS_SHUFFLE 0
|
||||||
|
#define PS_SHUFFLE_SAME 0
|
||||||
#define PS_READ_BA 0
|
#define PS_READ_BA 0
|
||||||
#define PS_READ16_SRC 0
|
#define PS_READ16_SRC 0
|
||||||
#define PS_DFMT 0
|
#define PS_DFMT 0
|
||||||
|
@ -941,7 +942,21 @@ PS_OUTPUT ps_main(PS_INPUT input)
|
||||||
uint4 denorm_c = uint4(C);
|
uint4 denorm_c = uint4(C);
|
||||||
uint2 denorm_TA = uint2(float2(TA.xy) * 255.0f + 0.5f);
|
uint2 denorm_TA = uint2(float2(TA.xy) * 255.0f + 0.5f);
|
||||||
|
|
||||||
if (PS_READ16_SRC)
|
// Special case for 32bit input and 16bit output, shuffle used by The Godfather.
|
||||||
|
if (PS_SHUFFLE_SAME)
|
||||||
|
{
|
||||||
|
if (PS_READ_BA)
|
||||||
|
{
|
||||||
|
C.ga = (float2)(float((denorm_c.b & 0x7Fu) | (denorm_c.a & 0x80u)));
|
||||||
|
C.rb = C.ga;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
C.ga = C.rg;
|
||||||
|
C.rb = C.ga;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (PS_READ16_SRC)
|
||||||
{
|
{
|
||||||
C.rb = (float2)float((denorm_c.r >> 3) | (((denorm_c.g >> 3) & 0x7u) << 5));
|
C.rb = (float2)float((denorm_c.r >> 3) | (((denorm_c.g >> 3) & 0x7u) << 5));
|
||||||
if (denorm_c.a & 0x80u)
|
if (denorm_c.a & 0x80u)
|
||||||
|
|
|
@ -138,6 +138,7 @@ void GSDevice11::SetupPS(const PSSelector& sel, const GSHWDrawConfig::PSConstant
|
||||||
sm.AddMacro("PS_POINT_SAMPLER", sel.point_sampler);
|
sm.AddMacro("PS_POINT_SAMPLER", sel.point_sampler);
|
||||||
sm.AddMacro("PS_REGION_RECT", sel.region_rect);
|
sm.AddMacro("PS_REGION_RECT", sel.region_rect);
|
||||||
sm.AddMacro("PS_SHUFFLE", sel.shuffle);
|
sm.AddMacro("PS_SHUFFLE", sel.shuffle);
|
||||||
|
sm.AddMacro("PS_SHUFFLE_SAME", sel.shuffle_same);
|
||||||
sm.AddMacro("PS_READ_BA", sel.read_ba);
|
sm.AddMacro("PS_READ_BA", sel.read_ba);
|
||||||
sm.AddMacro("PS_READ16_SRC", sel.real16src);
|
sm.AddMacro("PS_READ16_SRC", sel.real16src);
|
||||||
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
||||||
|
|
|
@ -2743,6 +2743,7 @@ const ID3DBlob* GSDevice12::GetTFXPixelShader(const GSHWDrawConfig::PSSelector&
|
||||||
sm.AddMacro("PS_POINT_SAMPLER", sel.point_sampler);
|
sm.AddMacro("PS_POINT_SAMPLER", sel.point_sampler);
|
||||||
sm.AddMacro("PS_REGION_RECT", sel.region_rect);
|
sm.AddMacro("PS_REGION_RECT", sel.region_rect);
|
||||||
sm.AddMacro("PS_SHUFFLE", sel.shuffle);
|
sm.AddMacro("PS_SHUFFLE", sel.shuffle);
|
||||||
|
sm.AddMacro("PS_SHUFFLE_SAME", sel.shuffle_same);
|
||||||
sm.AddMacro("PS_READ_BA", sel.read_ba);
|
sm.AddMacro("PS_READ_BA", sel.read_ba);
|
||||||
sm.AddMacro("PS_READ16_SRC", sel.real16src);
|
sm.AddMacro("PS_READ16_SRC", sel.real16src);
|
||||||
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
||||||
|
|
Loading…
Reference in New Issue