From c5008fe9dea7baf3368e214fe70e148d3bcca83b Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Mon, 26 Dec 2011 17:35:27 +0100 Subject: [PATCH] TextureCache: Renaming some variables OGL: Fix a possible bug at texture dumping OGL: Add a TODO about a possible bug --- .../Core/VideoCommon/Src/TextureCacheBase.cpp | 30 +++++++++---------- .../Core/VideoCommon/Src/TextureCacheBase.h | 26 ++++++++-------- .../Plugin_VideoDX11/Src/TextureCache.cpp | 2 +- .../Plugin_VideoDX11/Src/VertexManager.cpp | 2 +- .../Plugin_VideoDX9/Src/TextureCache.cpp | 10 +++---- .../Plugin_VideoDX9/Src/VertexManager.cpp | 2 +- .../Plugin_VideoOGL/Src/TextureCache.cpp | 6 ++-- .../Plugin_VideoOGL/Src/VertexManager.cpp | 2 +- 8 files changed, 41 insertions(+), 39 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index 3550227389..b56dc171aa 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -266,7 +266,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, } if (((entry->isRenderTarget || entry->isDynamic) && hash_value == entry->hash && address == entry->addr) - || ((address == entry->addr) && (hash_value == entry->hash) && full_format == entry->format && entry->mipLevels == maxlevel)) + || ((address == entry->addr) && (hash_value == entry->hash) && full_format == entry->format && entry->num_mipmaps == maxlevel)) { entry->isDynamic = false; goto return_entry; @@ -279,8 +279,8 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, texture_is_dynamic = (entry->isRenderTarget || entry->isDynamic) && !g_ActiveConfig.bCopyEFBToTexture; if (!entry->isRenderTarget && - ((!entry->isDynamic && width == entry->realW && height == entry->realH && full_format == entry->format && entry->mipLevels == maxlevel) - || (entry->isDynamic && entry->realW == width && entry->realH == height))) + ((!entry->isDynamic && width == entry->native_width && height == entry->native_height && full_format == entry->format && entry->num_mipmaps == maxlevel) + || (entry->isDynamic && entry->native_width == width && entry->native_height == height))) { // reuse the texture } @@ -332,7 +332,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, // Sometimes, we can get around recreating a texture if only the number of mip levels gets changes // e.g. if our texture cache entry got too many mipmap levels we can limit the number of used levels by setting the appropriate render states // Thus, we don't update this member for every Load, but just whenever the texture gets recreated - entry->mipLevels = maxlevel; + entry->num_mipmaps = maxlevel; GFX_DEBUGGER_PAUSE_AT(NEXT_NEW_TEXTURE, true); } @@ -341,11 +341,11 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, entry->format = full_format; entry->size_in_bytes = texture_size; - entry->virtualW = width; - entry->virtualH = height; + entry->native_width = nativeW; + entry->native_height = nativeH; - entry->realW = nativeW; - entry->realH = nativeH; + entry->virtual_width = width; + entry->virtual_height = height; entry->isRenderTarget = false; entry->isNonPow2 = false; @@ -633,8 +633,8 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat TCacheEntryBase *entry = textures[dstAddr]; if (entry) { - if ((entry->isRenderTarget && entry->virtualW == scaled_tex_w && entry->virtualH == scaled_tex_h) - || (entry->isDynamic && entry->realW == tex_w && entry->realH == tex_h)) + if ((entry->isRenderTarget && entry->virtual_width == scaled_tex_w && entry->virtual_height == scaled_tex_h) + || (entry->isDynamic && entry->native_width == tex_w && entry->native_height == tex_h)) { texture_is_dynamic = entry->isDynamic; } @@ -660,14 +660,14 @@ void TextureCache::CopyRenderTargetToTexture(u32 dstAddr, unsigned int dstFormat entry->addr = dstAddr; entry->hash = 0; - entry->realW = tex_w; - entry->realH = tex_h; + entry->native_width = tex_w; + entry->native_height = tex_h; - entry->virtualW = scaled_tex_w; - entry->virtualH = scaled_tex_h; + entry->virtual_width = scaled_tex_w; + entry->virtual_height = scaled_tex_h; entry->format = dstFormat; - entry->mipLevels = 0; + entry->num_mipmaps = 0; entry->isRenderTarget = true; entry->isNonPow2 = true; diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.h b/Source/Core/VideoCommon/Src/TextureCacheBase.h index 1c86e64006..f115b367b4 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.h +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.h @@ -16,29 +16,31 @@ class TextureCache public: struct TCacheEntryBase { - // TODO: organize + // common members u32 addr; u32 size_in_bytes; u64 hash; - //u32 paletteHash; - u32 oldpixel; + //u32 pal_hash; u32 format; - - int frameCount; - unsigned int realW, realH; // Texture dimensions from the GameCube's point of view - unsigned int virtualW, virtualH; // Texture dimensions from OUR point of view - // Real and virtual dimensions are usually the same, but may be - // different if e.g. we use high-res textures. Then, realW,realH will - // be the dimensions of the original GameCube texture and - // virtualW,virtualH will be the dimensions of the high-res texture. + //bool is_preloaded; - unsigned int mipLevels; + unsigned int num_mipmaps; + unsigned int native_width, native_height; // Texture dimensions from the GameCube's point of view + unsigned int virtual_width, virtual_height; // Texture dimensions from OUR point of view - for hires textures or scaled EFB copies + + // EFB copies bool isRenderTarget; // copied from EFB bool isDynamic; // Used for hybrid EFB copies to enable checks for CPU modifications + + // deprecated members + u32 oldpixel; + int frameCount; bool isNonPow2; // doesn't seem to be used anywhere + + //TCacheEntryBase() //{ // // TODO: remove these diff --git a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp index 39018c83bc..b1a5398d7d 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp @@ -107,7 +107,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo g_renderer->ResetAPIState(); // stretch picture with increased internal resolution - const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)virtualW, (float)virtualH); + const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)virtual_width, (float)virtual_height); D3D::context->RSSetViewports(1, &vp); // set transformation diff --git a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp index e1e40047e4..9087b6dac1 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp @@ -233,7 +233,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->realW, tentry->realH, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->native_width, tentry->native_height, 0, 0); } else ERROR_LOG(VIDEO, "error loading texture"); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp index 7c741e08a9..3f12678ca4 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp @@ -90,15 +90,15 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo // Stretch picture with increased internal resolution vp.X = 0; vp.Y = 0; - vp.Width = virtualW; - vp.Height = virtualH; + vp.Width = virtual_width; + vp.Height = virtual_height; vp.MinZ = 0.0f; vp.MaxZ = 1.0f; D3D::dev->SetViewport(&vp); RECT destrect; - destrect.bottom = virtualH; + destrect.bottom = virtual_height; destrect.left = 0; - destrect.right = virtualW; + destrect.right = virtual_width; destrect.top = 0; PixelShaderManager::SetColorMatrix(colmat); // set transformation @@ -133,7 +133,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo D3D::drawShadedTexQuad(read_texture, &sourcerect, Renderer::GetTargetWidth(), Renderer::GetTargetHeight(), - virtualW, virtualH, + virtual_width, virtual_height, // TODO: why is D3DFMT_D24X8 singled out here? why not D3DFMT_D24X4S4/D24S8/D24FS8/D32/D16/D15S1 too, or none of them? PixelShaderCache::GetDepthMatrixProgram(SSAAMode, (srcFormat == PIXELFMT_Z24) && bformat != FOURCC_RAWZ && bformat != D3DFMT_D24X8), VertexShaderCache::GetSimpleVertexShader(SSAAMode)); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index d9c33b67ef..c6bddb7468 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -142,7 +142,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->realW, tentry->realH, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->native_width, tentry->native_height, 0, 0); } else ERROR_LOG(VIDEO, "error loading texture"); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 4a9431a563..91cc48d7d9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -124,7 +124,7 @@ bool TextureCache::TCacheEntry::Save(const char filename[]) std::string tga_filename(filename); tga_filename.replace(tga_filename.size() - 3, 3, "tga"); - return SaveTexture(tga_filename.c_str(), GL_TEXTURE_2D, texture, realW, realH); + return SaveTexture(tga_filename.c_str(), GL_TEXTURE_2D, texture, virtual_width, virtual_height); } TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, @@ -294,7 +294,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo glEnable(GL_TEXTURE_RECTANGLE_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, read_texture); - glViewport(0, 0, virtualW, virtualH); + glViewport(0, 0, virtual_width, virtual_height); PixelShaderCache::SetCurrentShader((srcFormat == PIXELFMT_Z24) ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); PixelShaderManager::SetColorMatrix(colmat); // set transformation @@ -337,7 +337,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo { static int count = 0; SaveTexture(StringFromFormat("%sefb_frame_%i.tga", File::GetUserPath(D_DUMPTEXTURES_IDX).c_str(), - count++).c_str(), GL_TEXTURE_2D, texture, realW, realH); + count++).c_str(), GL_TEXTURE_2D, texture, virtual_width, virtual_height); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 5144c328d9..e3b55987ec 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -160,7 +160,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->realW, tentry->realH, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->native_width, tentry->native_height, 0, 0); if (g_ActiveConfig.iLog & CONF_SAVETEXTURES) {