From 0ab78114a9e1b28a48cd37252ec59fdcf85e187d Mon Sep 17 00:00:00 2001 From: Chow Date: Mon, 18 May 2020 17:41:52 +0800 Subject: [PATCH] Add check for DOUBLE in low versions (#2223) Add check for DOUBLE in low versions, fix issue #2206 --- Test/330.frag | 4 ++++ Test/baseResults/330.frag.out | 16 ++++++++++++++++ glslang/MachineIndependent/Intermediate.cpp | 8 +++++--- 3 files changed, 25 insertions(+), 3 deletions(-) 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; }