From cb90bb95ed25fe090ecf4fdf7d94aa58b694546e Mon Sep 17 00:00:00 2001 From: Logan McNaughton Date: Thu, 22 Feb 2018 16:05:59 -0700 Subject: [PATCH] Cleanup FB Texture caching code --- src/BufferCopy/ColorBufferToRDRAM.cpp | 1 - src/BufferCopy/DepthBufferToRDRAM.cpp | 2 -- src/BufferCopy/RDRAMtoColorBuffer.cpp | 1 - src/DepthBuffer.cpp | 2 -- src/FrameBuffer.cpp | 1 - src/NoiseTexture.cpp | 1 - src/PaletteTexture.cpp | 1 - src/PostProcessor.cpp | 1 - src/TexrectDrawer.cpp | 1 - src/TextDrawer.cpp | 1 - src/Textures.cpp | 16 +++------------- src/Textures.h | 5 +---- src/ZlutTexture.cpp | 1 - 13 files changed, 4 insertions(+), 30 deletions(-) diff --git a/src/BufferCopy/ColorBufferToRDRAM.cpp b/src/BufferCopy/ColorBufferToRDRAM.cpp index ba39b37d..84cbc8a5 100644 --- a/src/BufferCopy/ColorBufferToRDRAM.cpp +++ b/src/BufferCopy/ColorBufferToRDRAM.cpp @@ -79,7 +79,6 @@ void ColorBufferToRDRAM::_initFBTexture(void) m_pTexture->realWidth = m_lastBufferWidth; m_pTexture->realHeight = VI_GetMaxBufferHeight(m_lastBufferWidth); m_pTexture->textureBytes = m_pTexture->realWidth * m_pTexture->realHeight * fbTexFormat.colorFormatBytes; - textureCache().addFrameBufferTextureSize(m_pTexture->textureBytes); { Context::InitTextureParams params; diff --git a/src/BufferCopy/DepthBufferToRDRAM.cpp b/src/BufferCopy/DepthBufferToRDRAM.cpp index bf10be6b..15a924ee 100644 --- a/src/BufferCopy/DepthBufferToRDRAM.cpp +++ b/src/BufferCopy/DepthBufferToRDRAM.cpp @@ -61,7 +61,6 @@ void DepthBufferToRDRAM::init() m_pColorTexture->realWidth = DEPTH_TEX_WIDTH; m_pColorTexture->realHeight = DEPTH_TEX_HEIGHT; m_pColorTexture->textureBytes = m_pColorTexture->realWidth * m_pColorTexture->realHeight; - textureCache().addFrameBufferTextureSize(m_pColorTexture->textureBytes); m_pDepthTexture = textureCache().addFrameBufferTexture(false); m_pDepthTexture->format = G_IM_FMT_I; @@ -76,7 +75,6 @@ void DepthBufferToRDRAM::init() m_pDepthTexture->realWidth = DEPTH_TEX_WIDTH; m_pDepthTexture->realHeight = DEPTH_TEX_HEIGHT; m_pDepthTexture->textureBytes = m_pDepthTexture->realWidth * m_pDepthTexture->realHeight * sizeof(float); - textureCache().addFrameBufferTextureSize(m_pDepthTexture->textureBytes); const FramebufferTextureFormats & fbTexFormats = gfxContext.getFramebufferTextureFormats(); Context::InitTextureParams initParams; diff --git a/src/BufferCopy/RDRAMtoColorBuffer.cpp b/src/BufferCopy/RDRAMtoColorBuffer.cpp index f69a44ae..9d3689ff 100644 --- a/src/BufferCopy/RDRAMtoColorBuffer.cpp +++ b/src/BufferCopy/RDRAMtoColorBuffer.cpp @@ -43,7 +43,6 @@ void RDRAMtoColorBuffer::init() m_pTexture->realWidth = 640; m_pTexture->realHeight = 580; m_pTexture->textureBytes = m_pTexture->realWidth * m_pTexture->realHeight * fbTexFormats.colorFormatBytes; - textureCache().addFrameBufferTextureSize(m_pTexture->textureBytes); Context::InitTextureParams initParams; initParams.handle = m_pTexture->name; diff --git a/src/DepthBuffer.cpp b/src/DepthBuffer.cpp index 0738e5c1..2a87c404 100644 --- a/src/DepthBuffer.cpp +++ b/src/DepthBuffer.cpp @@ -59,7 +59,6 @@ void DepthBuffer::_initDepthImageTexture(FrameBuffer * _pBuffer, CachedTexture& _cachedTexture.realWidth = _cachedTexture.width; _cachedTexture.realHeight = _cachedTexture.height; _cachedTexture.textureBytes = _cachedTexture.realWidth * _cachedTexture.realHeight * fbTexFormat.depthImageFormatBytes; - textureCache().addFrameBufferTextureSize(_cachedTexture.textureBytes); { Context::InitTextureParams params; @@ -133,7 +132,6 @@ void DepthBuffer::_initDepthBufferTexture(FrameBuffer * _pBuffer, CachedTexture _pTexture->realWidth = _pTexture->width; _pTexture->realHeight = _pTexture->height; _pTexture->textureBytes = _pTexture->realWidth * _pTexture->realHeight * fbTexFormat.depthFormatBytes; - textureCache().addFrameBufferTextureSize(_pTexture->textureBytes); Context::InitTextureParams initParams; initParams.handle = _pTexture->name; diff --git a/src/FrameBuffer.cpp b/src/FrameBuffer.cpp index c70965bb..6ab7ffd4 100644 --- a/src/FrameBuffer.cpp +++ b/src/FrameBuffer.cpp @@ -95,7 +95,6 @@ void FrameBuffer::_initTexture(u16 _width, u16 _height, u16 _format, u16 _size, _pTexture->textureBytes *= fbTexFormats.colorFormatBytes; else _pTexture->textureBytes *= fbTexFormats.monochromeFormatBytes; - textureCache().addFrameBufferTextureSize(_pTexture->textureBytes); } void FrameBuffer::_setAndAttachTexture(ObjectHandle _fbo, CachedTexture *_pTexture, u32 _t, bool _multisampling) diff --git a/src/NoiseTexture.cpp b/src/NoiseTexture.cpp index 02fe06cb..ab6d7728 100644 --- a/src/NoiseTexture.cpp +++ b/src/NoiseTexture.cpp @@ -125,7 +125,6 @@ void NoiseTexture::init() m_pTexture[i]->realWidth = NOISE_TEX_WIDTH; m_pTexture[i]->realHeight = NOISE_TEX_HEIGHT; m_pTexture[i]->textureBytes = m_pTexture[i]->realWidth * m_pTexture[i]->realHeight; - textureCache().addFrameBufferTextureSize(m_pTexture[i]->textureBytes); const FramebufferTextureFormats & fbTexFormats = gfxContext.getFramebufferTextureFormats(); { diff --git a/src/PaletteTexture.cpp b/src/PaletteTexture.cpp index ff5b5424..e36460d3 100644 --- a/src/PaletteTexture.cpp +++ b/src/PaletteTexture.cpp @@ -37,7 +37,6 @@ void PaletteTexture::init() m_pTexture->realWidth = 256; m_pTexture->realHeight = 1; m_pTexture->textureBytes = m_pTexture->realWidth * m_pTexture->realHeight * fbTexFormats.lutFormatBytes; - textureCache().addFrameBufferTextureSize(m_pTexture->textureBytes); Context::InitTextureParams initParams; initParams.handle = m_pTexture->name; diff --git a/src/PostProcessor.cpp b/src/PostProcessor.cpp index d56913b6..263b945d 100644 --- a/src/PostProcessor.cpp +++ b/src/PostProcessor.cpp @@ -36,7 +36,6 @@ void PostProcessor::_createResultBuffer(const FrameBuffer * _pMainBuffer) pTexture->realWidth = pMainTexture->realWidth; pTexture->realHeight = pMainTexture->realHeight; pTexture->textureBytes = pTexture->realWidth * pTexture->realHeight * 4; - textureCache().addFrameBufferTextureSize(pTexture->textureBytes); Context::InitTextureParams initParams; initParams.handle = pTexture->name; diff --git a/src/TexrectDrawer.cpp b/src/TexrectDrawer.cpp index c127bf89..659d4c6c 100644 --- a/src/TexrectDrawer.cpp +++ b/src/TexrectDrawer.cpp @@ -46,7 +46,6 @@ void TexrectDrawer::init() m_pTexture->realWidth = 640; m_pTexture->realHeight = 580; m_pTexture->textureBytes = m_pTexture->realWidth * m_pTexture->realHeight * fbTexFormats.colorFormatBytes; - textureCache().addFrameBufferTextureSize(m_pTexture->textureBytes); m_stepX = 2.0f / 640.0f; m_stepY = 2.0f / 580.0f; diff --git a/src/TextDrawer.cpp b/src/TextDrawer.cpp index a9a1d725..e81b25f2 100644 --- a/src/TextDrawer.cpp +++ b/src/TextDrawer.cpp @@ -106,7 +106,6 @@ struct Atlas { m_pTexture->realWidth = w; m_pTexture->realHeight = h; m_pTexture->textureBytes = m_pTexture->realWidth * m_pTexture->realHeight * fbTexFormats.noiseFormatBytes; - textureCache().addFrameBufferTextureSize(m_pTexture->textureBytes); Context::InitTextureParams initParams; initParams.handle = m_pTexture->name; diff --git a/src/Textures.cpp b/src/Textures.cpp index aaa6d48e..5843f1a9 100644 --- a/src/Textures.cpp +++ b/src/Textures.cpp @@ -494,7 +494,6 @@ void TextureCache::init() params.data = dummyTexture; gfxContext.init2DTexture(params); - m_cachedBytes = m_pDummy->textureBytes; activateDummy( 0 ); activateDummy(1); current[0] = current[1] = nullptr; @@ -535,15 +534,12 @@ void TextureCache::destroy() for (FBTextures::const_iterator cur = m_fbTextures.cbegin(); cur != m_fbTextures.cend(); ++cur) gfxContext.deleteTexture(cur->second.name); m_fbTextures.clear(); - - m_cachedBytes = 0; } void TextureCache::_checkCacheSize() { if (m_textures.size() >= m_maxCacheSize) { CachedTexture& clsTex = m_textures.back(); - m_cachedBytes -= clsTex.textureBytes; gfxContext.deleteTexture(clsTex.name); m_lruTextureLocations.erase(clsTex.crc); m_textures.pop_back(); @@ -566,20 +562,18 @@ void TextureCache::removeFrameBufferTexture(CachedTexture * _pTexture) { if (_pTexture == nullptr) return; - FBTextures::const_iterator iter = m_fbTextures.find(_pTexture->name); + FBTextures::const_iterator iter = m_fbTextures.find(u32(_pTexture->name)); assert(iter != m_fbTextures.cend()); - m_cachedBytes -= iter->second.textureBytes; gfxContext.deleteTexture(ObjectHandle(iter->second.name)); m_fbTextures.erase(iter); } CachedTexture * TextureCache::addFrameBufferTexture(bool _multisample) { - _checkCacheSize(); ObjectHandle texName(gfxContext.createTexture(_multisample ? textureTarget::TEXTURE_2D_MULTISAMPLE : textureTarget::TEXTURE_2D)); - m_fbTextures.emplace(texName, texName); - return &m_fbTextures.at(texName); + m_fbTextures.emplace(u32(texName), texName); + return &m_fbTextures.at(u32(texName)); } struct TileSizes @@ -1443,7 +1437,6 @@ void TextureCache::_updateBackground() _loadBackground(pCurrent); activateTexture(0, pCurrent); - m_cachedBytes += pCurrent->textureBytes; current[0] = pCurrent; } @@ -1452,7 +1445,6 @@ void TextureCache::_clear() current[0] = current[1] = nullptr; for (auto cur = m_textures.cbegin(); cur != m_textures.cend(); ++cur) { - m_cachedBytes -= cur->textureBytes; gfxContext.deleteTexture(cur->name); } m_textures.clear(); @@ -1551,7 +1543,6 @@ void TextureCache::update(u32 _t) return; } - m_cachedBytes -= currentTex.textureBytes; gfxContext.deleteTexture(currentTex.name); m_lruTextureLocations.erase(locations_iter); m_textures.erase(iter); @@ -1601,7 +1592,6 @@ void TextureCache::update(u32 _t) _load(_t, pCurrent); activateTexture( _t, pCurrent ); - m_cachedBytes += pCurrent->textureBytes; current[_t] = pCurrent; } diff --git a/src/Textures.h b/src/Textures.h index ba7809ec..af9306cc 100644 --- a/src/Textures.h +++ b/src/Textures.h @@ -54,7 +54,6 @@ struct TextureCache void init(); void destroy(); CachedTexture * addFrameBufferTexture(bool _multisample); - void addFrameBufferTextureSize(u32 _size) {m_cachedBytes += _size;} void removeFrameBufferTexture(CachedTexture * _pTexture); void activateTexture(u32 _t, CachedTexture *_pTexture); void activateDummy(u32 _t); @@ -69,7 +68,6 @@ private: , m_pMSDummy(nullptr) , m_hits(0) , m_misses(0) - , m_cachedBytes(0) , m_curUnpackAlignment(4) , m_toggleDumpTex(false) { @@ -93,14 +91,13 @@ private: typedef std::list Textures; typedef std::unordered_map Texture_Locations; - typedef std::map FBTextures; + typedef std::unordered_map FBTextures; Textures m_textures; Texture_Locations m_lruTextureLocations; FBTextures m_fbTextures; CachedTexture * m_pDummy; CachedTexture * m_pMSDummy; u32 m_hits, m_misses; - u32 m_cachedBytes; s32 m_curUnpackAlignment; bool m_toggleDumpTex; const size_t m_maxCacheSize = 8000; diff --git a/src/ZlutTexture.cpp b/src/ZlutTexture.cpp index dbf3544c..0a4ca3e8 100644 --- a/src/ZlutTexture.cpp +++ b/src/ZlutTexture.cpp @@ -38,7 +38,6 @@ void ZlutTexture::init() m_pTexture->realWidth = 512; m_pTexture->realHeight = 512; m_pTexture->textureBytes = m_pTexture->realWidth * m_pTexture->realHeight * fbTexFormats.lutFormatBytes; - textureCache().addFrameBufferTextureSize(m_pTexture->textureBytes); Context::InitTextureParams initParams; initParams.handle = m_pTexture->name;