(view as text)
diff --git a/Source/Core/VideoBackends/D3D/TextureCache.cpp b/Source/Core/VideoBackends/D3D/TextureCache.cpp
index 27bee72..26ef1d4 100644
--- a/Source/Core/VideoBackends/D3D/TextureCache.cpp
+++ b/Source/Core/VideoBackends/D3D/TextureCache.cpp
@@ -74,13 +74,13 @@ bool TextureCache::TCacheEntry::Save(const std::string filename, unsigned int le
return saved_png;
}
-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)
{
D3D::ReplaceRGBATexture2D(texture->GetTex(), TextureCache::temp, width, height, expanded_width, level, usage);
}
-TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
+TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int stage, unsigned int width,
unsigned int height, unsigned int expanded_width,
unsigned int tex_levels, PC_TexFormat pcfmt)
{
@@ -116,7 +116,7 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
SAFE_RELEASE(pTexture);
if (tex_levels != 1)
- entry->Load(width, height, expanded_width, 0);
+ entry->Load(stage, width, height, expanded_width, 0);
return entry;
}
diff --git a/Source/Core/VideoBackends/D3D/TextureCache.h b/Source/Core/VideoBackends/D3D/TextureCache.h
index 91603bc..b566663 100644
--- a/Source/Core/VideoBackends/D3D/TextureCache.h
+++ b/Source/Core/VideoBackends/D3D/TextureCache.h
@@ -27,7 +27,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);
void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,
@@ -39,7 +39,7 @@ private:
bool Save(const std::string filename, unsigned int level);
};
- TCacheEntryBase* CreateTexture(unsigned int width, unsigned int height,
+ TCacheEntryBase* CreateTexture(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int tex_levels, PC_TexFormat pcfmt);
TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h);
diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp
index e2b5e0d..b53ad91 100644
--- a/Source/Core/VideoBackends/OGL/TextureCache.cpp
+++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp
@@ -52,7 +52,6 @@ static u32 s_DepthCbufid;
static u32 s_Textures[8];
static u32 s_ActiveTexture;
-static u32 s_NextStage;
bool SaveTexture(const std::string filename, u32 textarget, u32 tex, int virtual_width, int virtual_height, unsigned int level)
{
@@ -125,7 +124,7 @@ bool TextureCache::TCacheEntry::Save(const std::string filename, unsigned int le
return SaveTexture(filename, GL_TEXTURE_2D, texture, virtual_width, virtual_height, level);
}
-TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
+TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int stage, unsigned int width,
unsigned int height, unsigned int expanded_width,
unsigned int tex_levels, PC_TexFormat pcfmt)
{
@@ -190,24 +189,24 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
entry.m_tex_levels = tex_levels;
- entry.Load(width, height, expanded_width, 0);
+ entry.Load(stage, width, height, expanded_width, 0);
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)
{
- if (s_ActiveTexture != s_NextStage)
+ if (s_ActiveTexture != stage)
{
- glActiveTexture(GL_TEXTURE0 + s_NextStage);
- s_ActiveTexture = s_NextStage;
+ glActiveTexture(GL_TEXTURE0 + stage);
+ s_ActiveTexture = stage;
}
- if (s_Textures[s_NextStage] != texture)
+ if (s_Textures[stage] != texture)
{
glBindTexture(GL_TEXTURE_2D, texture);
- s_Textures[s_NextStage] = texture;
+ s_Textures[stage] = texture;
}
// TODO: sloppy, just do this on creation?
@@ -400,7 +399,6 @@ TextureCache::TextureCache()
s_DepthCopyPositionUniform = glGetUniformLocation(s_DepthMatrixProgram.glprogid, "copy_position");
s_ActiveTexture = -1;
- s_NextStage = -1;
for(auto& gtex : s_Textures)
gtex = -1;
}
@@ -423,11 +421,5 @@ void TextureCache::SetStage ()
glActiveTexture(GL_TEXTURE0 + s_ActiveTexture);
}
-void TextureCache::SetNextStage ( unsigned int stage )
-{
- s_NextStage = stage;
-}
-
-
}
diff --git a/Source/Core/VideoBackends/OGL/TextureCache.h b/Source/Core/VideoBackends/OGL/TextureCache.h
index af1b60b..5465642 100644
--- a/Source/Core/VideoBackends/OGL/TextureCache.h
+++ b/Source/Core/VideoBackends/OGL/TextureCache.h
@@ -22,7 +22,6 @@ public:
TextureCache();
static void DisableStage(unsigned int stage);
static void SetStage();
- static void SetNextStage(unsigned int stage);
private:
struct TCacheEntry : TCacheEntryBase
@@ -44,7 +43,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) override;
void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,
@@ -58,7 +57,7 @@ private:
~TextureCache();
- TCacheEntryBase* CreateTexture(unsigned int width, unsigned int height,
+ TCacheEntryBase* CreateTexture(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int tex_levels, PC_TexFormat pcfmt) override;
TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h) override;
diff --git a/Source/Core/VideoBackends/OGL/VertexManager.cpp b/Source/Core/VideoBackends/OGL/VertexManager.cpp
index 4978458..c9d6935 100644
--- a/Source/Core/VideoBackends/OGL/VertexManager.cpp
+++ b/Source/Core/VideoBackends/OGL/VertexManager.cpp
@@ -180,7 +180,6 @@ void VertexManager::vFlush()
{
if (usedtextures & (1 << i))
{
- TextureCache::SetNextStage(i);
g_renderer->SetSamplerState(i % 4, i / 4);
FourTexUnits &tex = bpmem.tex[i >> 2];
TextureCache::TCacheEntryBase* tentry = TextureCache::Load(i,
diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp
index a3224bc..a53a050 100644
--- a/Source/Core/VideoCommon/TextureCacheBase.cpp
+++ b/Source/Core/VideoCommon/TextureCacheBase.cpp
@@ -487,7 +487,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
// create the entry/texture
if (NULL == entry)
{
- textures[texID] = entry = g_texture_cache->CreateTexture(width, height, expandedWidth, texLevels, pcfmt);
+ textures[texID] = entry = g_texture_cache->CreateTexture(stage, width, height, expandedWidth, texLevels, pcfmt);
// Sometimes, we can get around recreating a texture if only the number of mip levels 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
@@ -504,7 +504,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
else
{
// load texture (CreateTexture also loads level 0)
- entry->Load(width, height, expandedWidth, 0);
+ entry->Load(stage, width, height, expandedWidth, 0);
}
entry->SetGeneralParameters(address, texture_size, full_format, entry->num_mipmaps);
@@ -548,7 +548,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
TexDecoder_Decode(temp, mip_src_data, expanded_mip_width, expanded_mip_height, texformat, tlutaddr, tlutfmt, g_ActiveConfig.backend_info.bUseRGBATextures);
mip_src_data += TexDecoder_GetTextureSizeInBytes(expanded_mip_width, expanded_mip_height, texformat);
- entry->Load(mip_width, mip_height, expanded_mip_width, level);
+ entry->Load(stage, mip_width, mip_height, expanded_mip_width, level);
if (g_ActiveConfig.bDumpTextures)
DumpTexture(entry, level);
@@ -562,7 +562,7 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
unsigned int mip_height = CalculateLevelSize(height, level);
LoadCustomTexture(tex_hash, texformat, level, mip_width, mip_height);
- entry->Load(mip_width, mip_height, mip_width, level);
+ entry->Load(stage, mip_width, mip_height, mip_width, level);
}
}
}
diff --git a/Source/Core/VideoCommon/TextureCacheBase.h b/Source/Core/VideoCommon/TextureCacheBase.h
index 4db768f..cea7fb7 100644
--- a/Source/Core/VideoCommon/TextureCacheBase.h
+++ b/Source/Core/VideoCommon/TextureCacheBase.h
@@ -75,7 +75,7 @@ public:
virtual void Bind(unsigned int stage) = 0;
virtual bool Save(const std::string filename, unsigned int level) = 0;
- virtual void Load(unsigned int width, unsigned int height,
+ virtual void Load(unsigned int const stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int level) = 0;
virtual void FromRenderTarget(u32 dstAddr, unsigned int dstFormat,
unsigned int srcFormat, const EFBRectangle& srcRect,
@@ -98,7 +98,7 @@ public:
static void ClearRenderTargets(); // currently only used by OGL
static bool Find(u32 start_address, u64 hash);
- virtual TCacheEntryBase* CreateTexture(unsigned int width, unsigned int height,
+ virtual TCacheEntryBase* CreateTexture(unsigned int stage, unsigned int width, unsigned int height,
unsigned int expanded_width, unsigned int tex_levels, PC_TexFormat pcfmt) = 0;
virtual TCacheEntryBase* CreateRenderTargetTexture(unsigned int scaled_tex_w, unsigned int scaled_tex_h) = 0;