diff --git a/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp b/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp index c8494eb2c0..9661520b02 100644 --- a/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp @@ -807,7 +807,7 @@ u64 cellGcmGetLastFlipTime() { cellGcmSys.trace("cellGcmGetLastFlipTime()"); - return rsx::get_current_renderer()->last_flip_time; + return rsx::get_current_renderer()->last_guest_flip_timestamp; } error_code cellGcmGetLastFlipTime2() diff --git a/rpcs3/Emu/RSX/Overlays/overlays.cpp b/rpcs3/Emu/RSX/Overlays/overlays.cpp index e76dc6f3fa..e35eb38eac 100644 --- a/rpcs3/Emu/RSX/Overlays/overlays.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlays.cpp @@ -326,13 +326,10 @@ namespace rsx void overlay::refresh() const { - if (auto rsxthr = rsx::get_current_renderer()) + if (auto rsxthr = rsx::get_current_renderer(); rsxthr && + (min_refresh_duration_us + rsxthr->last_host_flip_timestamp) < rsx::uclock()) { - const auto now = rsx::uclock() - 1000000; - if ((now - rsxthr->last_flip_time) > min_refresh_duration_us) - { - rsxthr->async_flip_requested |= rsx::thread::flip_request::native_ui; - } + rsxthr->async_flip_requested |= rsx::thread::flip_request::native_ui; } } } // namespace overlays diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index d05511bfb1..6a8f4cda84 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -640,7 +640,7 @@ namespace rsx fifo_ctrl = std::make_unique<::rsx::FIFO::FIFO_control>(this); - last_flip_time = rsx::uclock() - 1000000; + last_guest_flip_timestamp = rsx::uclock() - 1000000; vblank_count = 0; @@ -2487,6 +2487,8 @@ namespace rsx { performance_counters.sampled_frames++; } + + last_host_flip_timestamp = rsx::uclock(); } void thread::check_zcull_status(bool framebuffer_swap) @@ -3162,7 +3164,7 @@ namespace rsx flip(m_queued_flip); - last_flip_time = rsx::uclock() - 1000000; + last_guest_flip_timestamp = rsx::uclock() - 1000000; flip_status = CELL_GCM_DISPLAY_FLIP_STATUS_DONE; m_queued_flip.in_progress = false; diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 0af73ee251..600f2932f9 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -781,7 +781,9 @@ namespace rsx public: u64 target_rsx_flip_time = 0; u64 int_flip_index = 0; - u64 last_flip_time = 0; + u64 last_guest_flip_timestamp = 0; + u64 last_host_flip_timestamp = 0; + vm::ptr flip_handler = vm::null; vm::ptr user_handler = vm::null; vm::ptr vblank_handler = vm::null;