GS/HW: Use enum for format checks.

Easier to read code.
This commit is contained in:
lightningterror 2023-10-18 14:43:10 +02:00
parent 7cc6f635fc
commit 5a414d5711
3 changed files with 24 additions and 17 deletions

View File

@ -205,10 +205,10 @@ GSLocalMemory::GSLocalMemory()
for (psm_t& psm : m_psm)
psm.fmt = 3;
m_psm[PSMCT32].fmt = m_psm[PSMZ32].fmt = 0;
m_psm[PSMCT24].fmt = m_psm[PSMZ24].fmt = 1;
m_psm[PSMCT16].fmt = m_psm[PSMZ16].fmt = 2;
m_psm[PSMCT16S].fmt = m_psm[PSMZ16S].fmt = 2;
m_psm[PSMCT32].fmt = m_psm[PSMZ32].fmt = PSM_FMT_32;
m_psm[PSMCT24].fmt = m_psm[PSMZ24].fmt = PSM_FMT_24;
m_psm[PSMCT16].fmt = m_psm[PSMZ16].fmt = PSM_FMT_16;
m_psm[PSMCT16S].fmt = m_psm[PSMZ16S].fmt = PSM_FMT_16;
m_psm[PSGPU24].bs = GSVector2i(16, 8);

View File

@ -445,6 +445,13 @@ public:
typedef void (*readTexture)(GSLocalMemory& mem, const GSOffset& off, const GSVector4i& r, u8* dst, int dstpitch, const GIFRegTEXA& TEXA);
typedef void (*readTextureBlock)(const GSLocalMemory& mem, u32 bp, u8* dst, int dstpitch, const GIFRegTEXA& TEXA);
enum PSM_FMT
{
PSM_FMT_32,
PSM_FMT_24,
PSM_FMT_16
};
struct alignas(128) psm_t
{
GSSwizzleInfo info;

View File

@ -3123,7 +3123,7 @@ void GSRendererHW::EmulateTextureShuffleAndFbmask(GSTextureCache::Target* rt, GS
if (m_texture_shuffle)
{
m_conf.ps.shuffle = 1;
m_conf.ps.dfmt = 0;
m_conf.ps.dfmt = GSLocalMemory::PSM_FMT_32;
bool write_ba;
bool read_ba;
@ -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)
{
GL_INS("FBMASK Unsafe SW emulated fb_mask:%x on %d bits format", m_cached_ctx.FRAME.FBMSK,
(m_conf.ps.dfmt == 2) ? 16 : 32);
(m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16) ? 16 : 32);
m_conf.require_one_barrier = true;
}
else
{
// The safe and accurate path (but slow)
GL_INS("FBMASK SW emulated fb_mask:%x on %d bits format", m_cached_ctx.FRAME.FBMSK,
(m_conf.ps.dfmt == 2) ? 16 : 32);
(m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16) ? 16 : 32);
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.
const bool PABE = PRIM->ABE && m_draw_env->PABE.PABE && (GetAlphaMinMax().max < 128);
// FBMASK: Color is not written, no need to do blending.
const u32 temp_fbmask = m_conf.ps.dfmt == 2 ? 0x00F8F8F8 : 0x00FFFFFF;
const u32 temp_fbmask = m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16 ? 0x00F8F8F8 : 0x00FFFFFF;
const bool FBMASK = (m_cached_ctx.FRAME.FBMSK & temp_fbmask) == temp_fbmask;
// 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;
}
// 24 bits doesn't have an alpha channel so use 128 (1.0f) fix factor as equivalent.
else if (m_conf.ps.dfmt == 1)
else if (m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_24)
{
AFIX = 128;
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
m_conf.ps.dither = GSConfig.Dithering > 0 && m_conf.ps.dfmt == 2 && env.DTHE.DTHE;
m_conf.ps.dither = GSConfig.Dithering > 0 && m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_16 && env.DTHE.DTHE;
if (m_conf.ps.dfmt == 1)
if (m_conf.ps.dfmt == GSLocalMemory::PSM_FMT_24)
{
// Disable writing of the alpha channel
m_conf.colormask.wa = 0;
@ -5986,7 +5986,7 @@ void GSRendererHW::ClearGSLocalMemory(const GSOffset& off, const GSVector4i& r,
const u32 pixels_per_page = pgs.x * pgs.y;
const int page_aligned_bottom = (bottom & ~(pgs.y - 1));
if (format == 0)
if (format == GSLocalMemory::PSM_FMT_32)
{
const GSVector4i vcolor = GSVector4i(vert_color);
const u32 iterations_per_page = (pages_wide * pixels_per_page) / 4;
@ -6000,7 +6000,7 @@ void GSRendererHW::ClearGSLocalMemory(const GSOffset& off, const GSVector4i& r,
*(ptr++) = vcolor;
}
}
else if (format == 1)
else if (format == GSLocalMemory::PSM_FMT_24)
{
const GSVector4i mask = GSVector4i::xff000000();
const GSVector4i vcolor = GSVector4i(vert_color & 0x00ffffffu);
@ -6018,7 +6018,7 @@ void GSRendererHW::ClearGSLocalMemory(const GSOffset& off, const GSVector4i& r,
}
}
}
else if (format == 2)
else if (format == GSLocalMemory::PSM_FMT_16)
{
const u16 converted_color = ((vert_color >> 16) & 0x8000) | ((vert_color >> 9) & 0x7C00) |
((vert_color >> 6) & 0x7E0) | ((vert_color >> 3) & 0x1F);
@ -6036,7 +6036,7 @@ void GSRendererHW::ClearGSLocalMemory(const GSOffset& off, const GSVector4i& r,
}
}
if (format == 0)
if (format == GSLocalMemory::PSM_FMT_32)
{
// Based on WritePixel32
u32* vm = m_mem.vm32();
@ -6048,7 +6048,7 @@ void GSRendererHW::ClearGSLocalMemory(const GSOffset& off, const GSVector4i& r,
vm[pa.value(x)] = vert_color;
}
}
else if (format == 1)
else if (format == GSLocalMemory::PSM_FMT_24)
{
// Based on WritePixel24
u32* vm = m_mem.vm32();
@ -6061,7 +6061,7 @@ void GSRendererHW::ClearGSLocalMemory(const GSOffset& off, const GSVector4i& r,
vm[pa.value(x)] = (vm[pa.value(x)] & 0xff000000u) | write_color;
}
}
else if (format == 2)
else if (format == GSLocalMemory::PSM_FMT_16)
{
const u16 converted_color = ((vert_color >> 16) & 0x8000) | ((vert_color >> 9) & 0x7C00) | ((vert_color >> 6) & 0x7E0) | ((vert_color >> 3) & 0x1F);