Move the depal cache instance ownership to TextureCacheCommon

This commit is contained in:
Henrik Rydgård 2022-08-05 13:27:55 +02:00
parent 87b128ecaf
commit 45def772ee
14 changed files with 37 additions and 31 deletions

View file

@ -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();
}

View file

@ -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;

View file

@ -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<std::string> 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);
}

View file

@ -78,7 +78,6 @@ private:
FramebufferManagerD3D11 *framebufferManagerD3D11_;
TextureCacheD3D11 *textureCacheD3D11_;
DepalShaderCache *depalShaderCache_;
DrawEngineD3D11 drawEngine_;
ShaderManagerD3D11 *shaderManagerD3D11_;
};

View file

@ -181,6 +181,8 @@ void TextureCacheD3D11::InvalidateLastTexture() {
}
void TextureCacheD3D11::StartFrame() {
TextureCacheCommon::StartFrame();
InvalidateLastTexture();
timesInvalidatedAllThisFrame_ = 0;
replacementTimeThisFrame_ = 0.0;

View file

@ -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);

View file

@ -146,6 +146,8 @@ void TextureCacheDX9::ApplySamplingParams(const SamplerCacheKey &key) {
}
void TextureCacheDX9::StartFrame() {
TextureCacheCommon::StartFrame();
InvalidateLastTexture();
timesInvalidatedAllThisFrame_ = 0;
replacementTimeThisFrame_ = 0.0;

View file

@ -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_;
};

View file

@ -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<std::string> 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);
}

View file

@ -83,7 +83,6 @@ private:
FramebufferManagerGLES *framebufferManagerGL_;
TextureCacheGLES *textureCacheGL_;
DepalShaderCache depalShaderCache_;
DrawEngineGLES drawEngine_;
FragmentTestCacheGLES fragmentTestCache_;
ShaderManagerGLES *shaderManagerGL_;

View file

@ -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);
}

View file

@ -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_;

View file

@ -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();

View file

@ -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_;