Fix GpuShader5 extension on Intel and support 'bitsTo' functions (#2118)

GpuShader5 extension isn't supported on fragment shaders.
Bumps the GLSL version to support the 'bitsTo' functions when present on the shader.
This commit is contained in:
kingscallop
2020-04-27 04:43:03 +01:00
committed by GitHub
parent cb113a95fb
commit eaab1be079
2 changed files with 20 additions and 3 deletions

View File

@@ -6135,7 +6135,12 @@ namespace bgfx { namespace gl
&& !bx::findIdentifierMatch(code, s_EXT_gpu_shader4).isEmpty() && !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 usesIUsamplers = !bx::findIdentifierMatch(code, s_uisamplers).isEmpty();
const bool usesUint = !bx::findIdentifierMatch(code, s_uint).isEmpty(); const bool usesUint = !bx::findIdentifierMatch(code, s_uint).isEmpty();
const bool usesTexelFetch = !bx::findIdentifierMatch(code, s_texelFetch).isEmpty(); const bool usesTexelFetch = !bx::findIdentifierMatch(code, s_texelFetch).isEmpty();

View File

@@ -1965,7 +1965,14 @@ namespace bgfx
const bx::StringView preprocessedInput(preprocessor.m_preprocessed.c_str() ); const bx::StringView preprocessedInput(preprocessor.m_preprocessed.c_str() );
if (!bx::strFind(preprocessedInput, "layout(std430").isEmpty() 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; glsl = 430;
} }
@@ -1976,9 +1983,14 @@ namespace bgfx
|| !bx::findIdentifierMatch(input, s_ARB_shader_texture_lod).isEmpty() || !bx::findIdentifierMatch(input, s_ARB_shader_texture_lod).isEmpty()
|| !bx::findIdentifierMatch(input, s_EXT_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 usesInstanceID = !bx::findIdentifierMatch(input, "gl_InstanceID").isEmpty();
const bool usesGpuShader4 = !bx::findIdentifierMatch(input, s_EXT_gpu_shader4).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 usesTexelFetch = !bx::findIdentifierMatch(input, s_texelFetch).isEmpty();
const bool usesTextureMS = !bx::findIdentifierMatch(input, s_ARB_texture_multisample).isEmpty(); const bool usesTextureMS = !bx::findIdentifierMatch(input, s_ARB_texture_multisample).isEmpty();
const bool usesTextureArray = !bx::findIdentifierMatch(input, s_textureArray).isEmpty(); const bool usesTextureArray = !bx::findIdentifierMatch(input, s_textureArray).isEmpty();