GPU: Display scanout resolution regardless of crop mode

This commit is contained in:
Stenzek 2024-11-29 21:04:50 +10:00
parent b059cda8d5
commit cbc16bee9e
No known key found for this signature in database
1 changed files with 33 additions and 1 deletions

View File

@ -171,7 +171,39 @@ void GPU::UpdateResolutionScale()
std::tuple<u32, u32> GPU::GetFullDisplayResolution() const
{
return std::tie(m_crtc_state.display_width, m_crtc_state.display_height);
u32 width, height;
if (IsDisplayDisabled())
{
width = 0;
height = 0;
}
else
{
s32 xmin, xmax, ymin, ymax;
if (!m_GPUSTAT.pal_mode)
{
xmin = NTSC_HORIZONTAL_ACTIVE_START;
xmax = NTSC_HORIZONTAL_ACTIVE_END;
ymin = NTSC_VERTICAL_ACTIVE_START;
ymax = NTSC_VERTICAL_ACTIVE_END;
}
else
{
xmin = PAL_HORIZONTAL_ACTIVE_START;
xmax = PAL_HORIZONTAL_ACTIVE_END;
ymin = PAL_VERTICAL_ACTIVE_START;
ymax = PAL_VERTICAL_ACTIVE_END;
}
width = static_cast<u32>(std::max<s32>(std::clamp<s32>(m_crtc_state.regs.X2, xmin, xmax) -
std::clamp<s32>(m_crtc_state.regs.X1, xmin, xmax),
0) /
m_crtc_state.dot_clock_divider);
height = static_cast<u32>(std::max<s32>(
std::clamp<s32>(m_crtc_state.regs.Y2, ymin, ymax) - std::clamp<s32>(m_crtc_state.regs.Y1, ymin, ymax), 0));
}
return std::tie(width, height);
}
void GPU::Reset(bool clear_vram)