GPU: Fix scanline sync before vertical_display_start

If the current line was before start, it wouldn't sync before end.
This commit is contained in:
Stenzek
2026-09-29 11:32:07 +10:00
parent 8a46ed8b7d
commit 60f7ffa2d0
+7 -5
View File
@@ -1510,14 +1510,16 @@ void GPU::UpdateCRTCTickEvent()
lines_until_event = (s_locals.crtc_state.current_scanline >= s_locals.crtc_state.vertical_display_end) ?
(s_locals.crtc_state.vertical_total - s_locals.crtc_state.current_scanline +
s_locals.crtc_state.vertical_display_start) :
(s_locals.crtc_state.vertical_display_end - s_locals.crtc_state.current_scanline);
((s_locals.crtc_state.current_scanline < s_locals.crtc_state.vertical_display_start) ?
(s_locals.crtc_state.vertical_display_start - s_locals.crtc_state.current_scanline) :
(s_locals.crtc_state.vertical_display_end - s_locals.crtc_state.current_scanline));
}
else
{
lines_until_event = (s_locals.crtc_state.current_scanline >= s_locals.crtc_state.vertical_display_end ?
(s_locals.crtc_state.vertical_total - s_locals.crtc_state.current_scanline +
s_locals.crtc_state.vertical_display_end) :
(s_locals.crtc_state.vertical_display_end - s_locals.crtc_state.current_scanline));
lines_until_event = (s_locals.crtc_state.current_scanline >= s_locals.crtc_state.vertical_display_end) ?
(s_locals.crtc_state.vertical_total - s_locals.crtc_state.current_scanline +
s_locals.crtc_state.vertical_display_end) :
(s_locals.crtc_state.vertical_display_end - s_locals.crtc_state.current_scanline);
}
if (Timers::IsExternalIRQEnabled(HBLANK_TIMER_INDEX))
lines_until_event = std::min(lines_until_event, Timers::GetTicksUntilIRQ(HBLANK_TIMER_INDEX));