From 45def772eeb3ed908ebb9cd478504db8ffd80461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 5 Aug 2022 13:27:55 +0200 Subject: [PATCH] Move the depal cache instance ownership to TextureCacheCommon --- GPU/Common/TextureCacheCommon.cpp | 9 +++++++++ GPU/Common/TextureCacheCommon.h | 6 ++++++ GPU/D3D11/GPU_D3D11.cpp | 9 ++------- GPU/D3D11/GPU_D3D11.h | 1 - GPU/D3D11/TextureCacheD3D11.cpp | 2 ++ GPU/D3D11/TextureCacheD3D11.h | 7 +------ GPU/Directx9/TextureCacheDX9.cpp | 2 ++ GPU/Directx9/TextureCacheDX9.h | 3 +-- GPU/GLES/GPU_GLES.cpp | 13 +++---------- GPU/GLES/GPU_GLES.h | 1 - GPU/GLES/TextureCacheGLES.cpp | 4 ++++ GPU/GLES/TextureCacheGLES.h | 3 +-- GPU/Vulkan/TextureCacheVulkan.cpp | 5 +++++ GPU/Vulkan/TextureCacheVulkan.h | 3 +-- 14 files changed, 37 insertions(+), 31 deletions(-) diff --git a/GPU/Common/TextureCacheCommon.cpp b/GPU/Common/TextureCacheCommon.cpp index 2b8c1e0f5f..aadb53637e 100644 --- a/GPU/Common/TextureCacheCommon.cpp +++ b/GPU/Common/TextureCacheCommon.cpp @@ -129,11 +129,14 @@ TextureCacheCommon::TextureCacheCommon(Draw::DrawContext *draw) tmpTexBufRearrange_.resize(512 * 512); // 1MB replacer_.Init(); + + depalShaderCache_ = new DepalShaderCache(draw); } TextureCacheCommon::~TextureCacheCommon() { FreeAlignedMemory(clutBufConverted_); FreeAlignedMemory(clutBufRaw_); + delete depalShaderCache_; } // Produces a signed 1.23.8 value. @@ -1841,6 +1844,8 @@ void TextureCacheCommon::ApplyTexture() { } void TextureCacheCommon::Clear(bool delete_them) { + depalShaderCache_->Clear(); + ForgetLastTexture(); for (TexCache::iterator iter = cache_.begin(); iter != cache_.end(); ++iter) { ReleaseTexture(iter->second.get(), delete_them); @@ -2278,3 +2283,7 @@ CheckAlphaResult TextureCacheCommon::CheckCLUTAlpha(const uint8_t *pixelData, GE return CheckAlpha32((const u32 *)pixelData, w, 0xFF000000); // note, the normal order here, unlike the 16-bit formats } } + +void TextureCacheCommon::StartFrame() { + depalShaderCache_->Decimate(); +} diff --git a/GPU/Common/TextureCacheCommon.h b/GPU/Common/TextureCacheCommon.h index 8d8a35e97e..95a482805b 100644 --- a/GPU/Common/TextureCacheCommon.h +++ b/GPU/Common/TextureCacheCommon.h @@ -28,6 +28,7 @@ #include "GPU/Common/GPUDebugInterface.h" #include "GPU/Common/TextureDecoder.h" #include "GPU/Common/TextureScalerCommon.h" +#include "GPU/Common/DepalettizeCommon.h" enum FramebufferNotification { NOTIFY_FB_CREATED, @@ -293,6 +294,8 @@ public: void InvalidateAll(GPUInvalidationType type); void ClearNextFrame(); + DepalShaderCache *GetDepalShaderCache() { return depalShaderCache_; } + virtual void ForgetLastTexture() = 0; virtual void InvalidateLastTexture() = 0; virtual void Clear(bool delete_them); @@ -365,6 +368,8 @@ protected: void SetTextureFramebuffer(const AttachCandidate &candidate); + virtual void StartFrame(); + void DecimateVideos(); bool IsVideo(u32 texaddr) const; @@ -399,6 +404,7 @@ protected: TextureReplacer replacer_; TextureScalerCommon scaler_; FramebufferManagerCommon *framebufferManager_; + DepalShaderCache *depalShaderCache_; bool clearCacheNextFrame_ = false; bool lowMemoryMode_ = false; diff --git a/GPU/D3D11/GPU_D3D11.cpp b/GPU/D3D11/GPU_D3D11.cpp index 34c63a91af..23798640ee 100644 --- a/GPU/D3D11/GPU_D3D11.cpp +++ b/GPU/D3D11/GPU_D3D11.cpp @@ -64,7 +64,6 @@ GPU_D3D11::GPU_D3D11(GraphicsContext *gfxCtx, Draw::DrawContext *draw) textureCache_ = textureCacheD3D11_; drawEngineCommon_ = &drawEngine_; shaderManager_ = shaderManagerD3D11_; - depalShaderCache_ = new DepalShaderCache(draw); drawEngine_.SetShaderManager(shaderManagerD3D11_); drawEngine_.SetTextureCache(textureCacheD3D11_); drawEngine_.SetFramebufferManager(framebufferManagerD3D11_); @@ -74,7 +73,6 @@ GPU_D3D11::GPU_D3D11(GraphicsContext *gfxCtx, Draw::DrawContext *draw) framebufferManagerD3D11_->SetDrawEngine(&drawEngine_); framebufferManagerD3D11_->Init(); textureCacheD3D11_->SetFramebufferManager(framebufferManagerD3D11_); - textureCacheD3D11_->SetDepalShaderCache(depalShaderCache_); textureCacheD3D11_->SetShaderManager(shaderManagerD3D11_); // Sanity check gstate @@ -95,7 +93,6 @@ GPU_D3D11::GPU_D3D11(GraphicsContext *gfxCtx, Draw::DrawContext *draw) } GPU_D3D11::~GPU_D3D11() { - delete depalShaderCache_; framebufferManagerD3D11_->DestroyAllFBOs(); delete framebufferManagerD3D11_; shaderManagerD3D11_->ClearShaders(); @@ -235,7 +232,6 @@ void GPU_D3D11::BeginFrame() { textureCacheD3D11_->StartFrame(); drawEngine_.BeginFrame(); - depalShaderCache_->Decimate(); // fragmentTestCache_.Decimate(); shaderManagerD3D11_->DirtyLastShader(); @@ -328,7 +324,6 @@ void GPU_D3D11::DoState(PointerWrap &p) { // None of these are necessary when saving. if (p.mode == p.MODE_READ && !PSP_CoreParameter().frozen) { textureCache_->Clear(true); - depalShaderCache_->Clear(); drawEngine_.ClearTrackedVertexArrays(); gstate_c.Dirty(DIRTY_TEXTURE_IMAGE); @@ -341,7 +336,7 @@ std::vector GPU_D3D11::DebugGetShaderIDs(DebugShaderType type) { case SHADER_TYPE_VERTEXLOADER: return drawEngine_.DebugGetVertexLoaderIDs(); case SHADER_TYPE_DEPAL: - return depalShaderCache_->DebugGetShaderIDs(type); + return textureCache_->GetDepalShaderCache()->DebugGetShaderIDs(type); default: return shaderManagerD3D11_->DebugGetShaderIDs(type); } @@ -352,7 +347,7 @@ std::string GPU_D3D11::DebugGetShaderString(std::string id, DebugShaderType type case SHADER_TYPE_VERTEXLOADER: return drawEngine_.DebugGetVertexLoaderString(id, stringType); case SHADER_TYPE_DEPAL: - return depalShaderCache_->DebugGetShaderString(id, type, stringType); + return textureCache_->GetDepalShaderCache()->DebugGetShaderString(id, type, stringType); default: return shaderManagerD3D11_->DebugGetShaderString(id, type, stringType); } diff --git a/GPU/D3D11/GPU_D3D11.h b/GPU/D3D11/GPU_D3D11.h index db5bb05e16..94a0aef915 100644 --- a/GPU/D3D11/GPU_D3D11.h +++ b/GPU/D3D11/GPU_D3D11.h @@ -78,7 +78,6 @@ private: FramebufferManagerD3D11 *framebufferManagerD3D11_; TextureCacheD3D11 *textureCacheD3D11_; - DepalShaderCache *depalShaderCache_; DrawEngineD3D11 drawEngine_; ShaderManagerD3D11 *shaderManagerD3D11_; }; diff --git a/GPU/D3D11/TextureCacheD3D11.cpp b/GPU/D3D11/TextureCacheD3D11.cpp index 796073bb0c..760a1f5022 100644 --- a/GPU/D3D11/TextureCacheD3D11.cpp +++ b/GPU/D3D11/TextureCacheD3D11.cpp @@ -181,6 +181,8 @@ void TextureCacheD3D11::InvalidateLastTexture() { } void TextureCacheD3D11::StartFrame() { + TextureCacheCommon::StartFrame(); + InvalidateLastTexture(); timesInvalidatedAllThisFrame_ = 0; replacementTimeThisFrame_ = 0.0; diff --git a/GPU/D3D11/TextureCacheD3D11.h b/GPU/D3D11/TextureCacheD3D11.h index b12f47953f..cda0860277 100644 --- a/GPU/D3D11/TextureCacheD3D11.h +++ b/GPU/D3D11/TextureCacheD3D11.h @@ -46,12 +46,9 @@ public: TextureCacheD3D11(Draw::DrawContext *draw); ~TextureCacheD3D11(); - void StartFrame(); + void StartFrame() override; void SetFramebufferManager(FramebufferManagerD3D11 *fbManager); - void SetDepalShaderCache(DepalShaderCache *dpCache) { - depalShaderCache_ = dpCache; - } void SetShaderManager(ShaderManagerD3D11 *sm) { shaderManager_ = sm; } @@ -92,9 +89,7 @@ private: ID3D11Buffer *depalConstants_; FramebufferManagerD3D11 *framebufferManagerD3D11_; - DepalShaderCache *depalShaderCache_; ShaderManagerD3D11 *shaderManager_; - }; DXGI_FORMAT GetClutDestFormatD3D11(GEPaletteFormat format); diff --git a/GPU/Directx9/TextureCacheDX9.cpp b/GPU/Directx9/TextureCacheDX9.cpp index 37a21819bd..92a3b79c4f 100644 --- a/GPU/Directx9/TextureCacheDX9.cpp +++ b/GPU/Directx9/TextureCacheDX9.cpp @@ -146,6 +146,8 @@ void TextureCacheDX9::ApplySamplingParams(const SamplerCacheKey &key) { } void TextureCacheDX9::StartFrame() { + TextureCacheCommon::StartFrame(); + InvalidateLastTexture(); timesInvalidatedAllThisFrame_ = 0; replacementTimeThisFrame_ = 0.0; diff --git a/GPU/Directx9/TextureCacheDX9.h b/GPU/Directx9/TextureCacheDX9.h index 9ea1d89b25..4ace0de969 100644 --- a/GPU/Directx9/TextureCacheDX9.h +++ b/GPU/Directx9/TextureCacheDX9.h @@ -36,7 +36,7 @@ public: TextureCacheDX9(Draw::DrawContext *draw); ~TextureCacheDX9(); - void StartFrame(); + void StartFrame() override; void SetFramebufferManager(FramebufferManagerDX9 *fbManager); void SetDepalShaderCache(DepalShaderCache *dpCache) { @@ -82,7 +82,6 @@ private: float maxAnisotropyLevel; FramebufferManagerDX9 *framebufferManagerDX9_; - DepalShaderCache *depalShaderCache_; ShaderManagerDX9 *shaderManager_; }; diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index e637f50821..c6c941623f 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -53,7 +53,7 @@ #endif GPU_GLES::GPU_GLES(GraphicsContext *gfxCtx, Draw::DrawContext *draw) - : GPUCommon(gfxCtx, draw), depalShaderCache_(draw), drawEngine_(draw), fragmentTestCache_(draw) { + : GPUCommon(gfxCtx, draw), drawEngine_(draw), fragmentTestCache_(draw) { UpdateVsyncInterval(true); CheckGPUFeatures(); @@ -78,7 +78,6 @@ GPU_GLES::GPU_GLES(GraphicsContext *gfxCtx, Draw::DrawContext *draw) framebufferManagerGL_->SetDrawEngine(&drawEngine_); framebufferManagerGL_->Init(); textureCacheGL_->SetFramebufferManager(framebufferManagerGL_); - textureCacheGL_->SetDepalShaderCache(&depalShaderCache_); textureCacheGL_->SetShaderManager(shaderManagerGL_); textureCacheGL_->SetDrawEngine(&drawEngine_); fragmentTestCache_.SetTextureCache(textureCacheGL_); @@ -141,7 +140,6 @@ GPU_GLES::~GPU_GLES() { framebufferManagerGL_->DestroyAllFBOs(); shaderManagerGL_->ClearCache(true); - depalShaderCache_.Clear(); fragmentTestCache_.Clear(); delete shaderManagerGL_; @@ -311,7 +309,6 @@ void GPU_GLES::DeviceLost() { shaderManagerGL_->DeviceLost(); textureCacheGL_->DeviceLost(); fragmentTestCache_.DeviceLost(); - depalShaderCache_.DeviceLost(); drawEngine_.DeviceLost(); GPUCommon::DeviceLost(); @@ -327,12 +324,10 @@ void GPU_GLES::DeviceRestore() { textureCacheGL_->DeviceRestore(draw_); drawEngine_.DeviceRestore(draw_); fragmentTestCache_.DeviceRestore(draw_); - depalShaderCache_.DeviceRestore(draw_); } void GPU_GLES::Reinitialize() { GPUCommon::Reinitialize(); - depalShaderCache_.Clear(); } void GPU_GLES::InitClear() { @@ -363,7 +358,6 @@ void GPU_GLES::ReapplyGfxState() { void GPU_GLES::BeginFrame() { textureCacheGL_->StartFrame(); - depalShaderCache_.Decimate(); fragmentTestCache_.Decimate(); GPUCommon::BeginFrame(); @@ -464,7 +458,6 @@ void GPU_GLES::DoState(PointerWrap &p) { // In Freeze-Frame mode, we don't want to do any of this. if (p.mode == p.MODE_READ && !PSP_CoreParameter().frozen) { textureCache_->Clear(true); - depalShaderCache_.Clear(); drawEngine_.ClearTrackedVertexArrays(); gstate_c.Dirty(DIRTY_TEXTURE_IMAGE); @@ -477,7 +470,7 @@ std::vector GPU_GLES::DebugGetShaderIDs(DebugShaderType type) { case SHADER_TYPE_VERTEXLOADER: return drawEngine_.DebugGetVertexLoaderIDs(); case SHADER_TYPE_DEPAL: - return depalShaderCache_.DebugGetShaderIDs(type); + return textureCache_->GetDepalShaderCache()->DebugGetShaderIDs(type); default: return shaderManagerGL_->DebugGetShaderIDs(type); } @@ -488,7 +481,7 @@ std::string GPU_GLES::DebugGetShaderString(std::string id, DebugShaderType type, case SHADER_TYPE_VERTEXLOADER: return drawEngine_.DebugGetVertexLoaderString(id, stringType); case SHADER_TYPE_DEPAL: - return depalShaderCache_.DebugGetShaderString(id, type, stringType); + return textureCache_->GetDepalShaderCache()->DebugGetShaderString(id, type, stringType); default: return shaderManagerGL_->DebugGetShaderString(id, type, stringType); } diff --git a/GPU/GLES/GPU_GLES.h b/GPU/GLES/GPU_GLES.h index e35400e40a..a6e521763a 100644 --- a/GPU/GLES/GPU_GLES.h +++ b/GPU/GLES/GPU_GLES.h @@ -83,7 +83,6 @@ private: FramebufferManagerGLES *framebufferManagerGL_; TextureCacheGLES *textureCacheGL_; - DepalShaderCache depalShaderCache_; DrawEngineGLES drawEngine_; FragmentTestCacheGLES fragmentTestCache_; ShaderManagerGLES *shaderManagerGL_; diff --git a/GPU/GLES/TextureCacheGLES.cpp b/GPU/GLES/TextureCacheGLES.cpp index 4994f62393..5d9882095a 100644 --- a/GPU/GLES/TextureCacheGLES.cpp +++ b/GPU/GLES/TextureCacheGLES.cpp @@ -142,6 +142,8 @@ static void ConvertColors(void *dstBuf, const void *srcBuf, Draw::DataFormat dst } void TextureCacheGLES::StartFrame() { + TextureCacheCommon::StartFrame(); + InvalidateLastTexture(); timesInvalidatedAllThisFrame_ = 0; replacementTimeThisFrame_ = 0.0; @@ -532,6 +534,7 @@ bool TextureCacheGLES::GetCurrentTextureDebug(GPUDebugBuffer &buffer, int level) } void TextureCacheGLES::DeviceLost() { + depalShaderCache_->DeviceLost(); Clear(false); draw_ = nullptr; render_ = nullptr; @@ -540,4 +543,5 @@ void TextureCacheGLES::DeviceLost() { void TextureCacheGLES::DeviceRestore(Draw::DrawContext *draw) { draw_ = draw; render_ = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); + depalShaderCache_->DeviceRestore(draw); } diff --git a/GPU/GLES/TextureCacheGLES.h b/GPU/GLES/TextureCacheGLES.h index 84d9f84850..ecc4b4d6a2 100644 --- a/GPU/GLES/TextureCacheGLES.h +++ b/GPU/GLES/TextureCacheGLES.h @@ -38,7 +38,7 @@ public: ~TextureCacheGLES(); void Clear(bool delete_them) override; - void StartFrame(); + void StartFrame() override; void SetFramebufferManager(FramebufferManagerGLES *fbManager); void SetDepalShaderCache(DepalShaderCache *dpCache) { @@ -84,7 +84,6 @@ private: GLRTexture *lastBoundTexture = nullptr; FramebufferManagerGLES *framebufferManagerGL_; - DepalShaderCache *depalShaderCache_; ShaderManagerGLES *shaderManager_; DrawEngineGLES *drawEngine_; diff --git a/GPU/Vulkan/TextureCacheVulkan.cpp b/GPU/Vulkan/TextureCacheVulkan.cpp index 46a2db350e..bcdcf5c35a 100644 --- a/GPU/Vulkan/TextureCacheVulkan.cpp +++ b/GPU/Vulkan/TextureCacheVulkan.cpp @@ -204,6 +204,8 @@ void TextureCacheVulkan::SetVulkan2D(Vulkan2D *vk2d) { } void TextureCacheVulkan::DeviceLost() { + depalShaderCache_->DeviceLost(); + VulkanContext *vulkan = draw_ ? (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT) : nullptr; Clear(true); @@ -229,6 +231,7 @@ void TextureCacheVulkan::DeviceRestore(Draw::DrawContext *draw) { _assert_(!allocator_); samplerCache_.DeviceRestore(vulkan); + depalShaderCache_->DeviceRestore(draw); VkSamplerCreateInfo samp{ VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; samp.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT; @@ -318,6 +321,8 @@ static const VkFilter MagFiltVK[2] = { }; void TextureCacheVulkan::StartFrame() { + TextureCacheCommon::StartFrame(); + InvalidateLastTexture(); depalShaderCache_->Decimate(); diff --git a/GPU/Vulkan/TextureCacheVulkan.h b/GPU/Vulkan/TextureCacheVulkan.h index 9893b0b84c..7b863a1e92 100644 --- a/GPU/Vulkan/TextureCacheVulkan.h +++ b/GPU/Vulkan/TextureCacheVulkan.h @@ -59,7 +59,7 @@ public: TextureCacheVulkan(Draw::DrawContext *draw, VulkanContext *vulkan); ~TextureCacheVulkan(); - void StartFrame(); + void StartFrame() override; void EndFrame(); void DeviceLost(); @@ -124,7 +124,6 @@ private: SamplerCache samplerCache_; - DepalShaderCache *depalShaderCache_; ShaderManagerVulkan *shaderManagerVulkan_; DrawEngineVulkan *drawEngine_; Vulkan2D *vulkan2D_;