diff --git a/Common/GPU/OpenGL/GLFeatures.cpp b/Common/GPU/OpenGL/GLFeatures.cpp index 6e15b3aa84..9808dbded1 100644 --- a/Common/GPU/OpenGL/GLFeatures.cpp +++ b/Common/GPU/OpenGL/GLFeatures.cpp @@ -283,6 +283,7 @@ void CheckGLExtensions() { gl_extensions.GLES3 = true; // Though, let's ban Mali from the GLES 3 path for now, see #4078 if (strstr(renderer, "Mali") != 0) { + INFO_LOG(G3D, "Forcing GLES3 off for Mali driver version: %s\n", versionStr ? versionStr : "N/A"); gl_extensions.GLES3 = false; } } else { @@ -349,8 +350,6 @@ void CheckGLExtensions() { && !(((strncmp(renderer, "ATI RADEON X", 12) == 0) || (strncmp(renderer, "ATI MOBILITY RADEON X", 21) == 0))); } - gl_extensions.ARB_blend_func_extended = g_set_gl_extensions.count("GL_ARB_blend_func_extended") != 0; - gl_extensions.EXT_blend_func_extended = g_set_gl_extensions.count("GL_EXT_blend_func_extended") != 0; gl_extensions.ARB_conservative_depth = g_set_gl_extensions.count("GL_ARB_conservative_depth") != 0; gl_extensions.ARB_shader_image_load_store = (g_set_gl_extensions.count("GL_ARB_shader_image_load_store") != 0) || (g_set_gl_extensions.count("GL_EXT_shader_image_load_store") != 0); gl_extensions.ARB_shading_language_420pack = (g_set_gl_extensions.count("GL_ARB_shading_language_420pack") != 0); @@ -373,6 +372,7 @@ void CheckGLExtensions() { gl_extensions.ARB_explicit_attrib_location = g_set_gl_extensions.count("GL_ARB_explicit_attrib_location") != 0; if (gl_extensions.IsGLES) { + gl_extensions.EXT_blend_func_extended = g_set_gl_extensions.count("GL_EXT_blend_func_extended") != 0; gl_extensions.OES_texture_npot = g_set_gl_extensions.count("GL_OES_texture_npot") != 0; gl_extensions.OES_packed_depth_stencil = (g_set_gl_extensions.count("GL_OES_packed_depth_stencil") != 0) || gl_extensions.GLES3; gl_extensions.OES_depth24 = g_set_gl_extensions.count("GL_OES_depth24") != 0; @@ -427,6 +427,8 @@ void CheckGLExtensions() { gl_extensions.EXT_discard_framebuffer = false; #endif } else { + gl_extensions.ARB_blend_func_extended = g_set_gl_extensions.count("GL_ARB_blend_func_extended") != 0; + // Desktops support minmax and subimage unpack (GL_UNPACK_ROW_LENGTH etc) gl_extensions.EXT_blend_minmax = true; gl_extensions.EXT_unpack_subimage = true; diff --git a/Common/GPU/OpenGL/GLQueueRunner.cpp b/Common/GPU/OpenGL/GLQueueRunner.cpp index b0c0e0e4ec..cf2450326e 100644 --- a/Common/GPU/OpenGL/GLQueueRunner.cpp +++ b/Common/GPU/OpenGL/GLQueueRunner.cpp @@ -203,6 +203,7 @@ void GLQueueRunner::RunInitSteps(const std::vector &steps, bool ski #if !defined(USING_GLES2) if (step.create_program.support_dual_source) { + _dbg_assert_msg_(gl_extensions.ARB_blend_func_extended, "ARB_blend_func_extended required for dual src"); // Dual source alpha glBindFragDataLocationIndexed(program->program, 0, 0, "fragColor0"); glBindFragDataLocationIndexed(program->program, 0, 1, "fragColor1"); @@ -210,7 +211,9 @@ void GLQueueRunner::RunInitSteps(const std::vector &steps, bool ski glBindFragDataLocation(program->program, 0, "fragColor0"); } #elif !PPSSPP_PLATFORM(IOS) - if (gl_extensions.EXT_blend_func_extended && step.create_program.support_dual_source) { + if (gl_extensions.GLES3 && step.create_program.support_dual_source) { + // For GLES2, we use gl_SecondaryFragColorEXT as fragColor1. + _dbg_assert_msg_(gl_extensions.EXT_blend_func_extended, "EXT_blend_func_extended required for dual src"); glBindFragDataLocationIndexedEXT(program->program, 0, 0, "fragColor0"); glBindFragDataLocationIndexedEXT(program->program, 0, 1, "fragColor1"); }