diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index cac646b5d..6261a4710 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -345,8 +345,11 @@ private:
     /// Generates code representing a bool uniform
     std::string GetUniformBool(u32 index) const {
         if (is_gs && index == 15) {
-            // The uniform b15 is set to true after every geometry shader invocation.
-            return "((gl_PrimitiveIDIn == 0) || uniforms.b[15])";
+            // In PICA geometry shader, b15 is set to true after every geometry shader invocation.
+            // Accessing b15 usually indicates that the program relies on register value
+            // preservation across invocation (and therefore it uses b15 to determine whether to
+            // initialize the registers), which cannot be implemented in GL shaders.
+            throw DecompileFail("b15 access in geometry shader");
         }
         return "uniforms.b[" + std::to_string(index) + "]";
     }
@@ -918,7 +921,7 @@ boost::optional<std::string> DecompileProgram(const ProgramCode& program_code,
                                 inputreg_getter, outputreg_getter, sanitize_mul, is_gs);
         return generator.MoveShaderCode();
     } catch (const DecompileFail& exception) {
-        LOG_ERROR(HW_GPU, "Shader decompilation failed: %s", exception.what());
+        LOG_INFO(HW_GPU, "Shader decompilation failed: %s", exception.what());
         return boost::none;
     }
 }