mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Move the depal cache instance ownership to TextureCacheCommon
This commit is contained in:
parent
87b128ecaf
commit
45def772ee
14 changed files with 37 additions and 31 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,6 @@ private:
|
|||
|
||||
FramebufferManagerD3D11 *framebufferManagerD3D11_;
|
||||
TextureCacheD3D11 *textureCacheD3D11_;
|
||||
DepalShaderCache *depalShaderCache_;
|
||||
DrawEngineD3D11 drawEngine_;
|
||||
ShaderManagerD3D11 *shaderManagerD3D11_;
|
||||
};
|
||||
|
|
|
@ -181,6 +181,8 @@ void TextureCacheD3D11::InvalidateLastTexture() {
|
|||
}
|
||||
|
||||
void TextureCacheD3D11::StartFrame() {
|
||||
TextureCacheCommon::StartFrame();
|
||||
|
||||
InvalidateLastTexture();
|
||||
timesInvalidatedAllThisFrame_ = 0;
|
||||
replacementTimeThisFrame_ = 0.0;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -146,6 +146,8 @@ void TextureCacheDX9::ApplySamplingParams(const SamplerCacheKey &key) {
|
|||
}
|
||||
|
||||
void TextureCacheDX9::StartFrame() {
|
||||
TextureCacheCommon::StartFrame();
|
||||
|
||||
InvalidateLastTexture();
|
||||
timesInvalidatedAllThisFrame_ = 0;
|
||||
replacementTimeThisFrame_ = 0.0;
|
||||
|
|
|
@ -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_;
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -83,7 +83,6 @@ private:
|
|||
|
||||
FramebufferManagerGLES *framebufferManagerGL_;
|
||||
TextureCacheGLES *textureCacheGL_;
|
||||
DepalShaderCache depalShaderCache_;
|
||||
DrawEngineGLES drawEngine_;
|
||||
FragmentTestCacheGLES fragmentTestCache_;
|
||||
ShaderManagerGLES *shaderManagerGL_;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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_;
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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_;
|
||||
|
|
Loading…
Add table
Reference in a new issue