mirror of https://github.com/PCSX2/pcsx2.git
GS-d3d: Add clr3 case for blend mix 2.
When Cs*(Alpha + 1) overflows compensate with adjusting Alpha output for Cd*Alpha.
This commit is contained in:
parent
35ce680859
commit
f478b3959c
|
@ -821,9 +821,8 @@ void ps_blend(inout float4 Color, inout float4 As_rgba, float2 pos_xy)
|
||||||
|
|
||||||
if (PS_CLR_HW == 1)
|
if (PS_CLR_HW == 1)
|
||||||
{
|
{
|
||||||
// Replace Af with As so we can do proper compensation for Alpha.
|
// As or Af
|
||||||
if (PS_BLEND_C == 2)
|
As_rgba.rgb = (float3)C;
|
||||||
As_rgba = (float4)Af;
|
|
||||||
// Subtract 1 for alpha to compensate for the changed equation,
|
// Subtract 1 for alpha to compensate for the changed equation,
|
||||||
// if c.rgb > 255.0f then we further need to adjust alpha accordingly,
|
// if c.rgb > 255.0f then we further need to adjust alpha accordingly,
|
||||||
// we pick the lowest overflow from all colors because it's the safest,
|
// we pick the lowest overflow from all colors because it's the safest,
|
||||||
|
@ -842,6 +841,16 @@ void ps_blend(inout float4 Color, inout float4 As_rgba, float2 pos_xy)
|
||||||
float color_compensate = 1.0f * (C + 1.0f);
|
float color_compensate = 1.0f * (C + 1.0f);
|
||||||
Color.rgb -= (float3)color_compensate;
|
Color.rgb -= (float3)color_compensate;
|
||||||
}
|
}
|
||||||
|
else if (PS_CLR_HW == 3)
|
||||||
|
{
|
||||||
|
// As, Ad or Af clamped.
|
||||||
|
As_rgba.rgb = (float3)C_clamped;
|
||||||
|
// Cs*(Alpha + 1) might overflow, if it does then adjust alpha value
|
||||||
|
// that is sent on second output to compensate.
|
||||||
|
float3 overflow_check = (Color.rgb - (float3)255.0f) / 255.0f;
|
||||||
|
float3 alpha_compensate = max((float3)0.0f, overflow_check);
|
||||||
|
As_rgba.rgb -= alpha_compensate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue