From 5749b5a825f0d30a14a305b5cdb2a73a80323cbc Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 13 Dec 2022 22:04:00 -0800 Subject: [PATCH] GPU: Clear shaders on use flag change. --- GPU/D3D11/GPU_D3D11.cpp | 8 ++++++++ GPU/Directx9/GPU_DX9.cpp | 8 ++++++++ GPU/GLES/GPU_GLES.cpp | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/GPU/D3D11/GPU_D3D11.cpp b/GPU/D3D11/GPU_D3D11.cpp index 7504d04bb5..091c10a946 100644 --- a/GPU/D3D11/GPU_D3D11.cpp +++ b/GPU/D3D11/GPU_D3D11.cpp @@ -157,6 +157,14 @@ void GPU_D3D11::BeginFrame() { framebufferManagerD3D11_->BeginFrame(); gstate_c.Dirty(DIRTY_PROJTHROUGHMATRIX); + + if (gstate_c.useFlagsChanged) { + // TODO: It'd be better to recompile them in the background, probably? + // This most likely means that saw equal depth changed. + WARN_LOG(G3D, "Shader use flags changed, clearing all shaders"); + shaderManagerD3D11_->ClearShaders(); + gstate_c.useFlagsChanged = false; + } } void GPU_D3D11::CopyDisplayToOutput(bool reallyDirty) { diff --git a/GPU/Directx9/GPU_DX9.cpp b/GPU/Directx9/GPU_DX9.cpp index 7f13bb10ee..a7398018e9 100644 --- a/GPU/Directx9/GPU_DX9.cpp +++ b/GPU/Directx9/GPU_DX9.cpp @@ -155,6 +155,14 @@ void GPU_DX9::BeginFrame() { shaderManagerDX9_->DirtyShader(); framebufferManager_->BeginFrame(); + + if (gstate_c.useFlagsChanged) { + // TODO: It'd be better to recompile them in the background, probably? + // This most likely means that saw equal depth changed. + WARN_LOG(G3D, "Shader use flags changed, clearing all shaders"); + shaderManagerDX9_->ClearCache(true); + gstate_c.useFlagsChanged = false; + } } void GPU_DX9::CopyDisplayToOutput(bool reallyDirty) { diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index b5873364c3..9d33c11210 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -271,6 +271,14 @@ void GPU_GLES::InitClear() { void GPU_GLES::BeginHostFrame() { GPUCommon::BeginHostFrame(); drawEngine_.BeginFrame(); + + if (gstate_c.useFlagsChanged) { + // TODO: It'd be better to recompile them in the background, probably? + // This most likely means that saw equal depth changed. + WARN_LOG(G3D, "Shader use flags changed, clearing all shaders"); + shaderManagerGL_->ClearCache(true); + gstate_c.useFlagsChanged = false; + } } void GPU_GLES::EndHostFrame() {