From e7d5b274c02a02339bd2a5e3260b70867fed26b6 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 19 Jan 2013 00:47:48 +0100 Subject: [PATCH] add stage parameter for texture load, so ogl can bind to the correct sampler --- Source/Core/VideoCommon/Src/TextureCacheBase.cpp | 6 +++--- Source/Core/VideoCommon/Src/TextureCacheBase.h | 2 +- Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp | 2 +- Source/Plugins/Plugin_VideoDX11/Src/TextureCache.h | 2 +- Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp | 2 +- Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h | 2 +- Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp | 4 +++- Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h | 2 +- Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp | 1 - 9 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index 9fc18ef1bd..c2f1466be7 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -446,7 +446,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, else entry->type = TCET_NORMAL; // load texture - entry->Load(width, height, expandedWidth, 0, (texLevels == 0)); + entry->Load(stage, width, height, expandedWidth, 0, (texLevels == 0)); if (g_ActiveConfig.bDumpTextures && !using_custom_texture) DumpTexture(entry, 0); @@ -481,7 +481,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, expandedHeight = (currentHeight + bsh) & (~bsh); TexDecoder_Decode(temp, *ptr, expandedWidth, expandedHeight, texformat, tlutaddr, tlutfmt, g_ActiveConfig.backend_info.bUseRGBATextures); - entry->Load(currentWidth, currentHeight, expandedWidth, level, false); + entry->Load(stage, currentWidth, currentHeight, expandedWidth, level, false); if (g_ActiveConfig.bDumpTextures) DumpTexture(entry, level); @@ -504,7 +504,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int stage, unsigned int currentHeight = (mipHeight > 0) ? mipHeight : 1; LoadCustomTexture(tex_hash, texformat, level, currentWidth, currentHeight); - entry->Load(currentWidth, currentHeight, currentWidth, level, false); + entry->Load(stage, currentWidth, currentHeight, currentWidth, level, false); mipWidth >>= 1; mipHeight >>= 1; diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.h b/Source/Core/VideoCommon/Src/TextureCacheBase.h index 4ef3b8a985..c03d6208a2 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.h +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.h @@ -88,7 +88,7 @@ public: virtual void Bind(unsigned int stage) = 0; virtual bool Save(const char filename[], unsigned int level) = 0; - virtual void Load(unsigned int width, unsigned int height, + virtual void Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int level, bool autogen_mips) = 0; virtual void FromRenderTarget(u32 dstAddr, unsigned int dstFormat, unsigned int srcFormat, const EFBRectangle& srcRect, diff --git a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp index 5f82a18fc0..21aeda00b1 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.cpp @@ -58,7 +58,7 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level) return SUCCEEDED(PD3DX11SaveTextureToFileA(D3D::context, texture->GetTex(), D3DX11_IFF_PNG, filename)); } -void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, +void TextureCache::TCacheEntry::Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int level, bool autogen_mips) { D3D::ReplaceRGBATexture2D(texture->GetTex(), TextureCache::temp, width, height, expanded_width, level, usage); diff --git a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.h b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.h index 59d343017c..497312f5ec 100644 --- a/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.h +++ b/Source/Plugins/Plugin_VideoDX11/Src/TextureCache.h @@ -40,7 +40,7 @@ private: TCacheEntry(D3DTexture2D *_tex) : texture(_tex) {} ~TCacheEntry(); - void Load(unsigned int width, unsigned int height, + void Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int levels, bool autogen_mips = false); void FromRenderTarget(u32 dstAddr, unsigned int dstFormat, diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp index 2be29048d3..0d40cc58e8 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp @@ -71,7 +71,7 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level) return SUCCEEDED(hr); } -void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, +void TextureCache::TCacheEntry::Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int level, bool autogen_mips) { D3D::ReplaceTexture2D(texture, temp, width, height, expanded_width, d3d_fmt, swap_r_b, level); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h index 4a7cddd575..732aee1af9 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.h @@ -43,7 +43,7 @@ private: TCacheEntry(LPDIRECT3DTEXTURE9 _tex) : texture(_tex) {} ~TCacheEntry(); - void Load(unsigned int width, unsigned int height, + void Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int levels, bool autogen_mips = false); void FromRenderTarget(u32 dstAddr, unsigned int dstFormat, diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp index 5b372a106f..994492a80a 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.cpp @@ -132,6 +132,7 @@ TextureCache::TCacheEntry::TCacheEntry() void TextureCache::TCacheEntry::Bind(unsigned int stage) { + glActiveTexture(GL_TEXTURE0 + stage); glBindTexture(GL_TEXTURE_2D, texture); GL_REPORT_ERRORD(); @@ -222,9 +223,10 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, return &entry; } -void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height, +void TextureCache::TCacheEntry::Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int level, bool autogen_mips) { + glActiveTexture(GL_TEXTURE0 + stage); glBindTexture(GL_TEXTURE_2D, texture); //GL_REPORT_ERRORD(); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h index 4d14c61698..726b3ce0a7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureCache.h @@ -55,7 +55,7 @@ private: TCacheEntry(); ~TCacheEntry(); - void Load(unsigned int width, unsigned int height, + void Load(unsigned int stage, unsigned int width, unsigned int height, unsigned int expanded_width, unsigned int level, bool autogen_mips = false); void FromRenderTarget(u32 dstAddr, unsigned int dstFormat, diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp index 04889dfadf..5c0c164a42 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp @@ -276,7 +276,6 @@ void VertexManager::vFlush() { if (usedtextures & (1 << i)) { - glActiveTexture(GL_TEXTURE0 + i); FourTexUnits &tex = bpmem.tex[i >> 2]; TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i, (tex.texImage3[i&3].image_base/* & 0x1FFFFF*/) << 5,