From 373e02e91c5ee16275cc9553b43f6a01760f354d Mon Sep 17 00:00:00 2001 From: kd-11 Date: Wed, 25 Jul 2018 00:33:55 +0300 Subject: [PATCH] rsx: Timestamp accuracy workaround --- rpcs3/Emu/RSX/RSXThread.cpp | 13 +++++++++++-- rpcs3/Emu/RSX/RSXThread.h | 5 ++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index e455304208..b957bb75b0 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -1207,10 +1207,19 @@ namespace rsx } } - u64 thread::timestamp() const + u64 thread::timestamp() { // Get timestamp, and convert it from microseconds to nanoseconds - return get_system_time() * 1000; + const u64 t = get_system_time() * 1000; + if (t != timestamp_ctrl) + { + timestamp_ctrl = t; + timestamp_subvalue = 0; + return t; + } + + timestamp_subvalue += 10; + return t + timestamp_subvalue; } gsl::span thread::get_raw_index_array(const std::vector >& draw_indexed_clause) const diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 0d60415f74..06de0aa419 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -326,6 +326,9 @@ namespace rsx std::shared_ptr m_vblank_thread; std::shared_ptr m_decompiler_thread; + u64 timestamp_ctrl = 0; + u64 timestamp_subvalue = 0; + protected: atomic_t m_rsx_thread_exiting{true}; s32 m_return_addr{-1}, restore_ret_addr{-1}; @@ -496,7 +499,7 @@ namespace rsx virtual void on_init_thread() = 0; virtual bool do_method(u32 /*cmd*/, u32 /*value*/) { return false; } virtual void flip(int buffer) = 0; - virtual u64 timestamp() const; + virtual u64 timestamp(); virtual bool on_access_violation(u32 /*address*/, bool /*is_writing*/) { return false; } virtual void on_invalidate_memory_range(u32 /*address*/, u32 /*range*/) {} virtual void notify_tile_unbound(u32 /*tile*/) {}