diff --git a/Source/Core/VideoCommon/Src/HiresTextures.cpp b/Source/Core/VideoCommon/Src/HiresTextures.cpp index 516bf44492..4cdf78f055 100644 --- a/Source/Core/VideoCommon/Src/HiresTextures.cpp +++ b/Source/Core/VideoCommon/Src/HiresTextures.cpp @@ -115,9 +115,9 @@ PC_TexFormat GetHiresTex(const char *fileName, int *pWidth, int *pHeight, int te return PC_TEX_FMT_NONE; } - if (width > 1024 || height > 1024) + if (width > 2048 || height > 2048) { - ERROR_LOG(VIDEO, "Custom texture %s is too large (%ix%i); textures can only be 1024 pixels tall and wide", textureMap[key].c_str(), width, height); + ERROR_LOG(VIDEO, "Custom texture %s is too large (%ix%i); textures can only be 2048 pixels tall and wide", textureMap[key].c_str(), width, height); SOIL_free_image_data(temp); return PC_TEX_FMT_NONE; } diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp index f4b4b09fc1..650b060df5 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp @@ -48,7 +48,7 @@ TextureCache::TexCache TextureCache::textures; extern int frameCount; -#define TEMP_SIZE (1024*1024*4) +#define TEMP_SIZE (2048*2048*4) #define TEXTURE_KILL_THRESHOLD 200 void TextureCache::TCacheEntry::Destroy(bool shutdown) @@ -283,6 +283,8 @@ TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width, // Make an entry in the table TCacheEntry& entry = textures[texID]; entry.isDynamic = TextureisDynamic; + entry.Realw = width; + entry.Realh = height; PC_TexFormat pcfmt = PC_TEX_FMT_NONE; if (g_ActiveConfig.bHiresTextures) @@ -299,6 +301,8 @@ TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width, { expandedWidth = width; expandedHeight = height; + entry.Realw = oldWidth; + entry.Realh = oldHeight; } } @@ -390,8 +394,6 @@ TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width, entry.frameCount = frameCount; entry.w = width; entry.h = height; - entry.Scaledw = width; - entry.Scaledh = height; entry.fmt = FullFormat; if (g_ActiveConfig.bDumpTextures) @@ -475,8 +477,8 @@ void TextureCache::CopyRenderTargetToTexture(u32 address, bool bFromZBuffer, boo entry.isRenderTarget = true; entry.hash = 0; entry.frameCount = frameCount; - entry.w = tex_w; - entry.h = tex_h; + entry.w = entry.Realw = tex_w; + entry.h = entry.Realh = tex_h; entry.Scaledw = Scaledtex_w; entry.Scaledh = Scaledtex_h; entry.fmt = copyfmt; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h index a5edb61f27..3a6ebe6b0d 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h @@ -39,8 +39,7 @@ public: u32 oldpixel; int frameCount; - int w, h, fmt,MipLevels; - int Scaledw, Scaledh; + int w, h, fmt,MipLevels, Realw, Realh, Scaledw, Scaledh; bool isRenderTarget; bool isDynamic;// mofified from cpu @@ -59,6 +58,8 @@ public: isNonPow2 = true; w = 0; h = 0; + Realw = 0; + Realh = 0; Scaledw = 0; Scaledh = 0; } diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 882a776a49..881aa6a9db 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->w, tentry->h, 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 2902c42403..19e61b45ef 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -59,7 +59,7 @@ TextureCache::TexCache TextureCache::textures; extern int frameCount; static u32 s_TempFramebuffer = 0; -#define TEMP_SIZE (1024*1024*4) +#define TEMP_SIZE (2048*2048*4) #define TEXTURE_KILL_THRESHOLD 200 static const GLint c_MinLinearFilter[8] = { @@ -373,6 +373,8 @@ TextureCache::TCacheEntry* TextureCache::Load(int texstage, u32 address, int wid TCacheEntry& entry = textures[texID]; entry.isDynamic = TextureisDynamic; entry.isRenderTarget = false; + entry.Realw = width; + entry.Realh = height; PC_TexFormat pcfmt = PC_TEX_FMT_NONE; if (g_ActiveConfig.bHiresTextures) @@ -380,6 +382,9 @@ TextureCache::TCacheEntry* TextureCache::Load(int texstage, u32 address, int wid // Load Custom textures char texPathTemp[MAX_PATH]; + int oldWidth = width; + int oldHeight = height; + sprintf(texPathTemp, "%s_%08x_%i", globals->unique_id, (unsigned int) texHash, tex_format); pcfmt = HiresTextures::GetHiresTex(texPathTemp, &width, &height, tex_format, temp); @@ -387,6 +392,8 @@ TextureCache::TCacheEntry* TextureCache::Load(int texstage, u32 address, int wid { expandedWidth = width; expandedHeight = height; + entry.Realw = oldWidth; + entry.Realh = oldHeight; } } @@ -768,8 +775,8 @@ void TextureCache::CopyRenderTargetToTexture(u32 address, bool bFromZBuffer, boo } entry.addr = address; - entry.w = w; - entry.h = h; + entry.w = entry.Realw = w; + entry.h = entry.Realh = h; entry.Scaledw = Scaledtex_w; entry.Scaledh = Scaledtex_h; entry.fmt = copyfmt; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h index 8a9987071f..46cda618c2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h @@ -44,7 +44,7 @@ public: TexMode1 mode1; // current filter and clamp modes that texture is set to int frameCount; - int w, h, fmt,MipLevels; + int w, h, fmt,MipLevels, Realw, Realh; int Scaledw, Scaledh; bool isRenderTarget; // if render texture, then rendertex is filled with the direct copy of the render target diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 80906d4a6d..36d9886524 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -163,7 +163,7 @@ void VertexManager::vFlush() if (tentry) { // 0s are probably for no manual wrapping needed. - PixelShaderManager::SetTexDims(i, tentry->w, tentry->h, 0, 0); + PixelShaderManager::SetTexDims(i, tentry->Realw, tentry->Realh, 0, 0); if (g_ActiveConfig.iLog & CONF_SAVETEXTURES) {