From c581a8389677a5a32314eb76ef80429f8bc00a27 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 23 Aug 2022 19:29:06 -0700 Subject: [PATCH] GPU: Centralize SetDisplayFramebuffer(). --- GPU/Common/FramebufferManagerCommon.cpp | 4 ++++ GPU/D3D11/GPU_D3D11.cpp | 8 -------- GPU/D3D11/GPU_D3D11.h | 1 - GPU/Directx9/GPU_DX9.cpp | 6 ------ GPU/Directx9/GPU_DX9.h | 1 - GPU/GLES/GPU_GLES.cpp | 6 ------ GPU/GLES/GPU_GLES.h | 1 - GPU/GPUCommon.cpp | 4 ++++ GPU/GPUCommon.h | 1 + GPU/Vulkan/GPU_Vulkan.cpp | 2 -- GPU/Vulkan/GPU_Vulkan.h | 1 - 11 files changed, 9 insertions(+), 26 deletions(-) diff --git a/GPU/Common/FramebufferManagerCommon.cpp b/GPU/Common/FramebufferManagerCommon.cpp index bfdc23815f..92da28b882 100644 --- a/GPU/Common/FramebufferManagerCommon.cpp +++ b/GPU/Common/FramebufferManagerCommon.cpp @@ -41,6 +41,7 @@ #include "GPU/Common/PresentationCommon.h" #include "GPU/Common/TextureCacheCommon.h" #include "GPU/Common/ReinterpretFramebuffer.h" +#include "GPU/Debugger/Debugger.h" #include "GPU/Debugger/Record.h" #include "GPU/Debugger/Stepping.h" #include "GPU/GPUInterface.h" @@ -105,6 +106,9 @@ void FramebufferManagerCommon::SetDisplayFramebuffer(u32 framebuf, u32 stride, G displayFramebufPtr_ = framebuf; displayStride_ = stride; displayFormat_ = format; + // TODO: Some games like Spongebob - Yellow Avenger, never change framebuffer, they blit to it. + // So breaking on frames doesn't work. Might want to move this to sceDisplay vsync. + GPUDebug::NotifyDisplay(framebuf, stride, format); GPURecord::NotifyDisplay(framebuf, stride, format); } diff --git a/GPU/D3D11/GPU_D3D11.cpp b/GPU/D3D11/GPU_D3D11.cpp index 956d17fc85..4d1e299a6a 100644 --- a/GPU/D3D11/GPU_D3D11.cpp +++ b/GPU/D3D11/GPU_D3D11.cpp @@ -35,7 +35,6 @@ #include "GPU/GeDisasm.h" #include "GPU/Common/FramebufferManagerCommon.h" -#include "GPU/Debugger/Debugger.h" #include "GPU/D3D11/ShaderManagerD3D11.h" #include "GPU/D3D11/GPU_D3D11.h" #include "GPU/D3D11/FramebufferManagerD3D11.h" @@ -239,13 +238,6 @@ void GPU_D3D11::BeginFrame() { gstate_c.Dirty(DIRTY_PROJTHROUGHMATRIX); } -void GPU_D3D11::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) { - // TODO: Some games like Spongebob - Yellow Avenger, never change framebuffer, they blit to it. - // So breaking on frames doesn't work. Might want to move this to sceDisplay vsync. - GPUDebug::NotifyDisplay(framebuf, stride, format); - framebufferManagerD3D11_->SetDisplayFramebuffer(framebuf, stride, format); -} - void GPU_D3D11::CopyDisplayToOutput(bool reallyDirty) { // Flush anything left over. drawEngine_.Flush(); diff --git a/GPU/D3D11/GPU_D3D11.h b/GPU/D3D11/GPU_D3D11.h index 33790c7f99..d1e5287782 100644 --- a/GPU/D3D11/GPU_D3D11.h +++ b/GPU/D3D11/GPU_D3D11.h @@ -41,7 +41,6 @@ public: void ExecuteOp(u32 op, u32 diff) override; void ReapplyGfxState() override; - void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override; void GetStats(char *buffer, size_t bufsize) override; void ClearCacheNextFrame() override; void DeviceLost() override; // Only happens on Android. Drop all textures and shaders. diff --git a/GPU/Directx9/GPU_DX9.cpp b/GPU/Directx9/GPU_DX9.cpp index deaeeafb68..61be1a5d39 100644 --- a/GPU/Directx9/GPU_DX9.cpp +++ b/GPU/Directx9/GPU_DX9.cpp @@ -38,7 +38,6 @@ #include "GPU/GeDisasm.h" #include "GPU/Common/FramebufferManagerCommon.h" -#include "GPU/Debugger/Debugger.h" #include "GPU/Directx9/ShaderManagerDX9.h" #include "GPU/Directx9/GPU_DX9.h" #include "GPU/Directx9/FramebufferManagerDX9.h" @@ -286,11 +285,6 @@ void GPU_DX9::BeginFrame() { framebufferManager_->BeginFrame(); } -void GPU_DX9::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) { - GPUDebug::NotifyDisplay(framebuf, stride, format); - framebufferManagerDX9_->SetDisplayFramebuffer(framebuf, stride, format); -} - void GPU_DX9::CopyDisplayToOutput(bool reallyDirty) { dxstate.depthWrite.set(true); dxstate.colorMask.set(0xF); diff --git a/GPU/Directx9/GPU_DX9.h b/GPU/Directx9/GPU_DX9.h index 35ac9817e1..0e313da397 100644 --- a/GPU/Directx9/GPU_DX9.h +++ b/GPU/Directx9/GPU_DX9.h @@ -40,7 +40,6 @@ public: void ExecuteOp(u32 op, u32 diff) override; void ReapplyGfxState() override; - void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override; void GetStats(char *buffer, size_t bufsize) override; void ClearCacheNextFrame() override; void DeviceLost() override; // Only happens on Android. Drop all textures and shaders. diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index 1dd004aab8..6b135e273e 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -36,7 +36,6 @@ #include "GPU/ge_constants.h" #include "GPU/GeDisasm.h" #include "GPU/Common/FramebufferManagerCommon.h" -#include "GPU/Debugger/Debugger.h" #include "GPU/GLES/ShaderManagerGLES.h" #include "GPU/GLES/GPU_GLES.h" #include "GPU/GLES/FramebufferManagerGLES.h" @@ -360,11 +359,6 @@ void GPU_GLES::BeginFrame() { framebufferManagerGL_->BeginFrame(); } -void GPU_GLES::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) { - GPUDebug::NotifyDisplay(framebuf, stride, format); - framebufferManagerGL_->SetDisplayFramebuffer(framebuf, stride, format); -} - void GPU_GLES::CopyDisplayToOutput(bool reallyDirty) { // Flush anything left over. framebufferManagerGL_->RebindFramebuffer("RebindFramebuffer - CopyDisplayToOutput"); diff --git a/GPU/GLES/GPU_GLES.h b/GPU/GLES/GPU_GLES.h index f308d15445..cbe6bc00b0 100644 --- a/GPU/GLES/GPU_GLES.h +++ b/GPU/GLES/GPU_GLES.h @@ -47,7 +47,6 @@ public: void ExecuteOp(u32 op, u32 diff) override; void ReapplyGfxState() override; - void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override; void GetStats(char *buffer, size_t bufsize) override; void ClearCacheNextFrame() override; diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 841547302a..ea6bab864f 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -2765,6 +2765,10 @@ void GPUCommon::SetCmdValue(u32 op) { downcount = 0; } +void GPUCommon::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) { + framebufferManager_->SetDisplayFramebuffer(framebuf, stride, format); +} + void GPUCommon::DoBlockTransfer(u32 skipDrawReason) { // TODO: This is used a lot to copy data around between render targets and textures, // and also to quickly load textures from RAM to VRAM. So we should do checks like the following: diff --git a/GPU/GPUCommon.h b/GPU/GPUCommon.h index e61d5dada9..f389b788e2 100644 --- a/GPU/GPUCommon.h +++ b/GPU/GPUCommon.h @@ -117,6 +117,7 @@ public: u32 Break(int mode) override; void ReapplyGfxState() override; + void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override; void CopyDisplayToOutput(bool reallyDirty) override = 0; void InitClear() override = 0; bool PerformMemoryCopy(u32 dest, u32 src, int size) override; diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index adc0a9c127..ee902e92f6 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -37,7 +37,6 @@ #include "GPU/ge_constants.h" #include "GPU/GeDisasm.h" #include "GPU/Common/FramebufferManagerCommon.h" -#include "GPU/Debugger/Debugger.h" #include "GPU/Vulkan/ShaderManagerVulkan.h" #include "GPU/Vulkan/GPU_Vulkan.h" #include "GPU/Vulkan/FramebufferManagerVulkan.h" @@ -432,7 +431,6 @@ void GPU_Vulkan::InitClear() { } void GPU_Vulkan::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) { - GPUDebug::NotifyDisplay(framebuf, stride, format); framebufferManager_->SetDisplayFramebuffer(framebuf, stride, format); } diff --git a/GPU/Vulkan/GPU_Vulkan.h b/GPU/Vulkan/GPU_Vulkan.h index 18da82e6b0..3c13d57621 100644 --- a/GPU/Vulkan/GPU_Vulkan.h +++ b/GPU/Vulkan/GPU_Vulkan.h @@ -50,7 +50,6 @@ public: void PreExecuteOp(u32 op, u32 diff) override; void ExecuteOp(u32 op, u32 diff) override; - void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override; void GetStats(char *buffer, size_t bufsize) override; void ClearCacheNextFrame() override; void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.