From 534b06d3ff4895d3291c1fb9d8bb7af8ce1c6a1e Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 8 Mar 2015 18:36:05 -0700 Subject: [PATCH] Correct clearing of texture cache on oom. --- GPU/GLES/TextureCache.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/GPU/GLES/TextureCache.cpp b/GPU/GLES/TextureCache.cpp index 083380a60f..da0ce94d21 100644 --- a/GPU/GLES/TextureCache.cpp +++ b/GPU/GLES/TextureCache.cpp @@ -2023,12 +2023,16 @@ void TextureCache::LoadTextureLevel(TexCacheEntry &entry, int level, bool replac glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, w, h, components2, dstFmt, pixelData); } else { glTexImage2D(GL_TEXTURE_2D, level, components, w, h, 0, components2, dstFmt, pixelData); - GLenum err = glGetError(); - if (err == GL_OUT_OF_MEMORY) { - lowMemoryMode_ = true; - Decimate(); - // Try again. - glTexImage2D(GL_TEXTURE_2D, level, components, w, h, 0, components2, dstFmt, pixelData); + if (!lowMemoryMode_) { + GLenum err = glGetError(); + if (err == GL_OUT_OF_MEMORY) { + WARN_LOG_REPORT(G3D, "Texture cache ran out of GPU memory; switching to low memory mode"); + lowMemoryMode_ = true; + decimationCounter_ = 0; + Decimate(); + // Try again, now that we've cleared out textures in lowMemoryMode_. + glTexImage2D(GL_TEXTURE_2D, level, components, w, h, 0, components2, dstFmt, pixelData); + } } }