mirror of https://github.com/PCSX2/pcsx2.git
GS-hw: Rename DATE_GL42 DATE_GL45.
DATE_GL42 -> DATE_PRIMID DATE_GL45 -> DATE_BARRIER
This commit is contained in:
parent
fa5c023d33
commit
aa475a8d2e
|
@ -510,7 +510,7 @@ void GSRendererNew::EmulateChannelShuffle(GSTexture** rt, const GSTextureCache::
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSRendererNew::EmulateBlending(bool& DATE_GL42, bool& DATE_GL45)
|
void GSRendererNew::EmulateBlending(bool& DATE_PRIMID, bool& DATE_BARRIER)
|
||||||
{
|
{
|
||||||
// AA1: Don't enable blending on AA1, not yet implemented on hardware mode,
|
// AA1: Don't enable blending on AA1, not yet implemented on hardware mode,
|
||||||
// it requires coverage sample so it's safer to turn it off instead.
|
// it requires coverage sample so it's safer to turn it off instead.
|
||||||
|
@ -745,18 +745,18 @@ void GSRendererNew::EmulateBlending(bool& DATE_GL42, bool& DATE_GL45)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GL42 interact very badly with sw blending. GL42 uses the primitiveID to find the primitive
|
// DATE_PRIMID interact very badly with sw blending. DATE_PRIMID uses the primitiveID to find the primitive
|
||||||
// that write the bad alpha value. Sw blending will force the draw to run primitive by primitive
|
// that write the bad alpha value. Sw blending will force the draw to run primitive by primitive
|
||||||
// (therefore primitiveID will be constant to 1).
|
// (therefore primitiveID will be constant to 1).
|
||||||
// Switch DATE_GL42 with DATE_GL45 in such cases to ensure accuracy.
|
// Switch DATE_PRIMID with DATE_BARRIER in such cases to ensure accuracy.
|
||||||
// No mix of COLCLIP + sw blend + DATE_GL42, neither sw fbmask + DATE_GL42.
|
// No mix of COLCLIP + sw blend + DATE_PRIMID, neither sw fbmask + DATE_PRIMID.
|
||||||
// Note: Do the swap in the end, saves the expensive draw splitting/barriers when mixed software blending is used.
|
// Note: Do the swap in the end, saves the expensive draw splitting/barriers when mixed software blending is used.
|
||||||
if (sw_blending && DATE_GL42 && m_conf.require_full_barrier)
|
if (sw_blending && DATE_PRIMID && m_conf.require_full_barrier)
|
||||||
{
|
{
|
||||||
GL_PERF("DATE: Swap DATE_GL42 with DATE_GL45");
|
GL_PERF("DATE: Swap DATE_PRIMID with DATE_BARRIER");
|
||||||
m_conf.require_full_barrier = true;
|
m_conf.require_full_barrier = true;
|
||||||
DATE_GL42 = false;
|
DATE_PRIMID = false;
|
||||||
DATE_GL45 = true;
|
DATE_BARRIER = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1172,8 +1172,8 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
const GSVector2& rtscale = ds ? ds->GetScale() : rt->GetScale();
|
const GSVector2& rtscale = ds ? ds->GetScale() : rt->GetScale();
|
||||||
|
|
||||||
const bool DATE = m_context->TEST.DATE && m_context->FRAME.PSM != PSM_PSMCT24;
|
const bool DATE = m_context->TEST.DATE && m_context->FRAME.PSM != PSM_PSMCT24;
|
||||||
bool DATE_GL42 = false;
|
bool DATE_PRIMID = false;
|
||||||
bool DATE_GL45 = false;
|
bool DATE_BARRIER = false;
|
||||||
bool DATE_one = false;
|
bool DATE_one = false;
|
||||||
|
|
||||||
const bool ate_first_pass = m_context->TEST.DoFirstPass();
|
const bool ate_first_pass = m_context->TEST.DoFirstPass();
|
||||||
|
@ -1236,7 +1236,7 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
if (g_gs_device->Features().texture_barrier)
|
if (g_gs_device->Features().texture_barrier)
|
||||||
{
|
{
|
||||||
m_conf.require_full_barrier = true;
|
m_conf.require_full_barrier = true;
|
||||||
DATE_GL45 = true;
|
DATE_BARRIER = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_context->FBA.FBA)
|
else if (m_context->FBA.FBA)
|
||||||
|
@ -1269,7 +1269,7 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
if (g_gs_device->Features().texture_barrier)
|
if (g_gs_device->Features().texture_barrier)
|
||||||
{
|
{
|
||||||
m_conf.require_full_barrier = true;
|
m_conf.require_full_barrier = true;
|
||||||
DATE_GL45 = true;
|
DATE_BARRIER = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (GSConfig.AccurateDATE)
|
else if (GSConfig.AccurateDATE)
|
||||||
|
@ -1278,12 +1278,12 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
GL_PERF("DATE: Accurate with alpha %d-%d", GetAlphaMinMax().min, GetAlphaMinMax().max);
|
GL_PERF("DATE: Accurate with alpha %d-%d", GetAlphaMinMax().min, GetAlphaMinMax().max);
|
||||||
if (g_gs_device->Features().image_load_store)
|
if (g_gs_device->Features().image_load_store)
|
||||||
{
|
{
|
||||||
DATE_GL42 = true;
|
DATE_PRIMID = true;
|
||||||
}
|
}
|
||||||
else if (g_gs_device->Features().texture_barrier)
|
else if (g_gs_device->Features().texture_barrier)
|
||||||
{
|
{
|
||||||
m_conf.require_full_barrier = true;
|
m_conf.require_full_barrier = true;
|
||||||
DATE_GL45 = true;
|
DATE_BARRIER = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1294,21 +1294,21 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
else if (!m_conf.colormask.wa && !m_context->TEST.ATE)
|
else if (!m_conf.colormask.wa && !m_context->TEST.ATE)
|
||||||
{
|
{
|
||||||
// TODO: is it legal ? Likely but it need to be tested carefully
|
// TODO: is it legal ? Likely but it need to be tested carefully
|
||||||
// DATE_GL45 = true;
|
// DATE_BARRIER = true;
|
||||||
// m_conf.require_one_barrier = true; << replace it with a cheap barrier
|
// m_conf.require_one_barrier = true; << replace it with a cheap barrier
|
||||||
}
|
}
|
||||||
|
|
||||||
// Will save my life !
|
// Will save my life !
|
||||||
ASSERT(!(DATE_GL45 && DATE_one));
|
ASSERT(!(DATE_BARRIER && DATE_one));
|
||||||
ASSERT(!(DATE_GL42 && DATE_one));
|
ASSERT(!(DATE_PRIMID && DATE_one));
|
||||||
ASSERT(!(DATE_GL42 && DATE_GL45));
|
ASSERT(!(DATE_PRIMID && DATE_BARRIER));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blend
|
// Blend
|
||||||
|
|
||||||
if (!IsOpaque() && rt)
|
if (!IsOpaque() && rt)
|
||||||
{
|
{
|
||||||
EmulateBlending(DATE_GL42, DATE_GL45);
|
EmulateBlending(DATE_PRIMID, DATE_BARRIER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1316,7 +1316,7 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_conf.ps.scanmsk & 2)
|
if (m_conf.ps.scanmsk & 2)
|
||||||
DATE_GL42 = false; // to have discard in the shader work correctly
|
DATE_PRIMID = false; // to have discard in the shader work correctly
|
||||||
|
|
||||||
if (m_conf.ps.dfmt == 1)
|
if (m_conf.ps.dfmt == 1)
|
||||||
{
|
{
|
||||||
|
@ -1324,15 +1324,15 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
m_conf.colormask.wa = 0;
|
m_conf.colormask.wa = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DATE setup, no DATE_GL45 please
|
// DATE setup, no DATE_BARRIER please
|
||||||
|
|
||||||
if (!DATE)
|
if (!DATE)
|
||||||
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::Off;
|
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::Off;
|
||||||
else if (DATE_one)
|
else if (DATE_one)
|
||||||
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::StencilOne;
|
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::StencilOne;
|
||||||
else if (DATE_GL42)
|
else if (DATE_PRIMID)
|
||||||
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::PrimIDTracking;
|
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::PrimIDTracking;
|
||||||
else if (DATE_GL45)
|
else if (DATE_BARRIER)
|
||||||
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::Full;
|
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::Full;
|
||||||
else
|
else
|
||||||
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::Stencil;
|
m_conf.destination_alpha = GSHWDrawConfig::DestinationAlphaMode::Stencil;
|
||||||
|
@ -1376,7 +1376,7 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
m_conf.gs.iip = m_conf.ps.iip;
|
m_conf.gs.iip = m_conf.ps.iip;
|
||||||
m_conf.vs.iip = m_conf.ps.iip;
|
m_conf.vs.iip = m_conf.ps.iip;
|
||||||
|
|
||||||
if (DATE_GL45)
|
if (DATE_BARRIER)
|
||||||
{
|
{
|
||||||
m_conf.ps.date = 5 + m_context->TEST.DATM;
|
m_conf.ps.date = 5 + m_context->TEST.DATM;
|
||||||
}
|
}
|
||||||
|
@ -1392,7 +1392,7 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
}
|
}
|
||||||
else if (DATE)
|
else if (DATE)
|
||||||
{
|
{
|
||||||
if (DATE_GL42)
|
if (DATE_PRIMID)
|
||||||
m_conf.ps.date = 1 + m_context->TEST.DATM;
|
m_conf.ps.date = 1 + m_context->TEST.DATM;
|
||||||
else
|
else
|
||||||
m_conf.depth.date = 1;
|
m_conf.depth.date = 1;
|
||||||
|
@ -1510,7 +1510,7 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
const GSVector4i scissor = GSVector4i(GSVector4(rtscale).xyxy() * hacked_scissor).rintersect(GSVector4i(rtsize).zwxy());
|
const GSVector4i scissor = GSVector4i(GSVector4(rtscale).xyxy() * hacked_scissor).rintersect(GSVector4i(rtsize).zwxy());
|
||||||
|
|
||||||
m_conf.drawarea = scissor.rintersect(ComputeBoundingBox(rtscale, rtsize));
|
m_conf.drawarea = scissor.rintersect(ComputeBoundingBox(rtscale, rtsize));
|
||||||
m_conf.scissor = (DATE && !DATE_GL45) ? m_conf.drawarea : scissor;
|
m_conf.scissor = (DATE && !DATE_BARRIER) ? m_conf.drawarea : scissor;
|
||||||
|
|
||||||
SetupIA(sx, sy);
|
SetupIA(sx, sy);
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ private:
|
||||||
inline void SetupIA(const float& sx, const float& sy);
|
inline void SetupIA(const float& sx, const float& sy);
|
||||||
inline void EmulateTextureShuffleAndFbmask();
|
inline void EmulateTextureShuffleAndFbmask();
|
||||||
inline void EmulateChannelShuffle(GSTexture** rt, const GSTextureCache::Source* tex);
|
inline void EmulateChannelShuffle(GSTexture** rt, const GSTextureCache::Source* tex);
|
||||||
inline void EmulateBlending(bool& DATE_GL42, bool& DATE_GL45);
|
inline void EmulateBlending(bool& DATE_PRIMID, bool& DATE_BARRIER);
|
||||||
inline void EmulateTextureSampler(const GSTextureCache::Source* tex);
|
inline void EmulateTextureSampler(const GSTextureCache::Source* tex);
|
||||||
inline void EmulateZbuffer();
|
inline void EmulateZbuffer();
|
||||||
inline void EmulateATST(float& AREF, GSHWDrawConfig::PSSelector& ps, bool pass_2);
|
inline void EmulateATST(float& AREF, GSHWDrawConfig::PSSelector& ps, bool pass_2);
|
||||||
|
|
Loading…
Reference in New Issue