diff --git a/Test/330.frag b/Test/330.frag index 364fc0aff8..cf22d7a4af 100644 --- a/Test/330.frag +++ b/Test/330.frag @@ -149,3 +149,7 @@ layout(location=6) uniform ColorsBuffer // ERROR: location cannot be applied in } colorsBuffer; +void testOverload() { + float overloadTest = 42; + overloadTest = smoothstep(0, 1, overloadTest); +} \ No newline at end of file diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out index e919b5b941..d95cd30758 100644 --- a/Test/baseResults/330.frag.out +++ b/Test/baseResults/330.frag.out @@ -83,6 +83,22 @@ ERROR: node is still EOpNull! 0:135 'KeyMem' ( global structure{ global int precise}) 0:135 Constant: 0:135 0 (const int) +0:152 Function Definition: testOverload( ( global void) +0:152 Function Parameters: +0:153 Sequence +0:153 Sequence +0:153 move second child to first child ( temp float) +0:153 'overloadTest' ( temp float) +0:153 Constant: +0:153 42.000000 +0:154 move second child to first child ( temp float) +0:154 'overloadTest' ( temp float) +0:154 smoothstep ( global float) +0:154 Constant: +0:154 0.000000 +0:154 Constant: +0:154 1.000000 +0:154 'overloadTest' ( temp float) 0:? Linker Objects 0:? 'inVar' ( smooth in 4-component vector of float) 0:? 'outVar' (layout( location=0 index=0) out 4-component vector of float) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index d7049d8d5c..52ec6115f8 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1733,12 +1733,14 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtUint64: case EbtFloat: case EbtDouble: - return true; + return version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64); case EbtInt16: case EbtUint16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return (version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64)) && + extensionRequested(E_GL_AMD_gpu_shader_int16); case EbtFloat16: - return extensionRequested(E_GL_AMD_gpu_shader_half_float); + return (version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64)) && + extensionRequested(E_GL_AMD_gpu_shader_half_float); default: return false; }