summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/Src/TextureCacheBase.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/TextureCacheBase.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
index a3d6c62740..ba54adbac5 100644
--- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
+++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
@@ -119,8 +119,12 @@ void TextureCache::InvalidateRange(u32 start_address, u32 size)
void TextureCache::MakeRangeDynamic(u32 start_address, u32 size)
{
TexCache::iterator
- iter = textures.begin(),
- tcend = textures.end();
+ iter = textures.lower_bound(start_address),
+ tcend = textures.upper_bound(start_address + size);
+
+ if (iter != textures.begin())
+ iter--;
+
for (; iter != tcend; ++iter)
{
const int rangePosition = iter->second->IntersectsMemoryRange(start_address, size);
@@ -131,6 +135,18 @@ void TextureCache::MakeRangeDynamic(u32 start_address, u32 size)
}
}
+bool TextureCache::Find(u32 start_address, u64 hash)
+{
+ TexCache::iterator
+ iter = textures.lower_bound(start_address),
+ tcend = textures.upper_bound(start_address);
+
+ if (iter->second->hash == hash)
+ return true;
+
+ return false;
+}
+
int TextureCache::TCacheEntryBase::IntersectsMemoryRange(u32 range_address, u32 range_size) const
{
if (addr + size_in_bytes < range_address)