mirror of https://github.com/PCSX2/pcsx2.git
GS/HW: Rename dfmt to dst_fmt.
It was confusing whenever the d meant depth or destination, this should make the code easier to read.
This commit is contained in:
parent
fc22268fc2
commit
f96e7a9156
|
@ -55,7 +55,7 @@
|
||||||
#define PS_SHUFFLE_SAME 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_DST_FMT 0
|
||||||
#define PS_DEPTH_FMT 0
|
#define PS_DEPTH_FMT 0
|
||||||
#define PS_PAL_FMT 0
|
#define PS_PAL_FMT 0
|
||||||
#define PS_CHANNEL_FETCH 0
|
#define PS_CHANNEL_FETCH 0
|
||||||
|
@ -797,7 +797,7 @@ void ps_color_clamp_wrap(inout float3 C)
|
||||||
// so we need to limit the color depth on dithered items
|
// so we need to limit the color depth on dithered items
|
||||||
if (SW_BLEND || PS_DITHER || PS_FBMASK)
|
if (SW_BLEND || PS_DITHER || PS_FBMASK)
|
||||||
{
|
{
|
||||||
if (PS_DFMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV)
|
if (PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV)
|
||||||
C += 7.0f; // Need to round up, not down since the shader will invert
|
C += 7.0f; // Need to round up, not down since the shader will invert
|
||||||
|
|
||||||
// Standard Clamp
|
// Standard Clamp
|
||||||
|
@ -805,7 +805,7 @@ void ps_color_clamp_wrap(inout float3 C)
|
||||||
C = clamp(C, (float3)0.0f, (float3)255.0f);
|
C = clamp(C, (float3)0.0f, (float3)255.0f);
|
||||||
|
|
||||||
// In 16 bits format, only 5 bits of color are used. It impacts shadows computation of Castlevania
|
// In 16 bits format, only 5 bits of color are used. It impacts shadows computation of Castlevania
|
||||||
if (PS_DFMT == FMT_16 && PS_BLEND_MIX == 0)
|
if (PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0)
|
||||||
C = (float3)((int3)C & (int3)0xF8);
|
C = (float3)((int3)C & (int3)0xF8);
|
||||||
else if (PS_COLCLIP == 1 || PS_HDR == 1)
|
else if (PS_COLCLIP == 1 || PS_HDR == 1)
|
||||||
C = (float3)((int3)C & (int3)0xFF);
|
C = (float3)((int3)C & (int3)0xFF);
|
||||||
|
@ -999,12 +999,12 @@ PS_OUTPUT ps_main(PS_INPUT input)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alpha correction
|
// Alpha correction
|
||||||
if (PS_DFMT == FMT_16)
|
if (PS_DST_FMT == FMT_16)
|
||||||
{
|
{
|
||||||
float A_one = 128.0f; // alpha output will be 0x80
|
float A_one = 128.0f; // alpha output will be 0x80
|
||||||
C.a = PS_FBA ? A_one : step(A_one, C.a) * A_one;
|
C.a = PS_FBA ? A_one : step(A_one, C.a) * A_one;
|
||||||
}
|
}
|
||||||
else if ((PS_DFMT == FMT_32) && PS_FBA)
|
else if ((PS_DST_FMT == FMT_32) && PS_FBA)
|
||||||
{
|
{
|
||||||
float A_one = 128.0f;
|
float A_one = 128.0f;
|
||||||
if (C.a < A_one) C.a += A_one;
|
if (C.a < A_one) C.a += A_one;
|
||||||
|
|
|
@ -740,7 +740,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||||
// so we need to limit the color depth on dithered items
|
// so we need to limit the color depth on dithered items
|
||||||
#if SW_BLEND || PS_DITHER || PS_FBMASK
|
#if SW_BLEND || PS_DITHER || PS_FBMASK
|
||||||
|
|
||||||
#if PS_DFMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV
|
#if PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV
|
||||||
C += 7.0f; // Need to round up, not down since the shader will invert
|
C += 7.0f; // Need to round up, not down since the shader will invert
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -756,7 +756,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||||
// Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy
|
// Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy
|
||||||
// GS: Color = 1, Alpha = 255 => output 1
|
// GS: Color = 1, Alpha = 255 => output 1
|
||||||
// GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875
|
// GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875
|
||||||
#if PS_DFMT == FMT_16 && PS_BLEND_MIX == 0
|
#if PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0
|
||||||
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
||||||
C = vec3(ivec3(C) & ivec3(0xF8));
|
C = vec3(ivec3(C) & ivec3(0xF8));
|
||||||
#elif PS_COLCLIP == 1 || PS_HDR == 1
|
#elif PS_COLCLIP == 1 || PS_HDR == 1
|
||||||
|
@ -1018,10 +1018,10 @@ void ps_main()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Correct the ALPHA value based on the output format
|
// Correct the ALPHA value based on the output format
|
||||||
#if (PS_DFMT == FMT_16)
|
#if (PS_DST_FMT == FMT_16)
|
||||||
float A_one = 128.0f; // alpha output will be 0x80
|
float A_one = 128.0f; // alpha output will be 0x80
|
||||||
C.a = (PS_FBA != 0) ? A_one : step(128.0f, C.a) * A_one;
|
C.a = (PS_FBA != 0) ? A_one : step(128.0f, C.a) * A_one;
|
||||||
#elif (PS_DFMT == FMT_32) && (PS_FBA != 0)
|
#elif (PS_DST_FMT == FMT_32) && (PS_FBA != 0)
|
||||||
if(C.a < 128.0f) C.a += 128.0f;
|
if(C.a < 128.0f) C.a += 128.0f;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -281,7 +281,7 @@ void main()
|
||||||
#define PS_READ_BA 0
|
#define PS_READ_BA 0
|
||||||
#define PS_WRITE_RG 0
|
#define PS_WRITE_RG 0
|
||||||
#define PS_READ16_SRC 0
|
#define PS_READ16_SRC 0
|
||||||
#define PS_DFMT 0
|
#define PS_DST_FMT 0
|
||||||
#define PS_DEPTH_FMT 0
|
#define PS_DEPTH_FMT 0
|
||||||
#define PS_PAL_FMT 0
|
#define PS_PAL_FMT 0
|
||||||
#define PS_CHANNEL_FETCH 0
|
#define PS_CHANNEL_FETCH 0
|
||||||
|
@ -988,7 +988,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||||
// so we need to limit the color depth on dithered items
|
// so we need to limit the color depth on dithered items
|
||||||
#if SW_BLEND || PS_DITHER || PS_FBMASK
|
#if SW_BLEND || PS_DITHER || PS_FBMASK
|
||||||
|
|
||||||
#if PS_DFMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV
|
#if PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV
|
||||||
C += 7.0f; // Need to round up, not down since the shader will invert
|
C += 7.0f; // Need to round up, not down since the shader will invert
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1004,7 +1004,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||||
// Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy
|
// Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy
|
||||||
// GS: Color = 1, Alpha = 255 => output 1
|
// GS: Color = 1, Alpha = 255 => output 1
|
||||||
// GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875
|
// GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875
|
||||||
#if PS_DFMT == FMT_16 && PS_BLEND_MIX == 0
|
#if PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0
|
||||||
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
||||||
C = vec3(ivec3(C) & ivec3(0xF8));
|
C = vec3(ivec3(C) & ivec3(0xF8));
|
||||||
#elif PS_COLCLIP == 1 || PS_HDR == 1
|
#elif PS_COLCLIP == 1 || PS_HDR == 1
|
||||||
|
@ -1245,10 +1245,10 @@ void main()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Correct the ALPHA value based on the output format
|
// Correct the ALPHA value based on the output format
|
||||||
#if (PS_DFMT == FMT_16)
|
#if (PS_DST_FMT == FMT_16)
|
||||||
float A_one = 128.0f; // alpha output will be 0x80
|
float A_one = 128.0f; // alpha output will be 0x80
|
||||||
C.a = (PS_FBA != 0) ? A_one : step(128.0f, C.a) * A_one;
|
C.a = (PS_FBA != 0) ? A_one : step(128.0f, C.a) * A_one;
|
||||||
#elif (PS_DFMT == FMT_32) && (PS_FBA != 0)
|
#elif (PS_DST_FMT == FMT_32) && (PS_FBA != 0)
|
||||||
if(C.a < 128.0f) C.a += 128.0f;
|
if(C.a < 128.0f) C.a += 128.0f;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -289,7 +289,7 @@ struct alignas(16) GSHWDrawConfig
|
||||||
// Format
|
// Format
|
||||||
u32 aem_fmt : 2;
|
u32 aem_fmt : 2;
|
||||||
u32 pal_fmt : 2;
|
u32 pal_fmt : 2;
|
||||||
u32 dfmt : 2; // 0 → 32-bit, 1 → 24-bit, 2 → 16-bit
|
u32 dst_fmt : 2; // 0 → 32-bit, 1 → 24-bit, 2 → 16-bit
|
||||||
u32 depth_fmt : 2; // 0 → None, 1 → 32-bit, 2 → 16-bit, 3 → RGBA
|
u32 depth_fmt : 2; // 0 → None, 1 → 32-bit, 2 → 16-bit, 3 → RGBA
|
||||||
// Alpha extension/Correction
|
// Alpha extension/Correction
|
||||||
u32 aem : 1;
|
u32 aem : 1;
|
||||||
|
|
|
@ -1680,7 +1680,7 @@ void GSDevice11::SetupPS(const PSSelector& sel, const GSHWDrawConfig::PSConstant
|
||||||
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
||||||
sm.AddMacro("PS_TALES_OF_ABYSS_HLE", sel.tales_of_abyss_hle);
|
sm.AddMacro("PS_TALES_OF_ABYSS_HLE", sel.tales_of_abyss_hle);
|
||||||
sm.AddMacro("PS_URBAN_CHAOS_HLE", sel.urban_chaos_hle);
|
sm.AddMacro("PS_URBAN_CHAOS_HLE", sel.urban_chaos_hle);
|
||||||
sm.AddMacro("PS_DFMT", sel.dfmt);
|
sm.AddMacro("PS_DST_FMT", sel.dst_fmt);
|
||||||
sm.AddMacro("PS_DEPTH_FMT", sel.depth_fmt);
|
sm.AddMacro("PS_DEPTH_FMT", sel.depth_fmt);
|
||||||
sm.AddMacro("PS_PAL_FMT", sel.pal_fmt);
|
sm.AddMacro("PS_PAL_FMT", sel.pal_fmt);
|
||||||
sm.AddMacro("PS_HDR", sel.hdr);
|
sm.AddMacro("PS_HDR", sel.hdr);
|
||||||
|
|
|
@ -2819,7 +2819,7 @@ const ID3DBlob* GSDevice12::GetTFXPixelShader(const GSHWDrawConfig::PSSelector&
|
||||||
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
sm.AddMacro("PS_CHANNEL_FETCH", sel.channel);
|
||||||
sm.AddMacro("PS_TALES_OF_ABYSS_HLE", sel.tales_of_abyss_hle);
|
sm.AddMacro("PS_TALES_OF_ABYSS_HLE", sel.tales_of_abyss_hle);
|
||||||
sm.AddMacro("PS_URBAN_CHAOS_HLE", sel.urban_chaos_hle);
|
sm.AddMacro("PS_URBAN_CHAOS_HLE", sel.urban_chaos_hle);
|
||||||
sm.AddMacro("PS_DFMT", sel.dfmt);
|
sm.AddMacro("PS_DST_FMT", sel.dst_fmt);
|
||||||
sm.AddMacro("PS_DEPTH_FMT", sel.depth_fmt);
|
sm.AddMacro("PS_DEPTH_FMT", sel.depth_fmt);
|
||||||
sm.AddMacro("PS_PAL_FMT", sel.pal_fmt);
|
sm.AddMacro("PS_PAL_FMT", sel.pal_fmt);
|
||||||
sm.AddMacro("PS_HDR", sel.hdr);
|
sm.AddMacro("PS_HDR", sel.hdr);
|
||||||
|
|
|
@ -3123,7 +3123,7 @@ void GSRendererHW::EmulateTextureShuffleAndFbmask(GSTextureCache::Target* rt, GS
|
||||||
if (m_texture_shuffle)
|
if (m_texture_shuffle)
|
||||||
{
|
{
|
||||||
m_conf.ps.shuffle = 1;
|
m_conf.ps.shuffle = 1;
|
||||||
m_conf.ps.dfmt = GSLocalMemory::PSM_FMT_32;
|
m_conf.ps.dst_fmt = GSLocalMemory::PSM_FMT_32;
|
||||||
|
|
||||||
bool write_ba;
|
bool write_ba;
|
||||||
bool read_ba;
|
bool read_ba;
|
||||||
|
@ -3233,7 +3233,7 @@ void GSRendererHW::EmulateTextureShuffleAndFbmask(GSTextureCache::Target* rt, GS
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_conf.ps.dfmt = GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmt;
|
m_conf.ps.dst_fmt = GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].fmt;
|
||||||
|
|
||||||
// Don't allow only unused bits on 16bit format to enable fbmask,
|
// Don't allow only unused bits on 16bit format to enable fbmask,
|
||||||
// let's set the mask to 0 in such cases.
|
// let's set the mask to 0 in such cases.
|
||||||
|
@ -3275,14 +3275,14 @@ void GSRendererHW::EmulateTextureShuffleAndFbmask(GSTextureCache::Target* rt, GS
|
||||||
if (!PRIM->ABE || !(~ff_fbmask & ~zero_fbmask & 0x7) || !g_gs_device->Features().texture_barrier)
|
if (!PRIM->ABE || !(~ff_fbmask & ~zero_fbmask & 0x7) || !g_gs_device->Features().texture_barrier)
|
||||||
{
|
{
|
||||||
GL_INS("FBMASK Unsafe SW emulated fb_mask:%x on %d bits format", m_cached_ctx.FRAME.FBMSK,
|
GL_INS("FBMASK Unsafe SW emulated fb_mask:%x on %d bits format", m_cached_ctx.FRAME.FBMSK,
|
||||||
(m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16) ? 16 : 32);
|
(m_conf.ps.dst_fmt == GSLocalMemory::PSM_FMT_16) ? 16 : 32);
|
||||||
m_conf.require_one_barrier = true;
|
m_conf.require_one_barrier = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// The safe and accurate path (but slow)
|
// The safe and accurate path (but slow)
|
||||||
GL_INS("FBMASK SW emulated fb_mask:%x on %d bits format", m_cached_ctx.FRAME.FBMSK,
|
GL_INS("FBMASK SW emulated fb_mask:%x on %d bits format", m_cached_ctx.FRAME.FBMSK,
|
||||||
(m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16) ? 16 : 32);
|
(m_conf.ps.dst_fmt == GSLocalMemory::PSM_FMT_16) ? 16 : 32);
|
||||||
m_conf.require_full_barrier = true;
|
m_conf.require_full_barrier = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3490,7 +3490,7 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, bool& DAT
|
||||||
// PABE: Check condition early as an optimization.
|
// PABE: Check condition early as an optimization.
|
||||||
const bool PABE = PRIM->ABE && m_draw_env->PABE.PABE && (GetAlphaMinMax().max < 128);
|
const bool PABE = PRIM->ABE && m_draw_env->PABE.PABE && (GetAlphaMinMax().max < 128);
|
||||||
// FBMASK: Color is not written, no need to do blending.
|
// FBMASK: Color is not written, no need to do blending.
|
||||||
const u32 temp_fbmask = m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16 ? 0x00F8F8F8 : 0x00FFFFFF;
|
const u32 temp_fbmask = m_conf.ps.dst_fmt == GSLocalMemory::PSM_FMT_16 ? 0x00F8F8F8 : 0x00FFFFFF;
|
||||||
const bool FBMASK = (m_cached_ctx.FRAME.FBMSK & temp_fbmask) == temp_fbmask;
|
const bool FBMASK = (m_cached_ctx.FRAME.FBMSK & temp_fbmask) == temp_fbmask;
|
||||||
|
|
||||||
// No blending or coverage anti-aliasing so early exit
|
// No blending or coverage anti-aliasing so early exit
|
||||||
|
@ -3541,7 +3541,7 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, bool& DAT
|
||||||
m_conf.ps.blend_c = 2;
|
m_conf.ps.blend_c = 2;
|
||||||
}
|
}
|
||||||
// 24 bits doesn't have an alpha channel so use 128 (1.0f) fix factor as equivalent.
|
// 24 bits doesn't have an alpha channel so use 128 (1.0f) fix factor as equivalent.
|
||||||
else if (m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_24)
|
else if (m_conf.ps.dst_fmt == GSLocalMemory::PSM_FMT_24)
|
||||||
{
|
{
|
||||||
AFIX = 128;
|
AFIX = 128;
|
||||||
m_conf.ps.blend_c = 2;
|
m_conf.ps.blend_c = 2;
|
||||||
|
@ -5016,9 +5016,9 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta
|
||||||
}
|
}
|
||||||
|
|
||||||
// Before emulateblending, dither will be used
|
// Before emulateblending, dither will be used
|
||||||
m_conf.ps.dither = GSConfig.Dithering > 0 && m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16 && env.DTHE.DTHE;
|
m_conf.ps.dither = GSConfig.Dithering > 0 && m_conf.ps.dst_fmt == GSLocalMemory::PSM_FMT_16 && env.DTHE.DTHE;
|
||||||
|
|
||||||
if (m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_24)
|
if (m_conf.ps.dst_fmt == GSLocalMemory::PSM_FMT_24)
|
||||||
{
|
{
|
||||||
// Disable writing of the alpha channel
|
// Disable writing of the alpha channel
|
||||||
m_conf.colormask.wa = 0;
|
m_conf.colormask.wa = 0;
|
||||||
|
|
|
@ -1788,7 +1788,7 @@ void GSDeviceMTL::MRESetHWPipelineState(GSHWDrawConfig::VSSelector vssel, GSHWDr
|
||||||
setFnConstantB(m_fn_constants, pssel.iip, GSMTLConstantIndex_IIP);
|
setFnConstantB(m_fn_constants, pssel.iip, GSMTLConstantIndex_IIP);
|
||||||
setFnConstantI(m_fn_constants, pssel.aem_fmt, GSMTLConstantIndex_PS_AEM_FMT);
|
setFnConstantI(m_fn_constants, pssel.aem_fmt, GSMTLConstantIndex_PS_AEM_FMT);
|
||||||
setFnConstantI(m_fn_constants, pssel.pal_fmt, GSMTLConstantIndex_PS_PAL_FMT);
|
setFnConstantI(m_fn_constants, pssel.pal_fmt, GSMTLConstantIndex_PS_PAL_FMT);
|
||||||
setFnConstantI(m_fn_constants, pssel.dfmt, GSMTLConstantIndex_PS_DFMT);
|
setFnConstantI(m_fn_constants, pssel.dst_fmt, GSMTLConstantIndex_PS_DST_FMT);
|
||||||
setFnConstantI(m_fn_constants, pssel.depth_fmt, GSMTLConstantIndex_PS_DEPTH_FMT);
|
setFnConstantI(m_fn_constants, pssel.depth_fmt, GSMTLConstantIndex_PS_DEPTH_FMT);
|
||||||
setFnConstantB(m_fn_constants, pssel.aem, GSMTLConstantIndex_PS_AEM);
|
setFnConstantB(m_fn_constants, pssel.aem, GSMTLConstantIndex_PS_AEM);
|
||||||
setFnConstantB(m_fn_constants, pssel.fba, GSMTLConstantIndex_PS_FBA);
|
setFnConstantB(m_fn_constants, pssel.fba, GSMTLConstantIndex_PS_FBA);
|
||||||
|
|
|
@ -167,7 +167,7 @@ enum GSMTLFnConstants
|
||||||
GSMTLConstantIndex_VS_EXPAND_TYPE,
|
GSMTLConstantIndex_VS_EXPAND_TYPE,
|
||||||
GSMTLConstantIndex_PS_AEM_FMT,
|
GSMTLConstantIndex_PS_AEM_FMT,
|
||||||
GSMTLConstantIndex_PS_PAL_FMT,
|
GSMTLConstantIndex_PS_PAL_FMT,
|
||||||
GSMTLConstantIndex_PS_DFMT,
|
GSMTLConstantIndex_PS_DST_FMT,
|
||||||
GSMTLConstantIndex_PS_DEPTH_FMT,
|
GSMTLConstantIndex_PS_DEPTH_FMT,
|
||||||
GSMTLConstantIndex_PS_AEM,
|
GSMTLConstantIndex_PS_AEM,
|
||||||
GSMTLConstantIndex_PS_FBA,
|
GSMTLConstantIndex_PS_FBA,
|
||||||
|
|
|
@ -26,7 +26,7 @@ constant bool VS_POINT_SIZE [[function_constant(GSMTLConstantIndex_VS_PO
|
||||||
constant uint VS_EXPAND_TYPE_RAW [[function_constant(GSMTLConstantIndex_VS_EXPAND_TYPE)]];
|
constant uint VS_EXPAND_TYPE_RAW [[function_constant(GSMTLConstantIndex_VS_EXPAND_TYPE)]];
|
||||||
constant uint PS_AEM_FMT [[function_constant(GSMTLConstantIndex_PS_AEM_FMT)]];
|
constant uint PS_AEM_FMT [[function_constant(GSMTLConstantIndex_PS_AEM_FMT)]];
|
||||||
constant uint PS_PAL_FMT [[function_constant(GSMTLConstantIndex_PS_PAL_FMT)]];
|
constant uint PS_PAL_FMT [[function_constant(GSMTLConstantIndex_PS_PAL_FMT)]];
|
||||||
constant uint PS_DFMT [[function_constant(GSMTLConstantIndex_PS_DFMT)]];
|
constant uint PS_DST_FMT [[function_constant(GSMTLConstantIndex_PS_DST_FMT)]];
|
||||||
constant uint PS_DEPTH_FMT [[function_constant(GSMTLConstantIndex_PS_DEPTH_FMT)]];
|
constant uint PS_DEPTH_FMT [[function_constant(GSMTLConstantIndex_PS_DEPTH_FMT)]];
|
||||||
constant bool PS_AEM [[function_constant(GSMTLConstantIndex_PS_AEM)]];
|
constant bool PS_AEM [[function_constant(GSMTLConstantIndex_PS_AEM)]];
|
||||||
constant bool PS_FBA [[function_constant(GSMTLConstantIndex_PS_FBA)]];
|
constant bool PS_FBA [[function_constant(GSMTLConstantIndex_PS_FBA)]];
|
||||||
|
@ -855,7 +855,7 @@ struct PSMain
|
||||||
if (!SW_BLEND && !PS_DITHER && !PS_FBMASK)
|
if (!SW_BLEND && !PS_DITHER && !PS_FBMASK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (PS_DFMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV)
|
if (PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0 && PS_ROUND_INV)
|
||||||
C.rgb += 7.f; // Need to round up, not down since the shader will invert
|
C.rgb += 7.f; // Need to round up, not down since the shader will invert
|
||||||
|
|
||||||
// Correct the Color value based on the output format
|
// Correct the Color value based on the output format
|
||||||
|
@ -868,7 +868,7 @@ struct PSMain
|
||||||
// Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy
|
// Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy
|
||||||
// GS: Color = 1, Alpha = 255 => output 1
|
// GS: Color = 1, Alpha = 255 => output 1
|
||||||
// GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875
|
// GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875
|
||||||
if (PS_DFMT == FMT_16 && PS_BLEND_MIX == 0)
|
if (PS_DST_FMT == FMT_16 && PS_BLEND_MIX == 0)
|
||||||
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
||||||
C.rgb = float3(short3(C.rgb) & 0xF8);
|
C.rgb = float3(short3(C.rgb) & 0xF8);
|
||||||
else if (PS_COLCLIP || PS_HDR)
|
else if (PS_COLCLIP || PS_HDR)
|
||||||
|
@ -1062,12 +1062,12 @@ struct PSMain
|
||||||
|
|
||||||
float4 alpha_blend = SW_AD_TO_HW ? float4(trunc(current_color.a * 255.5f) / 128.f) : float4(C.a / 128.f);
|
float4 alpha_blend = SW_AD_TO_HW ? float4(trunc(current_color.a * 255.5f) / 128.f) : float4(C.a / 128.f);
|
||||||
|
|
||||||
if (PS_DFMT == FMT_16)
|
if (PS_DST_FMT == FMT_16)
|
||||||
{
|
{
|
||||||
float A_one = 128.f;
|
float A_one = 128.f;
|
||||||
C.a = (PS_FBA) ? A_one : step(128.f, C.a) * A_one;
|
C.a = (PS_FBA) ? A_one : step(128.f, C.a) * A_one;
|
||||||
}
|
}
|
||||||
else if (PS_DFMT == FMT_32 && PS_FBA)
|
else if (PS_DST_FMT == FMT_32 && PS_FBA)
|
||||||
{
|
{
|
||||||
if (C.a < 128.f)
|
if (C.a < 128.f)
|
||||||
C.a += 128.f;
|
C.a += 128.f;
|
||||||
|
|
|
@ -1350,7 +1350,7 @@ std::string GSDeviceOGL::GetPSSource(const PSSelector& sel)
|
||||||
+ fmt::format("#define PS_ADJT {}\n", sel.adjt)
|
+ fmt::format("#define PS_ADJT {}\n", sel.adjt)
|
||||||
+ fmt::format("#define PS_AEM_FMT {}\n", sel.aem_fmt)
|
+ fmt::format("#define PS_AEM_FMT {}\n", sel.aem_fmt)
|
||||||
+ fmt::format("#define PS_PAL_FMT {}\n", sel.pal_fmt)
|
+ fmt::format("#define PS_PAL_FMT {}\n", sel.pal_fmt)
|
||||||
+ fmt::format("#define PS_DFMT {}\n", sel.dfmt)
|
+ fmt::format("#define PS_DST_FMT {}\n", sel.dst_fmt)
|
||||||
+ fmt::format("#define PS_DEPTH_FMT {}\n", sel.depth_fmt)
|
+ fmt::format("#define PS_DEPTH_FMT {}\n", sel.depth_fmt)
|
||||||
+ fmt::format("#define PS_CHANNEL_FETCH {}\n", sel.channel)
|
+ fmt::format("#define PS_CHANNEL_FETCH {}\n", sel.channel)
|
||||||
+ fmt::format("#define PS_URBAN_CHAOS_HLE {}\n", sel.urban_chaos_hle)
|
+ fmt::format("#define PS_URBAN_CHAOS_HLE {}\n", sel.urban_chaos_hle)
|
||||||
|
|
|
@ -4658,7 +4658,7 @@ VkShaderModule GSDeviceVK::GetTFXFragmentShader(const GSHWDrawConfig::PSSelector
|
||||||
AddMacro(ss, "PS_ADJT", sel.adjt);
|
AddMacro(ss, "PS_ADJT", sel.adjt);
|
||||||
AddMacro(ss, "PS_AEM_FMT", sel.aem_fmt);
|
AddMacro(ss, "PS_AEM_FMT", sel.aem_fmt);
|
||||||
AddMacro(ss, "PS_PAL_FMT", sel.pal_fmt);
|
AddMacro(ss, "PS_PAL_FMT", sel.pal_fmt);
|
||||||
AddMacro(ss, "PS_DFMT", sel.dfmt);
|
AddMacro(ss, "PS_DST_FMT", sel.dst_fmt);
|
||||||
AddMacro(ss, "PS_DEPTH_FMT", sel.depth_fmt);
|
AddMacro(ss, "PS_DEPTH_FMT", sel.depth_fmt);
|
||||||
AddMacro(ss, "PS_CHANNEL_FETCH", sel.channel);
|
AddMacro(ss, "PS_CHANNEL_FETCH", sel.channel);
|
||||||
AddMacro(ss, "PS_URBAN_CHAOS_HLE", sel.urban_chaos_hle);
|
AddMacro(ss, "PS_URBAN_CHAOS_HLE", sel.urban_chaos_hle);
|
||||||
|
|
Loading…
Reference in New Issue