From a880ce89d1d170b1c5370d14315e59d5acadc12e Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sat, 5 Mar 2016 14:29:40 +0300 Subject: [PATCH] Checks for texture completeness, remove legacy GL_GENERATE_MIPMAP used wrongfully --- rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp index 45e3ebc2a8..c5e8b22ac2 100644 --- a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp +++ b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp @@ -411,7 +411,6 @@ namespace rsx } glTexParameteri(m_target, GL_TEXTURE_MAX_LEVEL, tex.mipmap() - 1); - glTexParameteri(m_target, GL_GENERATE_MIPMAP, tex.mipmap() > 1); if (format != CELL_GCM_TEXTURE_B8 && format != CELL_GCM_TEXTURE_X16 && format != CELL_GCM_TEXTURE_X32_FLOAT) { @@ -444,7 +443,23 @@ namespace rsx glTexParameteri(m_target, GL_TEXTURE_MIN_LOD, (tex.min_lod() >> 8)); glTexParameteri(m_target, GL_TEXTURE_MAX_LOD, (tex.max_lod() >> 8)); - glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, gl_tex_min_filter[tex.min_filter()]); + int min_filter = gl_tex_min_filter[tex.min_filter()]; + + if (min_filter != GL_LINEAR && min_filter != GL_NEAREST) + { + if (tex.mipmap() <= 1 || m_target == GL_TEXTURE_RECTANGLE) + { + LOG_WARNING(RSX, "Texture %d, target 0x%X, requesting mipmap filtering without any mipmaps set!", m_id, m_target); + min_filter = GL_LINEAR; + } + else + { + //TODO: Check if the call succeeded + glGenerateMipmap(m_target); + } + } + + glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, min_filter); glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, gl_tex_mag_filter[tex.mag_filter()]); glTexParameterf(m_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_aniso(tex.max_aniso())); }