diff --git a/Test/baseResults/stringToDouble.vert.out b/Test/baseResults/stringToDouble.vert.out index b4c073cb..a799d0a4 100755 --- a/Test/baseResults/stringToDouble.vert.out +++ b/Test/baseResults/stringToDouble.vert.out @@ -1,5 +1,6 @@ stringToDouble.vert Shader version: 460 +Requested GL_KHX_shader_explicit_arithmetic_types_float16 0:? Sequence 0:3 Function Definition: main( ( global void) 0:3 Function Parameters: @@ -440,10 +441,80 @@ Shader version: 460 0:95 Constant: 0:95 5.7089907708238e+45 0:97 Sequence -0:97 move second child to first child ( temp double) -0:97 'pi' ( temp double) +0:97 move second child to first child ( temp float) +0:97 'pi1' ( temp float) 0:97 Constant: 0:97 3.141593 +0:98 Sequence +0:98 move second child to first child ( temp float) +0:98 'pi2' ( temp float) +0:98 Constant: +0:98 3.141593 +0:99 Sequence +0:99 move second child to first child ( temp float) +0:99 'pi3' ( temp float) +0:99 Constant: +0:99 3.141593 +0:101 Sequence +0:101 move second child to first child ( temp double) +0:101 'dpi1' ( temp double) +0:101 Constant: +0:101 3.141593 +0:102 Sequence +0:102 move second child to first child ( temp double) +0:102 'dpi2' ( temp double) +0:102 Constant: +0:102 3.141593 +0:103 Sequence +0:103 move second child to first child ( temp double) +0:103 'dpi3' ( temp double) +0:103 Constant: +0:103 3.141593 +0:105 Sequence +0:105 move second child to first child ( temp float) +0:105 'dfpi1' ( temp float) +0:105 Constant: +0:105 3.141593 +0:106 Sequence +0:106 move second child to first child ( temp float) +0:106 'dfpi2' ( temp float) +0:106 Constant: +0:106 3.141593 +0:107 Sequence +0:107 move second child to first child ( temp float) +0:107 'dfpi3' ( temp float) +0:107 Constant: +0:107 3.141593 +0:109 Sequence +0:109 move second child to first child ( temp double) +0:109 'lfpi1' ( temp double) +0:109 Constant: +0:109 3.141593 +0:110 Sequence +0:110 move second child to first child ( temp double) +0:110 'lfpi2' ( temp double) +0:110 Constant: +0:110 3.141593 +0:111 Sequence +0:111 move second child to first child ( temp double) +0:111 'lfpi3' ( temp double) +0:111 Constant: +0:111 3.141593 +0:113 Sequence +0:113 move second child to first child ( temp double) +0:113 'hfpi1' ( temp double) +0:113 Constant: +0:113 3.141593 +0:114 Sequence +0:114 move second child to first child ( temp double) +0:114 'hfpi2' ( temp double) +0:114 Constant: +0:114 3.141593 +0:115 Sequence +0:115 move second child to first child ( temp double) +0:115 'hfpi3' ( temp double) +0:115 Constant: +0:115 3.141593 0:? Linker Objects 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -453,6 +524,7 @@ Linked vertex stage: Shader version: 460 +Requested GL_KHX_shader_explicit_arithmetic_types_float16 0:? Sequence 0:3 Function Definition: main( ( global void) 0:3 Function Parameters: @@ -893,10 +965,80 @@ Shader version: 460 0:95 Constant: 0:95 5.7089907708238e+45 0:97 Sequence -0:97 move second child to first child ( temp double) -0:97 'pi' ( temp double) +0:97 move second child to first child ( temp float) +0:97 'pi1' ( temp float) 0:97 Constant: 0:97 3.141593 +0:98 Sequence +0:98 move second child to first child ( temp float) +0:98 'pi2' ( temp float) +0:98 Constant: +0:98 3.141593 +0:99 Sequence +0:99 move second child to first child ( temp float) +0:99 'pi3' ( temp float) +0:99 Constant: +0:99 3.141593 +0:101 Sequence +0:101 move second child to first child ( temp double) +0:101 'dpi1' ( temp double) +0:101 Constant: +0:101 3.141593 +0:102 Sequence +0:102 move second child to first child ( temp double) +0:102 'dpi2' ( temp double) +0:102 Constant: +0:102 3.141593 +0:103 Sequence +0:103 move second child to first child ( temp double) +0:103 'dpi3' ( temp double) +0:103 Constant: +0:103 3.141593 +0:105 Sequence +0:105 move second child to first child ( temp float) +0:105 'dfpi1' ( temp float) +0:105 Constant: +0:105 3.141593 +0:106 Sequence +0:106 move second child to first child ( temp float) +0:106 'dfpi2' ( temp float) +0:106 Constant: +0:106 3.141593 +0:107 Sequence +0:107 move second child to first child ( temp float) +0:107 'dfpi3' ( temp float) +0:107 Constant: +0:107 3.141593 +0:109 Sequence +0:109 move second child to first child ( temp double) +0:109 'lfpi1' ( temp double) +0:109 Constant: +0:109 3.141593 +0:110 Sequence +0:110 move second child to first child ( temp double) +0:110 'lfpi2' ( temp double) +0:110 Constant: +0:110 3.141593 +0:111 Sequence +0:111 move second child to first child ( temp double) +0:111 'lfpi3' ( temp double) +0:111 Constant: +0:111 3.141593 +0:113 Sequence +0:113 move second child to first child ( temp double) +0:113 'hfpi1' ( temp double) +0:113 Constant: +0:113 3.141593 +0:114 Sequence +0:114 move second child to first child ( temp double) +0:114 'hfpi2' ( temp double) +0:114 Constant: +0:114 3.141593 +0:115 Sequence +0:115 move second child to first child ( temp double) +0:115 'hfpi3' ( temp double) +0:115 Constant: +0:115 3.141593 0:? Linker Objects 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) diff --git a/Test/stringToDouble.vert b/Test/stringToDouble.vert index 2f213021..5a7024da 100755 --- a/Test/stringToDouble.vert +++ b/Test/stringToDouble.vert @@ -1,5 +1,5 @@ #version 460 -//#pragma glslang_binary_double_output +#extension GL_KHX_shader_explicit_arithmetic_types_float16 : enable void main() { float w1 = 00000.000; @@ -94,5 +94,23 @@ void main() double b44 = 5708990770823839207320493820740630171355185151999e-3; double b45 = 5708990770823839207320493820740630171355185152001e-3; - double pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; + float pi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679f; + float pi2 = 3.14159265358979f; + float pi3 = 3.141592653589793f; + + double dpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; + double dpi2 = 3.14159265358979; + double dpi3 = 3.141592653589793; + + float dfpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679f; + float dfpi2 = 3.14159265358979f; + float dfpi3 = 3.141592653589793f; + + double lfpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679LF; + double lfpi2 = 3.14159265358979Lf; + double lfpi3 = 3.141592653589793lF; + + double hfpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679hF; + double hfpi2 = 3.14159265358979hF; + double hfpi3 = 3.141592653589793hf; } diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 025e39a9..1faa0180 100755 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -317,8 +317,19 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) } else { // slow path ppToken->dval = 0.0; + + // remove suffix + TString numstr(ppToken->name); + if (numstr.back() == 'f' || numstr.back() == 'F') + numstr.pop_back(); + if (numstr.back() == 'h' || numstr.back() == 'H') + numstr.pop_back(); + if (numstr.back() == 'l' || numstr.back() == 'L') + numstr.pop_back(); + + // use platform library strtodStream.clear(); - strtodStream.str(ppToken->name); + strtodStream.str(numstr.c_str()); strtodStream >> ppToken->dval; if (strtodStream.fail()) { // Assume failure combined with a large exponent was overflow, in