diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index d2980b0680..4ae678c66a 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -263,8 +263,8 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, // TODO: Is the mipLevels check needed? if (!entry->isRenderTarget && - ((!entry->isDynamic && width == entry->w && height == entry->h && full_format == entry->format && entry->mipLevels == maxlevel) - || (entry->isDynamic && entry->w == width && entry->h == height))) + ((!entry->isDynamic && width == entry->realW && height == entry->realH && full_format == entry->format && entry->mipLevels == maxlevel) + || (entry->isDynamic && entry->realW == width && entry->realH == height))) { // reuse the texture } @@ -319,11 +319,11 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, entry->mipLevels = maxlevel; entry->size_in_bytes = texture_size; - entry->scaledW = entry->w = width; - entry->scaledH = entry->h = height; + entry->virtualW = width; + entry->virtualH = height; - entry->nativeH = nativeH; - entry->nativeW = nativeW; + entry->realW = nativeW; + entry->realH = nativeH; entry->isRenderTarget = false; entry->isNonPow2 = false; @@ -608,8 +608,8 @@ void TextureCache::CopyRenderTargetToTexture(u32 address, bool bFromZBuffer, TCacheEntryBase *entry = textures[address]; if (entry) { - if ((entry->isRenderTarget && entry->scaledW == scaled_tex_w && entry->scaledH == scaled_tex_h) - || (entry->isDynamic && entry->w == tex_w && entry->h == tex_h)) + if ((entry->isRenderTarget && entry->virtualW == scaled_tex_w && entry->virtualH == scaled_tex_h) + || (entry->isDynamic && entry->realW == tex_w && entry->realH == tex_h)) { texture_is_dynamic = entry->isDynamic; } @@ -635,11 +635,11 @@ void TextureCache::CopyRenderTargetToTexture(u32 address, bool bFromZBuffer, entry->addr = address; entry->hash = 0; - entry->w = entry->nativeW = tex_w; - entry->h = entry->nativeH = tex_h; + entry->realW = tex_w; + entry->realH = tex_h; - entry->scaledW = scaled_tex_w; - entry->scaledH = scaled_tex_h; + entry->virtualW = scaled_tex_w; + entry->virtualH = scaled_tex_h; entry->format = copyfmt; entry->mipLevels = 0; diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.h b/Source/Core/VideoCommon/Src/TextureCacheBase.h index 3db40c7164..0793f8dd19 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.h +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.h @@ -24,9 +24,15 @@ public: u32 format; int frameCount; - unsigned int w, h, mipLevels; - // TODO: it looks like scaledW/H can be removed and w/h can be used in their place - unsigned int scaledW, scaledH, nativeW, nativeH; + + 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. + + unsigned int mipLevels; bool isRenderTarget; bool isDynamic; // mofified from cpu diff --git a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp index 86a27a44e6..d23de1324f 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp @@ -121,7 +121,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(bool bFromZBuffer, bool bScaleB bool bIsIntensityFmt, u32 copyfmt) { // stretch picture with increased internal resolution - const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)scaledW, (float)scaledH); + const D3D11_VIEWPORT vp = CD3D11_VIEWPORT(0.f, 0.f, (float)virtualW, (float)virtualH); 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 9cc3c61d12..d54e04f525 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/VertexManager.cpp @@ -225,7 +225,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->nativeW, tentry->nativeH, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->realW, tentry->realH, 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 08a2a6270e..3b5133def7 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp @@ -89,15 +89,15 @@ void TextureCache::TCacheEntry::FromRenderTarget(bool bFromZBuffer, bool bScaleB // Stretch picture with increased internal resolution vp.X = 0; vp.Y = 0; - vp.Width = scaledW; - vp.Height = scaledH; + vp.Width = virtualW; + vp.Height = virtualH; vp.MinZ = 0.0f; vp.MaxZ = 1.0f; D3D::dev->SetViewport(&vp); RECT destrect; - destrect.bottom = scaledH; + destrect.bottom = virtualH; destrect.left = 0; - destrect.right = scaledW; + destrect.right = virtualW; destrect.top = 0; const float* const fConstAdd = colmat + 16; // fConstAdd is the last 4 floats of colmat @@ -133,7 +133,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(bool bFromZBuffer, bool bScaleB D3D::drawShadedTexQuad(read_texture, &sourcerect, Renderer::GetFullTargetWidth(), Renderer::GetFullTargetHeight(), - scaledW, scaledH, + virtualW, virtualH, ((bformat != FOURCC_RAWZ && bformat != D3DFMT_D24X8) && bFromZBuffer) ? PixelShaderCache::GetDepthMatrixProgram(SSAAMode) : PixelShaderCache::GetColorMatrixProgram(SSAAMode), diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 6cd91e58f0..3153e84d5c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -144,7 +144,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->nativeW, tentry->nativeH, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->realW, tentry->realH, 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 a5b3190f3d..39cfe41144 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -125,7 +125,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, w, h); + return SaveTexture(tga_filename.c_str(), GL_TEXTURE_2D, texture, realW, realH); } TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, @@ -298,7 +298,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(bool bFromZBuffer, bool bScaleB glEnable(GL_TEXTURE_RECTANGLE_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, read_texture); - glViewport(0, 0, scaledW, scaledH); + glViewport(0, 0, virtualW, virtualH); PixelShaderCache::SetCurrentShader(bFromZBuffer ? PixelShaderCache::GetDepthMatrixProgram() : PixelShaderCache::GetColorMatrixProgram()); const float* const fConstAdd = colmat + 16; // fConstAdd is the last 4 floats of colmat @@ -344,7 +344,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(bool bFromZBuffer, bool bScaleB { static int count = 0; SaveTexture(StringFromFormat("%sefb_frame_%i.tga", File::GetUserPath(D_DUMPTEXTURES_IDX), - count++).c_str(), GL_TEXTURE_2D, texture, w, h); + count++).c_str(), GL_TEXTURE_2D, texture, realW, realH); } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index bf2b632b91..de6382b213 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -165,7 +165,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->nativeW, tentry->nativeH, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->realW, tentry->realH, 0, 0); if (g_ActiveConfig.iLog & CONF_SAVETEXTURES) {