From d9dbb1565a49672a2b72478a3ead9935d628031e Mon Sep 17 00:00:00 2001 From: kd-11 Date: Fri, 11 Mar 2016 22:25:49 +0300 Subject: [PATCH] Immutable textures cannot be reused! --- rpcs3/Emu/RSX/GL/gl_texture_cache.h | 4 ++++ rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp | 8 +++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/gl_texture_cache.h b/rpcs3/Emu/RSX/GL/gl_texture_cache.h index 442d85a8a4..94c267a8fc 100644 --- a/rpcs3/Emu/RSX/GL/gl_texture_cache.h +++ b/rpcs3/Emu/RSX/GL/gl_texture_cache.h @@ -483,6 +483,8 @@ namespace gl } else { + u32 real_id = gl_texture.id(); + if (!obj) gl_texture.set_id(0); else { @@ -499,6 +501,8 @@ namespace gl _obj.block_sz = (u32)get_texture_size(tex); lock_gl_object(_obj); + + gl_texture.set_id(real_id); } } diff --git a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp index 7f2f599562..e82f6b7376 100644 --- a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp +++ b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp @@ -265,11 +265,9 @@ namespace rsx { const u32 texaddr = rsx::get_address(tex.offset(), tex.location()); - //TODO: safe init - if (!m_id) - { - create(); - } + //We can't re-use texture handles if using immutable storage + if (m_id) remove(); + create(); glActiveTexture(GL_TEXTURE0 + index); bind();