mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Better name get alpha values for blend.
This commit is contained in:
parent
8b9b7f7baf
commit
58defda298
|
@ -3949,23 +3949,23 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, bool& DAT
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get alpha value
|
// Get alpha value
|
||||||
const bool alpha_c0_zero = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().max == 0);
|
const bool alpha_c0_eq_zero = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().max == 0);
|
||||||
const bool alpha_c0_one = (m_conf.ps.blend_c == 0 && (GetAlphaMinMax().min == 128) && (GetAlphaMinMax().max == 128));
|
const bool alpha_c0_eq_one = (m_conf.ps.blend_c == 0 && (GetAlphaMinMax().min == 128) && (GetAlphaMinMax().max == 128));
|
||||||
const bool alpha_c0_high_min_one = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().min > 128);
|
const bool alpha_c0_high_min_one = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().min > 128);
|
||||||
const bool alpha_c0_high_max_one = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().max > 128);
|
const bool alpha_c0_high_max_one = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().max > 128);
|
||||||
const bool alpha_c0_less_max_one = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().max <= 128);
|
const bool alpha_c0_eq_less_max_one = (m_conf.ps.blend_c == 0 && GetAlphaMinMax().max <= 128);
|
||||||
const bool alpha_c1_high_min_one = (m_conf.ps.blend_c == 1 && rt_alpha_min > 128);
|
const bool alpha_c1_high_min_one = (m_conf.ps.blend_c == 1 && rt_alpha_min > 128);
|
||||||
const bool alpha_c1_high_max_one = (m_conf.ps.blend_c == 1 && rt_alpha_max > 128);
|
const bool alpha_c1_high_max_one = (m_conf.ps.blend_c == 1 && rt_alpha_max > 128);
|
||||||
bool alpha_c1_high_no_rta_correct = m_conf.ps.blend_c == 1 && !(new_rt_alpha_scale || can_scale_rt_alpha);
|
bool alpha_c1_high_no_rta_correct = m_conf.ps.blend_c == 1 && !(new_rt_alpha_scale || can_scale_rt_alpha);
|
||||||
const bool alpha_c2_zero = (m_conf.ps.blend_c == 2 && AFIX == 0u);
|
const bool alpha_c2_eq_zero = (m_conf.ps.blend_c == 2 && AFIX == 0u);
|
||||||
const bool alpha_c2_one = (m_conf.ps.blend_c == 2 && AFIX == 128u);
|
const bool alpha_c2_eq_one = (m_conf.ps.blend_c == 2 && AFIX == 128u);
|
||||||
const bool alpha_c2_less_one = (m_conf.ps.blend_c == 2 && AFIX <= 128u);
|
const bool alpha_c2_eq_less_one = (m_conf.ps.blend_c == 2 && AFIX <= 128u);
|
||||||
const bool alpha_c2_high_one = (m_conf.ps.blend_c == 2 && AFIX > 128u);
|
const bool alpha_c2_high_one = (m_conf.ps.blend_c == 2 && AFIX > 128u);
|
||||||
const bool alpha_one = alpha_c0_one || alpha_c2_one;
|
const bool alpha_eq_one = alpha_c0_eq_one || alpha_c2_eq_one;
|
||||||
const bool alpha_less_one = alpha_c0_less_max_one || alpha_c2_less_one;
|
const bool alpha_eq_less_one = alpha_c0_eq_less_max_one || alpha_c2_eq_less_one;
|
||||||
|
|
||||||
// Optimize blending equations, must be done before index calculation
|
// Optimize blending equations, must be done before index calculation
|
||||||
if ((m_conf.ps.blend_a == m_conf.ps.blend_b) || ((m_conf.ps.blend_b == m_conf.ps.blend_d) && alpha_one))
|
if ((m_conf.ps.blend_a == m_conf.ps.blend_b) || ((m_conf.ps.blend_b == m_conf.ps.blend_d) && alpha_eq_one))
|
||||||
{
|
{
|
||||||
// Condition 1:
|
// Condition 1:
|
||||||
// A == B
|
// A == B
|
||||||
|
@ -3981,7 +3981,7 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, bool& DAT
|
||||||
m_conf.ps.blend_b = 0;
|
m_conf.ps.blend_b = 0;
|
||||||
m_conf.ps.blend_c = 0;
|
m_conf.ps.blend_c = 0;
|
||||||
}
|
}
|
||||||
else if (alpha_c0_zero || alpha_c2_zero)
|
else if (alpha_c0_eq_zero || alpha_c2_eq_zero)
|
||||||
{
|
{
|
||||||
// C == 0.0f
|
// C == 0.0f
|
||||||
// (A - B) * C, result will be 0.0f so set A B to Cs
|
// (A - B) * C, result will be 0.0f so set A B to Cs
|
||||||
|
@ -4040,14 +4040,14 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, bool& DAT
|
||||||
bool color_dest_blend = !!(blend_flag & BLEND_CD);
|
bool color_dest_blend = !!(blend_flag & BLEND_CD);
|
||||||
|
|
||||||
// HW blend can handle it, no need for sw blend or hdr, Cd*Alpha or Cd*(1 - Alpha) where Alpha <= 128, Alpha is As or Af.
|
// HW blend can handle it, no need for sw blend or hdr, Cd*Alpha or Cd*(1 - Alpha) where Alpha <= 128, Alpha is As or Af.
|
||||||
bool color_dest_blend2 = alpha_less_one && ((blend_flag & BLEND_HW2) || (m_conf.ps.blend_b == m_conf.ps.blend_d == 1 && m_conf.ps.blend_a == 2));
|
bool color_dest_blend2 = alpha_eq_less_one && ((blend_flag & BLEND_HW2) || (m_conf.ps.blend_b == m_conf.ps.blend_d == 1 && m_conf.ps.blend_a == 2));
|
||||||
|
|
||||||
// Do the multiplication in shader for blending accumulation: Cs*As + Cd or Cs*Af + Cd
|
// Do the multiplication in shader for blending accumulation: Cs*As + Cd or Cs*Af + Cd
|
||||||
bool accumulation_blend = !!(blend_flag & BLEND_ACCU);
|
bool accumulation_blend = !!(blend_flag & BLEND_ACCU);
|
||||||
// If alpha == 1.0, almost everything is an accumulation blend!
|
// If alpha == 1.0, almost everything is an accumulation blend!
|
||||||
// Ones that use (1 + Alpha) can't guarante the mixed sw+hw blending this enables will give an identical result to sw due to clamping
|
// Ones that use (1 + Alpha) can't guarante the mixed sw+hw blending this enables will give an identical result to sw due to clamping
|
||||||
// But enable for everything else that involves dst color
|
// But enable for everything else that involves dst color
|
||||||
if (alpha_one && (m_conf.ps.blend_a != m_conf.ps.blend_d) && blend.dst != GSDevice::CONST_ZERO)
|
if (alpha_eq_one && (m_conf.ps.blend_a != m_conf.ps.blend_d) && blend.dst != GSDevice::CONST_ZERO)
|
||||||
accumulation_blend = true;
|
accumulation_blend = true;
|
||||||
|
|
||||||
// Blending doesn't require barrier, or sampling of the rt
|
// Blending doesn't require barrier, or sampling of the rt
|
||||||
|
@ -4327,7 +4327,7 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, bool& DAT
|
||||||
// Disable dithering on blend mix if needed.
|
// Disable dithering on blend mix if needed.
|
||||||
if (m_conf.ps.dither)
|
if (m_conf.ps.dither)
|
||||||
{
|
{
|
||||||
const bool can_dither = (m_conf.ps.blend_a == 0 && m_conf.ps.blend_b == 1 && alpha_less_one);
|
const bool can_dither = (m_conf.ps.blend_a == 0 && m_conf.ps.blend_b == 1 && alpha_eq_less_one);
|
||||||
m_conf.ps.dither = can_dither;
|
m_conf.ps.dither = can_dither;
|
||||||
m_conf.ps.dither_adjust = can_dither;
|
m_conf.ps.dither_adjust = can_dither;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue