From a210e7e2bd9ad3bb296c3882aede790df8c77246 Mon Sep 17 00:00:00 2001 From: Hamish Milne Date: Sat, 11 Apr 2020 10:28:52 +0100 Subject: [PATCH] Sync GPU state after loading (fix FE terrain bug) --- src/core/core.cpp | 2 ++ src/video_core/rasterizer_interface.h | 2 ++ src/video_core/renderer_base.cpp | 4 ++++ src/video_core/renderer_base.h | 1 + src/video_core/renderer_opengl/gl_rasterizer.h | 6 +++--- 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/core/core.cpp b/src/core/core.cpp index 3d915b764..bdcee4ebd 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -44,6 +44,7 @@ #include "core/rpc/rpc_server.h" #include "core/settings.h" #include "network/network.h" +#include "video_core/renderer_base.h" #include "video_core/video_core.h" namespace Core { @@ -586,6 +587,7 @@ void System::serialize(Archive& ar, const unsigned int file_version) { Service::GSP::SetGlobalModule(*this); memory->SetDSP(*dsp_core); cheat_engine->Connect(); + VideoCore::g_renderer->Sync(); } } diff --git a/src/video_core/rasterizer_interface.h b/src/video_core/rasterizer_interface.h index a2510292e..873e4273e 100644 --- a/src/video_core/rasterizer_interface.h +++ b/src/video_core/rasterizer_interface.h @@ -87,5 +87,7 @@ public: virtual void LoadDiskResources(const std::atomic_bool& stop_loading, const DiskResourceLoadCallback& callback) {} + + virtual void SyncEntireState() {} }; } // namespace VideoCore diff --git a/src/video_core/renderer_base.cpp b/src/video_core/renderer_base.cpp index 4065d1a7d..8d18b6800 100644 --- a/src/video_core/renderer_base.cpp +++ b/src/video_core/renderer_base.cpp @@ -28,3 +28,7 @@ void RendererBase::RefreshRasterizerSetting() { } } } + +void RendererBase::Sync() { + rasterizer->SyncEntireState(); +} diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h index 7fcaf5370..578939a6e 100644 --- a/src/video_core/renderer_base.h +++ b/src/video_core/renderer_base.h @@ -68,6 +68,7 @@ public: } void RefreshRasterizerSetting(); + void Sync(); protected: Frontend::EmuWindow& render_window; ///< Reference to the render window handle. diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 92cca2e4e..fee8363b6 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -61,6 +61,9 @@ public: u32 pixel_stride, ScreenInfo& screen_info) override; bool AccelerateDrawBatch(bool is_indexed) override; + /// Syncs entire status to match PICA registers + void SyncEntireState() override; + private: struct SamplerInfo { using TextureConfig = Pica::TexturingRegs::TextureConfig; @@ -132,9 +135,6 @@ private: GLvec3 view; }; - /// Syncs entire status to match PICA registers - void SyncEntireState(); - /// Syncs the clip enabled status to match the PICA register void SyncClipEnabled();