From d1f28bb7a8777e8cd67579d06601d46fad391c24 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Sep 2025 10:43:49 +0200 Subject: [PATCH] optimize rdp_check_framebuffers (#577) --- parallel-rdp/interface.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 152f1f3..baee8b1 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -570,17 +570,18 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { address >>= 3; length = (length + 7) >> 3; - for (uint32_t i = 0; i < length; i++) + + if (address >= rdram_dirty.size()) + return; + + uint32_t end_addr = std::min(address + length, static_cast(rdram_dirty.size())); + + auto it = std::find(rdram_dirty.begin() + address, rdram_dirty.begin() + end_addr, true); + if (it != rdram_dirty.begin() + end_addr) { - if (address + i >= rdram_dirty.size()) - return; - if (rdram_dirty[address + i]) - { - processor->wait_for_timeline(sync_signal); - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - sync_signal = 0; - return; - } + processor->wait_for_timeline(sync_signal); + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; } } }