diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 9be791b0d..4f0f66eae 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -6135,7 +6135,12 @@ namespace bgfx { namespace gl && !bx::findIdentifierMatch(code, s_EXT_gpu_shader4).isEmpty() ; - const bool usesGpuShader5 = !bx::findIdentifierMatch(code, s_ARB_gpu_shader5).isEmpty(); + // GpuShader5 extension is not supported on the fragment shader! + const bool usesGpuShader5 = true + && m_type != GL_FRAGMENT_SHADER + && !bx::findIdentifierMatch(code, s_ARB_gpu_shader5).isEmpty() + ; + const bool usesIUsamplers = !bx::findIdentifierMatch(code, s_uisamplers).isEmpty(); const bool usesUint = !bx::findIdentifierMatch(code, s_uint).isEmpty(); const bool usesTexelFetch = !bx::findIdentifierMatch(code, s_texelFetch).isEmpty(); diff --git a/tools/shaderc/shaderc.cpp b/tools/shaderc/shaderc.cpp index f1de75819..7db507016 100644 --- a/tools/shaderc/shaderc.cpp +++ b/tools/shaderc/shaderc.cpp @@ -1965,7 +1965,14 @@ namespace bgfx const bx::StringView preprocessedInput(preprocessor.m_preprocessed.c_str() ); if (!bx::strFind(preprocessedInput, "layout(std430").isEmpty() - || !bx::strFind(preprocessedInput, "image2D").isEmpty() ) + || !bx::strFind(preprocessedInput, "image2D").isEmpty() + || (_options.shaderType == 'f' + && (!bx::strFind(preprocessedInput, "floatBitsToUint").isEmpty() || + !bx::strFind(preprocessedInput, "floatBitsToInt").isEmpty() || + !bx::strFind(preprocessedInput, "intBitsToFloat").isEmpty() || + !bx::strFind(preprocessedInput, "uintBitsToFloat").isEmpty() + ) ) + ) { glsl = 430; } @@ -1976,9 +1983,14 @@ namespace bgfx || !bx::findIdentifierMatch(input, s_ARB_shader_texture_lod).isEmpty() || !bx::findIdentifierMatch(input, s_EXT_shader_texture_lod).isEmpty() ; + + const bool usesGpuShader5 = true + && _options.shaderType != 'f' + && !bx::findIdentifierMatch(input, s_ARB_gpu_shader5).isEmpty() + ; + const bool usesInstanceID = !bx::findIdentifierMatch(input, "gl_InstanceID").isEmpty(); const bool usesGpuShader4 = !bx::findIdentifierMatch(input, s_EXT_gpu_shader4).isEmpty(); - const bool usesGpuShader5 = !bx::findIdentifierMatch(input, s_ARB_gpu_shader5).isEmpty(); const bool usesTexelFetch = !bx::findIdentifierMatch(input, s_texelFetch).isEmpty(); const bool usesTextureMS = !bx::findIdentifierMatch(input, s_ARB_texture_multisample).isEmpty(); const bool usesTextureArray = !bx::findIdentifierMatch(input, s_textureArray).isEmpty();