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(); diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index 86844b7afa..f388d2fb24 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -141,6 +141,8 @@ namespace vk case CELL_GCM_FUNC_ADD: return VK_BLEND_OP_ADD; case CELL_GCM_FUNC_SUBTRACT: return VK_BLEND_OP_SUBTRACT; case CELL_GCM_FUNC_REVERSE_SUBTRACT: return VK_BLEND_OP_REVERSE_SUBTRACT; + case CELL_GCM_MIN: return VK_BLEND_OP_MIN; + case CELL_GCM_MAX: return VK_BLEND_OP_MAX; default: throw EXCEPTION("Unknown blend op: 0x%X", op); }