From 4c45f8a4b006c6bf5ef2d18ffbd27d3875a971b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 25 Feb 2023 23:04:27 +0100 Subject: [PATCH] Pass in draw directly in GPUCommon::DeviceRestore, instead of awkwardly fetching it --- GPU/D3D11/GPU_D3D11.cpp | 4 ++-- GPU/D3D11/GPU_D3D11.h | 2 +- GPU/GLES/GPU_GLES.cpp | 4 ++-- GPU/GLES/GPU_GLES.h | 2 +- GPU/GPUCommon.cpp | 8 ++------ GPU/GPUCommon.h | 3 +-- GPU/GPUCommonHW.cpp | 4 ++++ GPU/GPUCommonHW.h | 1 + GPU/GPUInterface.h | 2 +- GPU/Software/SoftGpu.cpp | 5 ++--- GPU/Software/SoftGpu.h | 3 ++- GPU/Vulkan/GPU_Vulkan.cpp | 4 ++-- GPU/Vulkan/GPU_Vulkan.h | 2 +- GPU/Vulkan/TextureCacheVulkan.h | 4 ++-- UI/NativeApp.cpp | 2 +- libretro/LibretroGraphicsContext.cpp | 2 +- 16 files changed, 26 insertions(+), 26 deletions(-) diff --git a/GPU/D3D11/GPU_D3D11.cpp b/GPU/D3D11/GPU_D3D11.cpp index 28043a1d68..c92b8ad2f5 100644 --- a/GPU/D3D11/GPU_D3D11.cpp +++ b/GPU/D3D11/GPU_D3D11.cpp @@ -122,8 +122,8 @@ void GPU_D3D11::DeviceLost() { GPUCommonHW::DeviceLost(); } -void GPU_D3D11::DeviceRestore() { - GPUCommonHW::DeviceRestore(); +void GPU_D3D11::DeviceRestore(Draw::DrawContext *draw) { + GPUCommonHW::DeviceRestore(draw); // Nothing needed. } diff --git a/GPU/D3D11/GPU_D3D11.h b/GPU/D3D11/GPU_D3D11.h index 782ef7f029..a2e374c6f0 100644 --- a/GPU/D3D11/GPU_D3D11.h +++ b/GPU/D3D11/GPU_D3D11.h @@ -38,7 +38,7 @@ public: void GetStats(char *buffer, size_t bufsize) override; void DeviceLost() override; // Only happens on Android. Drop all textures and shaders. - void DeviceRestore() override; + void DeviceRestore(Draw::DrawContext *draw) override; protected: void FinishDeferred() override; diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index 756cf81937..7e362b0697 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -244,8 +244,8 @@ void GPU_GLES::DeviceLost() { GPUCommonHW::DeviceLost(); } -void GPU_GLES::DeviceRestore() { - GPUCommonHW::DeviceRestore(); +void GPU_GLES::DeviceRestore(Draw::DrawContext *draw) { + GPUCommonHW::DeviceRestore(draw); UpdateCmdInfo(); UpdateVsyncInterval(true); diff --git a/GPU/GLES/GPU_GLES.h b/GPU/GLES/GPU_GLES.h index a56765a580..9e03285ee9 100644 --- a/GPU/GLES/GPU_GLES.h +++ b/GPU/GLES/GPU_GLES.h @@ -46,7 +46,7 @@ public: void GetStats(char *buffer, size_t bufsize) override; void DeviceLost() override; // Only happens on Android. Drop all textures and shaders. - void DeviceRestore() override; + void DeviceRestore(Draw::DrawContext *draw) override; void BeginHostFrame() override; void EndHostFrame() override; diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 562c93e52d..40990eb41b 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -133,8 +133,8 @@ void GPUCommon::DeviceLost() { } // Call at the start of the GPU implementation's DeviceRestore -void GPUCommon::DeviceRestore() { - draw_ = (Draw::DrawContext *)PSP_CoreParameter().graphicsContext->GetDrawContext(); +void GPUCommon::DeviceRestore(Draw::DrawContext *draw) { + draw_ = draw; framebufferManager_->DeviceRestore(draw_); PPGeSetDrawContext(draw_); } @@ -2026,10 +2026,6 @@ bool GPUCommon::PerformWriteStencilFromMemory(u32 dest, int size, WriteStencil f return false; } -std::vector GPUCommon::GetFramebufferList() const { - return framebufferManager_->GetFramebufferList(); -} - bool GPUCommon::GetCurrentSimpleVertices(int count, std::vector &vertices, std::vector &indices) { UpdateUVScaleOffset(); return drawEngineCommon_->GetCurrentSimpleVertices(count, vertices, indices); diff --git a/GPU/GPUCommon.h b/GPU/GPUCommon.h index 05fedca897..b58923013e 100644 --- a/GPU/GPUCommon.h +++ b/GPU/GPUCommon.h @@ -211,7 +211,6 @@ public: const std::list& GetDisplayLists() override { return dlQueue; } - std::vector GetFramebufferList() const override; s64 GetListTicks(int listid) const override { if (listid >= 0 && listid < DisplayListMaxCount) { @@ -227,7 +226,7 @@ public: protected: void DeviceLost() override; - void DeviceRestore() override; + void DeviceRestore(Draw::DrawContext *draw) override; void ClearCacheNextFrame() override {} diff --git a/GPU/GPUCommonHW.cpp b/GPU/GPUCommonHW.cpp index 7bea5851be..6a1771875d 100644 --- a/GPU/GPUCommonHW.cpp +++ b/GPU/GPUCommonHW.cpp @@ -678,6 +678,10 @@ bool GPUCommonHW::GetOutputFramebuffer(GPUDebugBuffer &buffer) { return framebufferManager_ ? framebufferManager_->GetOutputFramebuffer(buffer) : false; } +std::vector GPUCommonHW::GetFramebufferList() const { + return framebufferManager_->GetFramebufferList(); +} + bool GPUCommonHW::GetCurrentClut(GPUDebugBuffer &buffer) { return textureCache_->GetCurrentClutBuffer(buffer); } diff --git a/GPU/GPUCommonHW.h b/GPU/GPUCommonHW.h index b6e1454c19..ca3fe1780d 100644 --- a/GPU/GPUCommonHW.h +++ b/GPU/GPUCommonHW.h @@ -22,6 +22,7 @@ public: bool GetCurrentDepthbuffer(GPUDebugBuffer &buffer) override; bool GetCurrentStencilbuffer(GPUDebugBuffer &buffer) override; bool GetOutputFramebuffer(GPUDebugBuffer &buffer) override; + std::vector GetFramebufferList() const override; bool GetCurrentTexture(GPUDebugBuffer &buffer, int level, bool *isFramebuffer) override; bool GetCurrentClut(GPUDebugBuffer &buffer) override; diff --git a/GPU/GPUInterface.h b/GPU/GPUInterface.h index 6bf3856e16..6788e595d7 100644 --- a/GPU/GPUInterface.h +++ b/GPU/GPUInterface.h @@ -251,7 +251,7 @@ public: virtual void EnableInterrupts(bool enable) = 0; virtual void DeviceLost() = 0; - virtual void DeviceRestore() = 0; + virtual void DeviceRestore(Draw::DrawContext *draw) = 0; virtual void ReapplyGfxState() = 0; virtual void DoState(PointerWrap &p) = 0; diff --git a/GPU/Software/SoftGpu.cpp b/GPU/Software/SoftGpu.cpp index 56e9a3b60a..2a3bf685f7 100644 --- a/GPU/Software/SoftGpu.cpp +++ b/GPU/Software/SoftGpu.cpp @@ -466,9 +466,8 @@ void SoftGPU::DeviceLost() { } } -void SoftGPU::DeviceRestore() { - if (PSP_CoreParameter().graphicsContext) - draw_ = (Draw::DrawContext *)PSP_CoreParameter().graphicsContext->GetDrawContext(); +void SoftGPU::DeviceRestore(Draw::DrawContext *draw) { + draw_ = draw; if (presentation_) presentation_->DeviceRestore(draw_); PPGeSetDrawContext(draw_); diff --git a/GPU/Software/SoftGpu.h b/GPU/Software/SoftGpu.h index 61104a04bd..0377ca7c1b 100644 --- a/GPU/Software/SoftGpu.h +++ b/GPU/Software/SoftGpu.h @@ -138,6 +138,7 @@ public: void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override; void CopyDisplayToOutput(bool reallyDirty) override; void GetStats(char *buffer, size_t bufsize) override; + std::vector GetFramebufferList() const override { return std::vector(); } void InvalidateCache(u32 addr, int size, GPUInvalidationType type) override; void PerformWriteFormattedFromMemory(u32 addr, int size, int width, GEBufferFormat format) override; bool PerformMemoryCopy(u32 dest, u32 src, int size, GPUCopyFlag flags = GPUCopyFlag::NONE) override; @@ -147,7 +148,7 @@ public: bool PerformWriteStencilFromMemory(u32 dest, int size, WriteStencil flags) override; void DeviceLost() override; - void DeviceRestore() override; + void DeviceRestore(Draw::DrawContext *draw) override; void NotifyRenderResized() override; void NotifyDisplayResized() override; diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index 532811f365..ee7500ea96 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -460,8 +460,8 @@ void GPU_Vulkan::DeviceLost() { GPUCommonHW::DeviceLost(); } -void GPU_Vulkan::DeviceRestore() { - GPUCommonHW::DeviceRestore(); +void GPU_Vulkan::DeviceRestore(Draw::DrawContext *draw) { + GPUCommonHW::DeviceRestore(draw); InitDeviceObjects(); gstate_c.SetUseFlags(CheckGPUFeatures()); diff --git a/GPU/Vulkan/GPU_Vulkan.h b/GPU/Vulkan/GPU_Vulkan.h index 1e52e8e0de..1fad919ab1 100644 --- a/GPU/Vulkan/GPU_Vulkan.h +++ b/GPU/Vulkan/GPU_Vulkan.h @@ -49,7 +49,7 @@ public: void GetStats(char *buffer, size_t bufsize) override; void DeviceLost() override; // Only happens on Android. Drop all textures and shaders. - void DeviceRestore() override; + void DeviceRestore(Draw::DrawContext *draw) override; // Using string because it's generic - makes no assumptions on the size of the shader IDs of this backend. std::vector DebugGetShaderIDs(DebugShaderType shader) override; diff --git a/GPU/Vulkan/TextureCacheVulkan.h b/GPU/Vulkan/TextureCacheVulkan.h index 2c7c149ef6..2a6fb5d2a9 100644 --- a/GPU/Vulkan/TextureCacheVulkan.h +++ b/GPU/Vulkan/TextureCacheVulkan.h @@ -59,8 +59,8 @@ public: void StartFrame() override; - void DeviceLost(); - void DeviceRestore(Draw::DrawContext *draw); + void DeviceLost() override; + void DeviceRestore(Draw::DrawContext *draw) override; void SetFramebufferManager(FramebufferManagerVulkan *fbManager); void SetDrawEngine(DrawEngineVulkan *td) { diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index 65fd9fac70..c89c7ec122 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -914,7 +914,7 @@ bool NativeInitGraphics(GraphicsContext *graphicsContext) { g_gameInfoCache = new GameInfoCache(); if (gpu) { - gpu->DeviceRestore(); + gpu->DeviceRestore(g_draw); } INFO_LOG(SYSTEM, "NativeInitGraphics completed"); diff --git a/libretro/LibretroGraphicsContext.cpp b/libretro/LibretroGraphicsContext.cpp index ca11400491..afd93be889 100644 --- a/libretro/LibretroGraphicsContext.cpp +++ b/libretro/LibretroGraphicsContext.cpp @@ -58,7 +58,7 @@ void LibretroHWRenderContext::ContextReset() { GotBackbuffer(); if (gpu) { - gpu->DeviceRestore(); + gpu->DeviceRestore(draw_); } }