From 90dd70f752645863524bb91040d5631236f0d017 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 25 Aug 2016 10:49:21 -0600 Subject: [PATCH] HLSL: Allow arbitrary baseType -> baseType conversion of calling arguments. This also puts a stake in the ground as to which is better when selection from multiple signatures. --- Test/baseResults/hlsl.intrinsics.negative.frag.out | 307 +++-- Test/baseResults/hlsl.overload.frag.out | 1436 +++++++++++++++----- Test/hlsl.overload.frag | 82 ++ glslang/Include/revision.h | 4 +- glslang/MachineIndependent/Intermediate.cpp | 1 + hlsl/hlslParseHelper.cpp | 29 +- 6 files changed, 1395 insertions(+), 464 deletions(-) diff --git a/Test/baseResults/hlsl.intrinsics.negative.frag.out b/Test/baseResults/hlsl.intrinsics.negative.frag.out index 829b699..74dd6c4 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.frag.out +++ b/Test/baseResults/hlsl.intrinsics.negative.frag.out @@ -1,50 +1,31 @@ hlsl.intrinsics.negative.frag -ERROR: 0:5: 'asdouble' : no matching overloaded function found -ERROR: 0:6: 'CheckAccessFullyMapped' : no matching overloaded function found -ERROR: 0:7: 'countbits' : no matching overloaded function found ERROR: 0:8: 'cross' : no matching overloaded function found ERROR: 0:9: 'D3DCOLORtoUBYTE4' : no matching overloaded function found ERROR: 0:10: 'determinant' : no matching overloaded function found -ERROR: 0:12: 'f16tof32' : no matching overloaded function found -ERROR: 0:13: 'firstbithigh' : no matching overloaded function found -ERROR: 0:14: 'firstbitlow' : no matching overloaded function found +ERROR: 0:12: 'f32tof16' : unimplemented intrinsic: handle natively ERROR: 0:23: 'length' : no matching overloaded function found -ERROR: 0:24: 'msad4' : no matching overloaded function found ERROR: 0:25: 'normalize' : no matching overloaded function found ERROR: 0:26: 'reflect' : no matching overloaded function found ERROR: 0:27: 'refract' : no matching overloaded function found ERROR: 0:28: 'refract' : no matching overloaded function found -ERROR: 0:29: 'reversebits' : no matching overloaded function found ERROR: 0:30: 'transpose' : no matching overloaded function found ERROR: 0:39: 'GetRenderTargetSamplePosition' : no matching overloaded function found -ERROR: 0:46: 'asdouble' : no matching overloaded function found +ERROR: 0:46: 'asdouble' : double2 conversion not implemented ERROR: 0:47: 'CheckAccessFullyMapped' : no matching overloaded function found -ERROR: 0:48: 'countbits' : no matching overloaded function found ERROR: 0:49: 'cross' : no matching overloaded function found ERROR: 0:50: 'D3DCOLORtoUBYTE4' : no matching overloaded function found ERROR: 0:51: 'determinant' : no matching overloaded function found -ERROR: 0:52: 'f16tof32' : no matching overloaded function found -ERROR: 0:53: 'firstbithigh' : no matching overloaded function found -ERROR: 0:54: 'firstbitlow' : no matching overloaded function found -ERROR: 0:56: 'reversebits' : no matching overloaded function found +ERROR: 0:52: 'f32tof16' : unimplemented intrinsic: handle natively ERROR: 0:57: 'transpose' : no matching overloaded function found ERROR: 0:64: 'CheckAccessFullyMapped' : no matching overloaded function found -ERROR: 0:65: 'countbits' : no matching overloaded function found ERROR: 0:66: 'D3DCOLORtoUBYTE4' : no matching overloaded function found ERROR: 0:67: 'determinant' : no matching overloaded function found -ERROR: 0:68: 'f16tof32' : no matching overloaded function found -ERROR: 0:69: 'firstbithigh' : no matching overloaded function found -ERROR: 0:70: 'firstbitlow' : no matching overloaded function found -ERROR: 0:72: 'reversebits' : no matching overloaded function found +ERROR: 0:68: 'f32tof16' : unimplemented intrinsic: handle natively ERROR: 0:73: 'transpose' : no matching overloaded function found ERROR: 0:81: 'CheckAccessFullyMapped' : no matching overloaded function found -ERROR: 0:82: 'countbits' : no matching overloaded function found ERROR: 0:83: 'cross' : no matching overloaded function found ERROR: 0:84: 'determinant' : no matching overloaded function found -ERROR: 0:85: 'f16tof32' : no matching overloaded function found -ERROR: 0:86: 'firstbithigh' : no matching overloaded function found -ERROR: 0:87: 'firstbitlow' : no matching overloaded function found -ERROR: 0:89: 'reversebits' : no matching overloaded function found +ERROR: 0:85: 'f32tof16' : unimplemented intrinsic: handle natively ERROR: 0:90: 'transpose' : no matching overloaded function found ERROR: 0:117: 'countbits' : no matching overloaded function found ERROR: 0:117: 'D3DCOLORtoUBYTE4' : no matching overloaded function found @@ -85,7 +66,7 @@ ERROR: 0:133: 'normalize' : no matching overloaded function found ERROR: 0:133: 'reflect' : no matching overloaded function found ERROR: 0:133: 'refract' : no matching overloaded function found ERROR: 0:133: 'reversebits' : no matching overloaded function found -ERROR: 86 compilation errors. No code generated. +ERROR: 67 compilation errors. No code generated. Shader version: 450 @@ -98,28 +79,47 @@ ERROR: node is still EOpNull! 0:2 'inF2' (in float) 0:2 'inI0' (in int) 0:? Sequence -0:5 Constant: -0:5 0.000000 -0:6 Constant: -0:6 0.000000 -0:7 Constant: -0:7 0.000000 +0:5 uint64BitsToDouble (temp double) +0:5 Construct uvec2 (temp 2-component vector of uint) +0:5 Convert float to uint (temp uint) +0:5 'inF0' (in float) +0:5 Convert float to uint (temp uint) +0:5 'inF1' (in float) +0:6 Function Call: CheckAccessFullyMapped(u1; (global bool) +0:6 Constant: +0:6 3 (const uint) +0:7 bitCount (global uint) +0:7 Convert float to uint (temp uint) +0:7 'inF0' (in float) 0:8 Constant: 0:8 0.000000 0:9 Constant: 0:9 0.000000 0:10 Constant: 0:10 0.000000 -0:12 Constant: -0:12 0.000000 -0:13 Constant: -0:13 0.000000 -0:14 Constant: -0:14 0.000000 +0:12 ERROR: Bad unary op + (global float) +0:12 Convert float to uint (temp uint) +0:12 'inF0' (in float) +0:13 findMSB (global uint) +0:13 Convert float to uint (temp uint) +0:13 'inF0' (in float) +0:14 findLSB (global uint) +0:14 Convert float to uint (temp uint) +0:14 'inF0' (in float) 0:23 Constant: 0:23 0.000000 -0:24 Constant: -0:24 0.000000 +0:24 Function Call: msad4(u1;vu2;vu4; (global 4-component vector of uint) +0:24 Convert float to uint (temp uint) +0:24 'inF0' (in float) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) 0:25 Constant: 0:25 0.000000 0:26 Constant: @@ -128,8 +128,9 @@ ERROR: node is still EOpNull! 0:27 0.000000 0:28 Constant: 0:28 0.000000 -0:29 Constant: -0:29 0.000000 +0:29 bitFieldReverse (global uint) +0:29 Convert float to uint (temp uint) +0:29 'inF0' (in float) 0:30 Constant: 0:30 0.000000 0:32 Branch: Return with expression @@ -154,26 +155,36 @@ ERROR: node is still EOpNull! 0:45 'inF2' (in 2-component vector of float) 0:45 'inI0' (in 2-component vector of int) 0:? Sequence -0:46 Constant: -0:46 0.000000 +0:46 ERROR: Bad aggregation op + (global 2-component vector of double) +0:46 Convert float to uint (temp 2-component vector of uint) +0:46 'inF0' (in 2-component vector of float) +0:46 Convert float to uint (temp 2-component vector of uint) +0:46 'inF1' (in 2-component vector of float) 0:47 Constant: 0:47 0.000000 -0:48 Constant: -0:48 0.000000 +0:48 bitCount (global 2-component vector of uint) +0:48 Convert float to uint (temp 2-component vector of uint) +0:48 'inF0' (in 2-component vector of float) 0:49 Constant: 0:49 0.000000 0:50 Constant: 0:50 0.000000 0:51 Constant: 0:51 0.000000 -0:52 Constant: -0:52 0.000000 -0:53 Constant: -0:53 0.000000 -0:54 Constant: -0:54 0.000000 -0:56 Constant: -0:56 0.000000 +0:52 ERROR: Bad unary op + (global 2-component vector of float) +0:52 Convert float to uint (temp 2-component vector of uint) +0:52 'inF0' (in 2-component vector of float) +0:53 findMSB (global 2-component vector of uint) +0:53 Convert float to uint (temp 2-component vector of uint) +0:53 'inF0' (in 2-component vector of float) +0:54 findLSB (global 2-component vector of uint) +0:54 Convert float to uint (temp 2-component vector of uint) +0:54 'inF0' (in 2-component vector of float) +0:56 bitFieldReverse (global 2-component vector of uint) +0:56 Convert float to uint (temp 2-component vector of uint) +0:56 'inF0' (in 2-component vector of float) 0:57 Constant: 0:57 0.000000 0:59 Branch: Return with expression @@ -189,20 +200,26 @@ ERROR: node is still EOpNull! 0:? Sequence 0:64 Constant: 0:64 0.000000 -0:65 Constant: -0:65 0.000000 +0:65 bitCount (global 3-component vector of uint) +0:65 Convert float to uint (temp 3-component vector of uint) +0:65 'inF0' (in 3-component vector of float) 0:66 Constant: 0:66 0.000000 0:67 Constant: 0:67 0.000000 -0:68 Constant: -0:68 0.000000 -0:69 Constant: -0:69 0.000000 -0:70 Constant: -0:70 0.000000 -0:72 Constant: -0:72 0.000000 +0:68 ERROR: Bad unary op + (global 3-component vector of float) +0:68 Convert float to uint (temp 3-component vector of uint) +0:68 'inF0' (in 3-component vector of float) +0:69 findMSB (global 3-component vector of uint) +0:69 Convert float to uint (temp 3-component vector of uint) +0:69 'inF0' (in 3-component vector of float) +0:70 findLSB (global 3-component vector of uint) +0:70 Convert float to uint (temp 3-component vector of uint) +0:70 'inF0' (in 3-component vector of float) +0:72 bitFieldReverse (global 3-component vector of uint) +0:72 Convert float to uint (temp 3-component vector of uint) +0:72 'inF0' (in 3-component vector of float) 0:73 Constant: 0:73 0.000000 0:76 Branch: Return with expression @@ -219,20 +236,26 @@ ERROR: node is still EOpNull! 0:? Sequence 0:81 Constant: 0:81 0.000000 -0:82 Constant: -0:82 0.000000 +0:82 bitCount (global 4-component vector of uint) +0:82 Convert float to uint (temp 4-component vector of uint) +0:82 'inF0' (in 4-component vector of float) 0:83 Constant: 0:83 0.000000 0:84 Constant: 0:84 0.000000 -0:85 Constant: -0:85 0.000000 -0:86 Constant: -0:86 0.000000 -0:87 Constant: -0:87 0.000000 -0:89 Constant: -0:89 0.000000 +0:85 ERROR: Bad unary op + (global 4-component vector of float) +0:85 Convert float to uint (temp 4-component vector of uint) +0:85 'inF0' (in 4-component vector of float) +0:86 findMSB (global 4-component vector of uint) +0:86 Convert float to uint (temp 4-component vector of uint) +0:86 'inF0' (in 4-component vector of float) +0:87 findLSB (global 4-component vector of uint) +0:87 Convert float to uint (temp 4-component vector of uint) +0:87 'inF0' (in 4-component vector of float) +0:89 bitFieldReverse (global 4-component vector of uint) +0:89 Convert float to uint (temp 4-component vector of uint) +0:89 'inF0' (in 4-component vector of float) 0:90 Constant: 0:90 0.000000 0:92 Branch: Return with expression @@ -388,28 +411,47 @@ ERROR: node is still EOpNull! 0:2 'inF2' (in float) 0:2 'inI0' (in int) 0:? Sequence -0:5 Constant: -0:5 0.000000 -0:6 Constant: -0:6 0.000000 -0:7 Constant: -0:7 0.000000 +0:5 uint64BitsToDouble (temp double) +0:5 Construct uvec2 (temp 2-component vector of uint) +0:5 Convert float to uint (temp uint) +0:5 'inF0' (in float) +0:5 Convert float to uint (temp uint) +0:5 'inF1' (in float) +0:6 Function Call: CheckAccessFullyMapped(u1; (global bool) +0:6 Constant: +0:6 3 (const uint) +0:7 bitCount (global uint) +0:7 Convert float to uint (temp uint) +0:7 'inF0' (in float) 0:8 Constant: 0:8 0.000000 0:9 Constant: 0:9 0.000000 0:10 Constant: 0:10 0.000000 -0:12 Constant: -0:12 0.000000 -0:13 Constant: -0:13 0.000000 -0:14 Constant: -0:14 0.000000 +0:12 ERROR: Bad unary op + (global float) +0:12 Convert float to uint (temp uint) +0:12 'inF0' (in float) +0:13 findMSB (global uint) +0:13 Convert float to uint (temp uint) +0:13 'inF0' (in float) +0:14 findLSB (global uint) +0:14 Convert float to uint (temp uint) +0:14 'inF0' (in float) 0:23 Constant: 0:23 0.000000 -0:24 Constant: -0:24 0.000000 +0:24 Function Call: msad4(u1;vu2;vu4; (global 4-component vector of uint) +0:24 Convert float to uint (temp uint) +0:24 'inF0' (in float) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 Constant: +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) +0:24 0 (const uint) 0:25 Constant: 0:25 0.000000 0:26 Constant: @@ -418,8 +460,9 @@ ERROR: node is still EOpNull! 0:27 0.000000 0:28 Constant: 0:28 0.000000 -0:29 Constant: -0:29 0.000000 +0:29 bitFieldReverse (global uint) +0:29 Convert float to uint (temp uint) +0:29 'inF0' (in float) 0:30 Constant: 0:30 0.000000 0:32 Branch: Return with expression @@ -444,26 +487,36 @@ ERROR: node is still EOpNull! 0:45 'inF2' (in 2-component vector of float) 0:45 'inI0' (in 2-component vector of int) 0:? Sequence -0:46 Constant: -0:46 0.000000 +0:46 ERROR: Bad aggregation op + (global 2-component vector of double) +0:46 Convert float to uint (temp 2-component vector of uint) +0:46 'inF0' (in 2-component vector of float) +0:46 Convert float to uint (temp 2-component vector of uint) +0:46 'inF1' (in 2-component vector of float) 0:47 Constant: 0:47 0.000000 -0:48 Constant: -0:48 0.000000 +0:48 bitCount (global 2-component vector of uint) +0:48 Convert float to uint (temp 2-component vector of uint) +0:48 'inF0' (in 2-component vector of float) 0:49 Constant: 0:49 0.000000 0:50 Constant: 0:50 0.000000 0:51 Constant: 0:51 0.000000 -0:52 Constant: -0:52 0.000000 -0:53 Constant: -0:53 0.000000 -0:54 Constant: -0:54 0.000000 -0:56 Constant: -0:56 0.000000 +0:52 ERROR: Bad unary op + (global 2-component vector of float) +0:52 Convert float to uint (temp 2-component vector of uint) +0:52 'inF0' (in 2-component vector of float) +0:53 findMSB (global 2-component vector of uint) +0:53 Convert float to uint (temp 2-component vector of uint) +0:53 'inF0' (in 2-component vector of float) +0:54 findLSB (global 2-component vector of uint) +0:54 Convert float to uint (temp 2-component vector of uint) +0:54 'inF0' (in 2-component vector of float) +0:56 bitFieldReverse (global 2-component vector of uint) +0:56 Convert float to uint (temp 2-component vector of uint) +0:56 'inF0' (in 2-component vector of float) 0:57 Constant: 0:57 0.000000 0:59 Branch: Return with expression @@ -479,20 +532,26 @@ ERROR: node is still EOpNull! 0:? Sequence 0:64 Constant: 0:64 0.000000 -0:65 Constant: -0:65 0.000000 +0:65 bitCount (global 3-component vector of uint) +0:65 Convert float to uint (temp 3-component vector of uint) +0:65 'inF0' (in 3-component vector of float) 0:66 Constant: 0:66 0.000000 0:67 Constant: 0:67 0.000000 -0:68 Constant: -0:68 0.000000 -0:69 Constant: -0:69 0.000000 -0:70 Constant: -0:70 0.000000 -0:72 Constant: -0:72 0.000000 +0:68 ERROR: Bad unary op + (global 3-component vector of float) +0:68 Convert float to uint (temp 3-component vector of uint) +0:68 'inF0' (in 3-component vector of float) +0:69 findMSB (global 3-component vector of uint) +0:69 Convert float to uint (temp 3-component vector of uint) +0:69 'inF0' (in 3-component vector of float) +0:70 findLSB (global 3-component vector of uint) +0:70 Convert float to uint (temp 3-component vector of uint) +0:70 'inF0' (in 3-component vector of float) +0:72 bitFieldReverse (global 3-component vector of uint) +0:72 Convert float to uint (temp 3-component vector of uint) +0:72 'inF0' (in 3-component vector of float) 0:73 Constant: 0:73 0.000000 0:76 Branch: Return with expression @@ -509,20 +568,26 @@ ERROR: node is still EOpNull! 0:? Sequence 0:81 Constant: 0:81 0.000000 -0:82 Constant: -0:82 0.000000 +0:82 bitCount (global 4-component vector of uint) +0:82 Convert float to uint (temp 4-component vector of uint) +0:82 'inF0' (in 4-component vector of float) 0:83 Constant: 0:83 0.000000 0:84 Constant: 0:84 0.000000 -0:85 Constant: -0:85 0.000000 -0:86 Constant: -0:86 0.000000 -0:87 Constant: -0:87 0.000000 -0:89 Constant: -0:89 0.000000 +0:85 ERROR: Bad unary op + (global 4-component vector of float) +0:85 Convert float to uint (temp 4-component vector of uint) +0:85 'inF0' (in 4-component vector of float) +0:86 findMSB (global 4-component vector of uint) +0:86 Convert float to uint (temp 4-component vector of uint) +0:86 'inF0' (in 4-component vector of float) +0:87 findLSB (global 4-component vector of uint) +0:87 Convert float to uint (temp 4-component vector of uint) +0:87 'inF0' (in 4-component vector of float) +0:89 bitFieldReverse (global 4-component vector of uint) +0:89 Convert float to uint (temp 4-component vector of uint) +0:89 'inF0' (in 4-component vector of float) 0:90 Constant: 0:90 0.000000 0:92 Branch: Return with expression diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out index 3366fcb..7b69a54 100755 --- a/Test/baseResults/hlsl.overload.frag.out +++ b/Test/baseResults/hlsl.overload.frag.out @@ -2,88 +2,274 @@ hlsl.overload.frag Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence -0:3 Function Definition: foo1(d1;u1; (global void) +0:3 Function Definition: foo1(d1;b1; (global void) 0:2 Function Parameters: 0:2 'a' (in double) -0:2 'b' (in uint) -0:4 Function Definition: foo1(d1;i1; (global void) +0:2 'b' (in bool) +0:4 Function Definition: foo1(d1;u1; (global void) 0:3 Function Parameters: 0:3 'a' (in double) -0:3 'b' (in int) -0:5 Function Definition: foo1(d1;f1; (global void) +0:3 'b' (in uint) +0:5 Function Definition: foo1(d1;i1; (global void) 0:4 Function Parameters: 0:4 'a' (in double) -0:4 'b' (in float) -0:7 Function Definition: foo1(d1;d1; (global void) +0:4 'b' (in int) +0:6 Function Definition: foo1(d1;f1; (global void) 0:5 Function Parameters: 0:5 'a' (in double) -0:5 'b' (in double) -0:36 Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float) -0:8 Function Parameters: -0:8 'input' (in 4-component vector of float) +0:5 'b' (in float) +0:9 Function Definition: foo1(d1;d1; (global void) +0:6 Function Parameters: +0:6 'a' (in double) +0:6 'b' (in double) +0:10 Function Definition: foo2(i1;b1; (global void) +0:9 Function Parameters: +0:9 'a' (in int) +0:9 'b' (in bool) +0:11 Function Definition: foo2(i1;u1; (global void) +0:10 Function Parameters: +0:10 'a' (in int) +0:10 'b' (in uint) +0:12 Function Definition: foo2(i1;i1; (global void) +0:11 Function Parameters: +0:11 'a' (in int) +0:11 'b' (in int) +0:13 Function Definition: foo2(i1;f1; (global void) +0:12 Function Parameters: +0:12 'a' (in int) +0:12 'b' (in float) +0:16 Function Definition: foo2(i1;d1; (global void) +0:13 Function Parameters: +0:13 'a' (in int) +0:13 'b' (in double) +0:17 Function Definition: foo3(b1; (global void) +0:16 Function Parameters: +0:16 'b' (in bool) +0:18 Function Definition: foo4(u1; (global void) +0:17 Function Parameters: +0:17 'b' (in uint) +0:19 Function Definition: foo5(i1; (global void) +0:18 Function Parameters: +0:18 'b' (in int) +0:20 Function Definition: foo6(f1; (global void) +0:19 Function Parameters: +0:19 'b' (in float) +0:23 Function Definition: foo7(d1; (global void) +0:20 Function Parameters: +0:20 'b' (in double) +0:118 Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float) +0:31 Function Parameters: +0:31 'input' (in 4-component vector of float) 0:? Sequence -0:14 Function Call: foo1(d1;d1; (global void) -0:14 'd' (temp double) -0:14 'd' (temp double) -0:15 Function Call: foo1(d1;u1; (global void) -0:15 'd' (temp double) -0:15 'u' (temp uint) -0:16 Function Call: foo1(d1;i1; (global void) -0:16 'd' (temp double) -0:16 'i' (temp int) -0:17 Function Call: foo1(d1;f1; (global void) -0:17 'd' (temp double) -0:17 'f' (temp float) -0:19 Function Call: foo1(d1;d1; (global void) -0:19 Convert float to double (temp double) -0:19 'f' (temp float) -0:19 'd' (temp double) -0:20 Function Call: foo1(d1;u1; (global void) -0:20 Convert float to double (temp double) -0:20 'f' (temp float) -0:20 'u' (temp uint) -0:21 Function Call: foo1(d1;i1; (global void) -0:21 Convert float to double (temp double) -0:21 'f' (temp float) -0:21 'i' (temp int) -0:22 Function Call: foo1(d1;f1; (global void) -0:22 Convert float to double (temp double) -0:22 'f' (temp float) -0:22 'f' (temp float) -0:24 Function Call: foo1(d1;d1; (global void) -0:24 Convert uint to double (temp double) -0:24 'u' (temp uint) -0:24 'd' (temp double) -0:25 Function Call: foo1(d1;u1; (global void) -0:25 Convert uint to double (temp double) -0:25 'u' (temp uint) -0:25 'u' (temp uint) -0:26 Function Call: foo1(d1;i1; (global void) -0:26 Convert uint to double (temp double) -0:26 'u' (temp uint) -0:26 'i' (temp int) -0:27 Function Call: foo1(d1;f1; (global void) -0:27 Convert uint to double (temp double) -0:27 'u' (temp uint) -0:27 'f' (temp float) -0:29 Function Call: foo1(d1;d1; (global void) -0:29 Convert int to double (temp double) -0:29 'i' (temp int) -0:29 'd' (temp double) -0:30 Function Call: foo1(d1;u1; (global void) -0:30 Convert int to double (temp double) -0:30 'i' (temp int) -0:30 'u' (temp uint) -0:31 Function Call: foo1(d1;i1; (global void) -0:31 Convert int to double (temp double) -0:31 'i' (temp int) -0:31 'i' (temp int) -0:32 Function Call: foo1(d1;f1; (global void) -0:32 Convert int to double (temp double) -0:32 'i' (temp int) -0:32 'f' (temp float) -0:34 Branch: Return with expression -0:34 'input' (in 4-component vector of float) +0:38 Function Call: foo1(d1;b1; (global void) +0:38 'd' (temp double) +0:38 'b' (temp bool) +0:39 Function Call: foo1(d1;d1; (global void) +0:39 'd' (temp double) +0:39 'd' (temp double) +0:40 Function Call: foo1(d1;u1; (global void) +0:40 'd' (temp double) +0:40 'u' (temp uint) +0:41 Function Call: foo1(d1;i1; (global void) +0:41 'd' (temp double) +0:41 'i' (temp int) +0:42 Function Call: foo1(d1;f1; (global void) +0:42 'd' (temp double) +0:42 'f' (temp float) +0:44 Function Call: foo1(d1;b1; (global void) +0:44 Convert float to double (temp double) +0:44 'f' (temp float) +0:44 'b' (temp bool) +0:45 Function Call: foo1(d1;d1; (global void) +0:45 Convert float to double (temp double) +0:45 'f' (temp float) +0:45 'd' (temp double) +0:46 Function Call: foo1(d1;u1; (global void) +0:46 Convert float to double (temp double) +0:46 'f' (temp float) +0:46 'u' (temp uint) +0:47 Function Call: foo1(d1;i1; (global void) +0:47 Convert float to double (temp double) +0:47 'f' (temp float) +0:47 'i' (temp int) +0:48 Function Call: foo1(d1;f1; (global void) +0:48 Convert float to double (temp double) +0:48 'f' (temp float) +0:48 'f' (temp float) +0:50 Function Call: foo1(d1;b1; (global void) +0:50 Convert uint to double (temp double) +0:50 'u' (temp uint) +0:50 'b' (temp bool) +0:51 Function Call: foo1(d1;d1; (global void) +0:51 Convert uint to double (temp double) +0:51 'u' (temp uint) +0:51 'd' (temp double) +0:52 Function Call: foo1(d1;u1; (global void) +0:52 Convert uint to double (temp double) +0:52 'u' (temp uint) +0:52 'u' (temp uint) +0:53 Function Call: foo1(d1;i1; (global void) +0:53 Convert uint to double (temp double) +0:53 'u' (temp uint) +0:53 'i' (temp int) +0:54 Function Call: foo1(d1;f1; (global void) +0:54 Convert uint to double (temp double) +0:54 'u' (temp uint) +0:54 'f' (temp float) +0:56 Function Call: foo1(d1;b1; (global void) +0:56 Convert int to double (temp double) +0:56 'i' (temp int) +0:56 'b' (temp bool) +0:57 Function Call: foo1(d1;d1; (global void) +0:57 Convert int to double (temp double) +0:57 'i' (temp int) +0:57 'd' (temp double) +0:58 Function Call: foo1(d1;u1; (global void) +0:58 Convert int to double (temp double) +0:58 'i' (temp int) +0:58 'u' (temp uint) +0:59 Function Call: foo1(d1;i1; (global void) +0:59 Convert int to double (temp double) +0:59 'i' (temp int) +0:59 'i' (temp int) +0:60 Function Call: foo1(d1;f1; (global void) +0:60 Convert int to double (temp double) +0:60 'i' (temp int) +0:60 'f' (temp float) +0:62 Function Call: foo2(i1;b1; (global void) +0:62 Convert uint to int (temp int) +0:62 'u' (temp uint) +0:62 'b' (temp bool) +0:63 Function Call: foo2(i1;d1; (global void) +0:63 Convert uint to int (temp int) +0:63 'u' (temp uint) +0:63 'd' (temp double) +0:64 Function Call: foo2(i1;u1; (global void) +0:64 Convert uint to int (temp int) +0:64 'u' (temp uint) +0:64 'u' (temp uint) +0:65 Function Call: foo2(i1;i1; (global void) +0:65 Convert uint to int (temp int) +0:65 'u' (temp uint) +0:65 'i' (temp int) +0:66 Function Call: foo2(i1;f1; (global void) +0:66 Convert uint to int (temp int) +0:66 'u' (temp uint) +0:66 'f' (temp float) +0:68 Function Call: foo2(i1;b1; (global void) +0:68 'i' (temp int) +0:68 'b' (temp bool) +0:69 Function Call: foo2(i1;d1; (global void) +0:69 'i' (temp int) +0:69 'd' (temp double) +0:70 Function Call: foo2(i1;u1; (global void) +0:70 'i' (temp int) +0:70 'u' (temp uint) +0:71 Function Call: foo2(i1;i1; (global void) +0:71 'i' (temp int) +0:71 'i' (temp int) +0:72 Function Call: foo2(i1;f1; (global void) +0:72 'i' (temp int) +0:72 'f' (temp float) +0:74 Function Call: foo3(b1; (global void) +0:74 'b' (temp bool) +0:75 Function Call: foo3(b1; (global void) +0:75 Convert double to bool (temp bool) +0:75 'd' (temp double) +0:76 Function Call: foo3(b1; (global void) +0:76 Convert uint to bool (temp bool) +0:76 'u' (temp uint) +0:77 Function Call: foo3(b1; (global void) +0:77 Convert int to bool (temp bool) +0:77 'i' (temp int) +0:78 Function Call: foo3(b1; (global void) +0:78 Convert float to bool (temp bool) +0:78 'f' (temp float) +0:80 Function Call: foo4(u1; (global void) +0:80 Convert bool to uint (temp uint) +0:80 'b' (temp bool) +0:81 Function Call: foo4(u1; (global void) +0:81 Convert double to uint (temp uint) +0:81 'd' (temp double) +0:82 Function Call: foo4(u1; (global void) +0:82 'u' (temp uint) +0:83 Function Call: foo4(u1; (global void) +0:83 Convert int to uint (temp uint) +0:83 'i' (temp int) +0:84 Function Call: foo4(u1; (global void) +0:84 Convert float to uint (temp uint) +0:84 'f' (temp float) +0:86 Function Call: foo5(i1; (global void) +0:86 Convert bool to int (temp int) +0:86 'b' (temp bool) +0:87 Function Call: foo5(i1; (global void) +0:87 Convert double to int (temp int) +0:87 'd' (temp double) +0:88 Function Call: foo5(i1; (global void) +0:88 Convert uint to int (temp int) +0:88 'u' (temp uint) +0:89 Function Call: foo5(i1; (global void) +0:89 'i' (temp int) +0:90 Function Call: foo5(i1; (global void) +0:90 Convert float to int (temp int) +0:90 'f' (temp float) +0:92 Function Call: foo6(f1; (global void) +0:92 Convert bool to float (temp float) +0:92 'b' (temp bool) +0:93 Function Call: foo6(f1; (global void) +0:93 Convert double to float (temp float) +0:93 'd' (temp double) +0:94 Function Call: foo6(f1; (global void) +0:94 Convert uint to float (temp float) +0:94 'u' (temp uint) +0:95 Function Call: foo6(f1; (global void) +0:95 Convert int to float (temp float) +0:95 'i' (temp int) +0:96 Function Call: foo6(f1; (global void) +0:96 'f' (temp float) +0:98 Function Call: foo7(d1; (global void) +0:98 Convert bool to double (temp double) +0:98 'b' (temp bool) +0:99 Function Call: foo7(d1; (global void) +0:99 'd' (temp double) +0:100 Function Call: foo7(d1; (global void) +0:100 Convert uint to double (temp double) +0:100 'u' (temp uint) +0:101 Function Call: foo7(d1; (global void) +0:101 Convert int to double (temp double) +0:101 'i' (temp int) +0:102 Function Call: foo7(d1; (global void) +0:102 Convert float to double (temp double) +0:102 'f' (temp float) +0:104 Function Call: foo8(f1; (global void) +0:104 Convert bool to float (temp float) +0:104 'b' (temp bool) +0:105 Function Call: foo8(f1; (global void) +0:105 Convert uint to float (temp float) +0:105 'u' (temp uint) +0:106 Function Call: foo8(f1; (global void) +0:106 Convert int to float (temp float) +0:106 'i' (temp int) +0:108 Function Call: foo9(u1; (global void) +0:108 Convert bool to uint (temp uint) +0:108 'b' (temp bool) +0:109 Function Call: foo9(u1; (global void) +0:109 Convert float to uint (temp uint) +0:109 'f' (temp float) +0:110 Function Call: foo9(u1; (global void) +0:110 Convert double to uint (temp uint) +0:110 'd' (temp double) +0:112 Function Call: foo10(i1; (global void) +0:112 Convert uint to int (temp int) +0:112 'u' (temp uint) +0:113 Function Call: foo10(i1; (global void) +0:113 Convert float to int (temp int) +0:113 'f' (temp float) +0:114 Function Call: foo10(i1; (global void) +0:114 Convert double to int (temp int) +0:114 'd' (temp double) +0:116 Branch: Return with expression +0:116 'input' (in 4-component vector of float) 0:? Linker Objects @@ -93,321 +279,899 @@ Linked fragment stage: Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence -0:3 Function Definition: foo1(d1;u1; (global void) +0:3 Function Definition: foo1(d1;b1; (global void) 0:2 Function Parameters: 0:2 'a' (in double) -0:2 'b' (in uint) -0:4 Function Definition: foo1(d1;i1; (global void) +0:2 'b' (in bool) +0:4 Function Definition: foo1(d1;u1; (global void) 0:3 Function Parameters: 0:3 'a' (in double) -0:3 'b' (in int) -0:5 Function Definition: foo1(d1;f1; (global void) +0:3 'b' (in uint) +0:5 Function Definition: foo1(d1;i1; (global void) 0:4 Function Parameters: 0:4 'a' (in double) -0:4 'b' (in float) -0:7 Function Definition: foo1(d1;d1; (global void) +0:4 'b' (in int) +0:6 Function Definition: foo1(d1;f1; (global void) 0:5 Function Parameters: 0:5 'a' (in double) -0:5 'b' (in double) -0:36 Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float) -0:8 Function Parameters: -0:8 'input' (in 4-component vector of float) +0:5 'b' (in float) +0:9 Function Definition: foo1(d1;d1; (global void) +0:6 Function Parameters: +0:6 'a' (in double) +0:6 'b' (in double) +0:10 Function Definition: foo2(i1;b1; (global void) +0:9 Function Parameters: +0:9 'a' (in int) +0:9 'b' (in bool) +0:11 Function Definition: foo2(i1;u1; (global void) +0:10 Function Parameters: +0:10 'a' (in int) +0:10 'b' (in uint) +0:12 Function Definition: foo2(i1;i1; (global void) +0:11 Function Parameters: +0:11 'a' (in int) +0:11 'b' (in int) +0:13 Function Definition: foo2(i1;f1; (global void) +0:12 Function Parameters: +0:12 'a' (in int) +0:12 'b' (in float) +0:16 Function Definition: foo2(i1;d1; (global void) +0:13 Function Parameters: +0:13 'a' (in int) +0:13 'b' (in double) +0:17 Function Definition: foo3(b1; (global void) +0:16 Function Parameters: +0:16 'b' (in bool) +0:18 Function Definition: foo4(u1; (global void) +0:17 Function Parameters: +0:17 'b' (in uint) +0:19 Function Definition: foo5(i1; (global void) +0:18 Function Parameters: +0:18 'b' (in int) +0:20 Function Definition: foo6(f1; (global void) +0:19 Function Parameters: +0:19 'b' (in float) +0:23 Function Definition: foo7(d1; (global void) +0:20 Function Parameters: +0:20 'b' (in double) +0:118 Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float) +0:31 Function Parameters: +0:31 'input' (in 4-component vector of float) 0:? Sequence -0:14 Function Call: foo1(d1;d1; (global void) -0:14 'd' (temp double) -0:14 'd' (temp double) -0:15 Function Call: foo1(d1;u1; (global void) -0:15 'd' (temp double) -0:15 'u' (temp uint) -0:16 Function Call: foo1(d1;i1; (global void) -0:16 'd' (temp double) -0:16 'i' (temp int) -0:17 Function Call: foo1(d1;f1; (global void) -0:17 'd' (temp double) -0:17 'f' (temp float) -0:19 Function Call: foo1(d1;d1; (global void) -0:19 Convert float to double (temp double) -0:19 'f' (temp float) -0:19 'd' (temp double) -0:20 Function Call: foo1(d1;u1; (global void) -0:20 Convert float to double (temp double) -0:20 'f' (temp float) -0:20 'u' (temp uint) -0:21 Function Call: foo1(d1;i1; (global void) -0:21 Convert float to double (temp double) -0:21 'f' (temp float) -0:21 'i' (temp int) -0:22 Function Call: foo1(d1;f1; (global void) -0:22 Convert float to double (temp double) -0:22 'f' (temp float) -0:22 'f' (temp float) -0:24 Function Call: foo1(d1;d1; (global void) -0:24 Convert uint to double (temp double) -0:24 'u' (temp uint) -0:24 'd' (temp double) -0:25 Function Call: foo1(d1;u1; (global void) -0:25 Convert uint to double (temp double) -0:25 'u' (temp uint) -0:25 'u' (temp uint) -0:26 Function Call: foo1(d1;i1; (global void) -0:26 Convert uint to double (temp double) -0:26 'u' (temp uint) -0:26 'i' (temp int) -0:27 Function Call: foo1(d1;f1; (global void) -0:27 Convert uint to double (temp double) -0:27 'u' (temp uint) -0:27 'f' (temp float) -0:29 Function Call: foo1(d1;d1; (global void) -0:29 Convert int to double (temp double) -0:29 'i' (temp int) -0:29 'd' (temp double) -0:30 Function Call: foo1(d1;u1; (global void) -0:30 Convert int to double (temp double) -0:30 'i' (temp int) -0:30 'u' (temp uint) -0:31 Function Call: foo1(d1;i1; (global void) -0:31 Convert int to double (temp double) -0:31 'i' (temp int) -0:31 'i' (temp int) -0:32 Function Call: foo1(d1;f1; (global void) -0:32 Convert int to double (temp double) -0:32 'i' (temp int) -0:32 'f' (temp float) -0:34 Branch: Return with expression -0:34 'input' (in 4-component vector of float) +0:38 Function Call: foo1(d1;b1; (global void) +0:38 'd' (temp double) +0:38 'b' (temp bool) +0:39 Function Call: foo1(d1;d1; (global void) +0:39 'd' (temp double) +0:39 'd' (temp double) +0:40 Function Call: foo1(d1;u1; (global void) +0:40 'd' (temp double) +0:40 'u' (temp uint) +0:41 Function Call: foo1(d1;i1; (global void) +0:41 'd' (temp double) +0:41 'i' (temp int) +0:42 Function Call: foo1(d1;f1; (global void) +0:42 'd' (temp double) +0:42 'f' (temp float) +0:44 Function Call: foo1(d1;b1; (global void) +0:44 Convert float to double (temp double) +0:44 'f' (temp float) +0:44 'b' (temp bool) +0:45 Function Call: foo1(d1;d1; (global void) +0:45 Convert float to double (temp double) +0:45 'f' (temp float) +0:45 'd' (temp double) +0:46 Function Call: foo1(d1;u1; (global void) +0:46 Convert float to double (temp double) +0:46 'f' (temp float) +0:46 'u' (temp uint) +0:47 Function Call: foo1(d1;i1; (global void) +0:47 Convert float to double (temp double) +0:47 'f' (temp float) +0:47 'i' (temp int) +0:48 Function Call: foo1(d1;f1; (global void) +0:48 Convert float to double (temp double) +0:48 'f' (temp float) +0:48 'f' (temp float) +0:50 Function Call: foo1(d1;b1; (global void) +0:50 Convert uint to double (temp double) +0:50 'u' (temp uint) +0:50 'b' (temp bool) +0:51 Function Call: foo1(d1;d1; (global void) +0:51 Convert uint to double (temp double) +0:51 'u' (temp uint) +0:51 'd' (temp double) +0:52 Function Call: foo1(d1;u1; (global void) +0:52 Convert uint to double (temp double) +0:52 'u' (temp uint) +0:52 'u' (temp uint) +0:53 Function Call: foo1(d1;i1; (global void) +0:53 Convert uint to double (temp double) +0:53 'u' (temp uint) +0:53 'i' (temp int) +0:54 Function Call: foo1(d1;f1; (global void) +0:54 Convert uint to double (temp double) +0:54 'u' (temp uint) +0:54 'f' (temp float) +0:56 Function Call: foo1(d1;b1; (global void) +0:56 Convert int to double (temp double) +0:56 'i' (temp int) +0:56 'b' (temp bool) +0:57 Function Call: foo1(d1;d1; (global void) +0:57 Convert int to double (temp double) +0:57 'i' (temp int) +0:57 'd' (temp double) +0:58 Function Call: foo1(d1;u1; (global void) +0:58 Convert int to double (temp double) +0:58 'i' (temp int) +0:58 'u' (temp uint) +0:59 Function Call: foo1(d1;i1; (global void) +0:59 Convert int to double (temp double) +0:59 'i' (temp int) +0:59 'i' (temp int) +0:60 Function Call: foo1(d1;f1; (global void) +0:60 Convert int to double (temp double) +0:60 'i' (temp int) +0:60 'f' (temp float) +0:62 Function Call: foo2(i1;b1; (global void) +0:62 Convert uint to int (temp int) +0:62 'u' (temp uint) +0:62 'b' (temp bool) +0:63 Function Call: foo2(i1;d1; (global void) +0:63 Convert uint to int (temp int) +0:63 'u' (temp uint) +0:63 'd' (temp double) +0:64 Function Call: foo2(i1;u1; (global void) +0:64 Convert uint to int (temp int) +0:64 'u' (temp uint) +0:64 'u' (temp uint) +0:65 Function Call: foo2(i1;i1; (global void) +0:65 Convert uint to int (temp int) +0:65 'u' (temp uint) +0:65 'i' (temp int) +0:66 Function Call: foo2(i1;f1; (global void) +0:66 Convert uint to int (temp int) +0:66 'u' (temp uint) +0:66 'f' (temp float) +0:68 Function Call: foo2(i1;b1; (global void) +0:68 'i' (temp int) +0:68 'b' (temp bool) +0:69 Function Call: foo2(i1;d1; (global void) +0:69 'i' (temp int) +0:69 'd' (temp double) +0:70 Function Call: foo2(i1;u1; (global void) +0:70 'i' (temp int) +0:70 'u' (temp uint) +0:71 Function Call: foo2(i1;i1; (global void) +0:71 'i' (temp int) +0:71 'i' (temp int) +0:72 Function Call: foo2(i1;f1; (global void) +0:72 'i' (temp int) +0:72 'f' (temp float) +0:74 Function Call: foo3(b1; (global void) +0:74 'b' (temp bool) +0:75 Function Call: foo3(b1; (global void) +0:75 Convert double to bool (temp bool) +0:75 'd' (temp double) +0:76 Function Call: foo3(b1; (global void) +0:76 Convert uint to bool (temp bool) +0:76 'u' (temp uint) +0:77 Function Call: foo3(b1; (global void) +0:77 Convert int to bool (temp bool) +0:77 'i' (temp int) +0:78 Function Call: foo3(b1; (global void) +0:78 Convert float to bool (temp bool) +0:78 'f' (temp float) +0:80 Function Call: foo4(u1; (global void) +0:80 Convert bool to uint (temp uint) +0:80 'b' (temp bool) +0:81 Function Call: foo4(u1; (global void) +0:81 Convert double to uint (temp uint) +0:81 'd' (temp double) +0:82 Function Call: foo4(u1; (global void) +0:82 'u' (temp uint) +0:83 Function Call: foo4(u1; (global void) +0:83 Convert int to uint (temp uint) +0:83 'i' (temp int) +0:84 Function Call: foo4(u1; (global void) +0:84 Convert float to uint (temp uint) +0:84 'f' (temp float) +0:86 Function Call: foo5(i1; (global void) +0:86 Convert bool to int (temp int) +0:86 'b' (temp bool) +0:87 Function Call: foo5(i1; (global void) +0:87 Convert double to int (temp int) +0:87 'd' (temp double) +0:88 Function Call: foo5(i1; (global void) +0:88 Convert uint to int (temp int) +0:88 'u' (temp uint) +0:89 Function Call: foo5(i1; (global void) +0:89 'i' (temp int) +0:90 Function Call: foo5(i1; (global void) +0:90 Convert float to int (temp int) +0:90 'f' (temp float) +0:92 Function Call: foo6(f1; (global void) +0:92 Convert bool to float (temp float) +0:92 'b' (temp bool) +0:93 Function Call: foo6(f1; (global void) +0:93 Convert double to float (temp float) +0:93 'd' (temp double) +0:94 Function Call: foo6(f1; (global void) +0:94 Convert uint to float (temp float) +0:94 'u' (temp uint) +0:95 Function Call: foo6(f1; (global void) +0:95 Convert int to float (temp float) +0:95 'i' (temp int) +0:96 Function Call: foo6(f1; (global void) +0:96 'f' (temp float) +0:98 Function Call: foo7(d1; (global void) +0:98 Convert bool to double (temp double) +0:98 'b' (temp bool) +0:99 Function Call: foo7(d1; (global void) +0:99 'd' (temp double) +0:100 Function Call: foo7(d1; (global void) +0:100 Convert uint to double (temp double) +0:100 'u' (temp uint) +0:101 Function Call: foo7(d1; (global void) +0:101 Convert int to double (temp double) +0:101 'i' (temp int) +0:102 Function Call: foo7(d1; (global void) +0:102 Convert float to double (temp double) +0:102 'f' (temp float) +0:104 Function Call: foo8(f1; (global void) +0:104 Convert bool to float (temp float) +0:104 'b' (temp bool) +0:105 Function Call: foo8(f1; (global void) +0:105 Convert uint to float (temp float) +0:105 'u' (temp uint) +0:106 Function Call: foo8(f1; (global void) +0:106 Convert int to float (temp float) +0:106 'i' (temp int) +0:108 Function Call: foo9(u1; (global void) +0:108 Convert bool to uint (temp uint) +0:108 'b' (temp bool) +0:109 Function Call: foo9(u1; (global void) +0:109 Convert float to uint (temp uint) +0:109 'f' (temp float) +0:110 Function Call: foo9(u1; (global void) +0:110 Convert double to uint (temp uint) +0:110 'd' (temp double) +0:112 Function Call: foo10(i1; (global void) +0:112 Convert uint to int (temp int) +0:112 'u' (temp uint) +0:113 Function Call: foo10(i1; (global void) +0:113 Convert float to int (temp int) +0:113 'f' (temp float) +0:114 Function Call: foo10(i1; (global void) +0:114 Convert double to int (temp int) +0:114 'd' (temp double) +0:116 Branch: Return with expression +0:116 'input' (in 4-component vector of float) 0:? Linker Objects +Missing functionality: missing user function; linker needs to catch that // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 135 +// Id's are bound by 369 Capability Shader Capability Float64 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 132 + EntryPoint Fragment 4 "PixelShaderFunction" 366 ExecutionMode 4 OriginUpperLeft Name 4 "PixelShaderFunction" - Name 13 "foo1(d1;u1;" + Name 13 "foo1(d1;b1;" Name 11 "a" Name 12 "b" - Name 20 "foo1(d1;i1;" + Name 20 "foo1(d1;u1;" Name 18 "a" Name 19 "b" - Name 27 "foo1(d1;f1;" + Name 27 "foo1(d1;i1;" Name 25 "a" Name 26 "b" - Name 32 "foo1(d1;d1;" - Name 30 "a" - Name 31 "b" - Name 34 "d" - Name 35 "param" - Name 37 "param" - Name 40 "u" - Name 41 "param" - Name 43 "param" - Name 46 "i" - Name 47 "param" - Name 49 "param" - Name 52 "f" - Name 53 "param" - Name 55 "param" - Name 60 "param" - Name 61 "param" - Name 66 "param" - Name 67 "param" - Name 72 "param" - Name 73 "param" - Name 78 "param" - Name 79 "param" - Name 84 "param" - Name 85 "param" + Name 34 "foo1(d1;f1;" + Name 32 "a" + Name 33 "b" + Name 39 "foo1(d1;d1;" + Name 37 "a" + Name 38 "b" + Name 44 "foo2(i1;b1;" + Name 42 "a" + Name 43 "b" + Name 49 "foo2(i1;u1;" + Name 47 "a" + Name 48 "b" + Name 54 "foo2(i1;i1;" + Name 52 "a" + Name 53 "b" + Name 59 "foo2(i1;f1;" + Name 57 "a" + Name 58 "b" + Name 64 "foo2(i1;d1;" + Name 62 "a" + Name 63 "b" + Name 68 "foo3(b1;" + Name 67 "b" + Name 72 "foo4(u1;" + Name 71 "b" + Name 76 "foo5(i1;" + Name 75 "b" + Name 80 "foo6(f1;" + Name 79 "b" + Name 84 "foo7(d1;" + Name 83 "b" + Name 86 "d" + Name 87 "b" + Name 88 "param" Name 90 "param" - Name 91 "param" - Name 96 "param" - Name 97 "param" - Name 102 "param" - Name 103 "param" - Name 108 "param" - Name 109 "param" - Name 114 "param" - Name 115 "param" - Name 120 "param" - Name 121 "param" - Name 126 "param" - Name 127 "param" - Name 132 "input" + Name 93 "param" + Name 95 "param" + Name 98 "u" + Name 99 "param" + Name 101 "param" + Name 104 "i" + Name 105 "param" + Name 107 "param" + Name 110 "f" + Name 111 "param" + Name 113 "param" + Name 118 "param" + Name 119 "param" + Name 124 "param" + Name 125 "param" + Name 130 "param" + Name 131 "param" + Name 136 "param" + Name 137 "param" + Name 142 "param" + Name 143 "param" + Name 148 "param" + Name 149 "param" + Name 154 "param" + Name 155 "param" + Name 160 "param" + Name 161 "param" + Name 166 "param" + Name 167 "param" + Name 172 "param" + Name 173 "param" + Name 178 "param" + Name 179 "param" + Name 184 "param" + Name 185 "param" + Name 190 "param" + Name 191 "param" + Name 196 "param" + Name 197 "param" + Name 202 "param" + Name 203 "param" + Name 208 "param" + Name 209 "param" + Name 214 "param" + Name 215 "param" + Name 220 "param" + Name 221 "param" + Name 226 "param" + Name 227 "param" + Name 232 "param" + Name 233 "param" + Name 236 "param" + Name 238 "param" + Name 241 "param" + Name 243 "param" + Name 246 "param" + Name 248 "param" + Name 251 "param" + Name 253 "param" + Name 256 "param" + Name 258 "param" + Name 261 "param" + Name 267 "param" + Name 272 "param" + Name 276 "param" + Name 281 "param" + Name 286 "param" + Name 290 "param" + Name 292 "param" + Name 297 "param" + Name 301 "param" + Name 307 "param" + Name 311 "param" + Name 315 "param" + Name 317 "param" + Name 322 "param" + Name 327 "param" + Name 331 "param" + Name 335 "param" + Name 339 "param" + Name 341 "param" + Name 347 "param" + Name 349 "param" + Name 354 "param" + Name 358 "param" + Name 362 "param" + Name 366 "input" 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 64 7: TypePointer Function 6(float) - 8: TypeInt 32 0 - 9: TypePointer Function 8(int) + 8: TypeBool + 9: TypePointer Function 8(bool) 10: TypeFunction 2 7(ptr) 9(ptr) - 15: TypeInt 32 1 + 15: TypeInt 32 0 16: TypePointer Function 15(int) 17: TypeFunction 2 7(ptr) 16(ptr) - 22: TypeFloat 32 - 23: TypePointer Function 22(float) + 22: TypeInt 32 1 + 23: TypePointer Function 22(int) 24: TypeFunction 2 7(ptr) 23(ptr) - 29: TypeFunction 2 7(ptr) 7(ptr) - 130: TypeVector 22(float) 4 - 131: TypePointer Input 130(fvec4) - 132(input): 131(ptr) Variable Input + 29: TypeFloat 32 + 30: TypePointer Function 29(float) + 31: TypeFunction 2 7(ptr) 30(ptr) + 36: TypeFunction 2 7(ptr) 7(ptr) + 41: TypeFunction 2 23(ptr) 9(ptr) + 46: TypeFunction 2 23(ptr) 16(ptr) + 51: TypeFunction 2 23(ptr) 23(ptr) + 56: TypeFunction 2 23(ptr) 30(ptr) + 61: TypeFunction 2 23(ptr) 7(ptr) + 66: TypeFunction 2 9(ptr) + 70: TypeFunction 2 16(ptr) + 74: TypeFunction 2 23(ptr) + 78: TypeFunction 2 30(ptr) + 82: TypeFunction 2 7(ptr) + 265: 6(float) Constant 0 0 + 270: 15(int) Constant 0 + 279: 29(float) Constant 0 + 284: 15(int) Constant 1 + 304: 22(int) Constant 0 + 305: 22(int) Constant 1 + 325: 29(float) Constant 1065353216 + 345: 6(float) Constant 0 1072693248 + 364: TypeVector 29(float) 4 + 365: TypePointer Input 364(fvec4) + 366(input): 365(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label - 34(d): 7(ptr) Variable Function - 35(param): 7(ptr) Variable Function - 37(param): 7(ptr) Variable Function - 40(u): 9(ptr) Variable Function - 41(param): 7(ptr) Variable Function - 43(param): 9(ptr) Variable Function - 46(i): 16(ptr) Variable Function - 47(param): 7(ptr) Variable Function - 49(param): 16(ptr) Variable Function - 52(f): 23(ptr) Variable Function - 53(param): 7(ptr) Variable Function - 55(param): 23(ptr) Variable Function - 60(param): 7(ptr) Variable Function - 61(param): 7(ptr) Variable Function - 66(param): 7(ptr) Variable Function - 67(param): 9(ptr) Variable Function - 72(param): 7(ptr) Variable Function - 73(param): 16(ptr) Variable Function - 78(param): 7(ptr) Variable Function - 79(param): 23(ptr) Variable Function - 84(param): 7(ptr) Variable Function - 85(param): 7(ptr) Variable Function - 90(param): 7(ptr) Variable Function - 91(param): 9(ptr) Variable Function - 96(param): 7(ptr) Variable Function - 97(param): 16(ptr) Variable Function - 102(param): 7(ptr) Variable Function - 103(param): 23(ptr) Variable Function - 108(param): 7(ptr) Variable Function - 109(param): 7(ptr) Variable Function - 114(param): 7(ptr) Variable Function - 115(param): 9(ptr) Variable Function - 120(param): 7(ptr) Variable Function - 121(param): 16(ptr) Variable Function - 126(param): 7(ptr) Variable Function - 127(param): 23(ptr) Variable Function - 36: 6(float) Load 34(d) - Store 35(param) 36 - 38: 6(float) Load 34(d) - Store 37(param) 38 - 39: 2 FunctionCall 32(foo1(d1;d1;) 35(param) 37(param) - 42: 6(float) Load 34(d) - Store 41(param) 42 - 44: 8(int) Load 40(u) - Store 43(param) 44 - 45: 2 FunctionCall 13(foo1(d1;u1;) 41(param) 43(param) - 48: 6(float) Load 34(d) - Store 47(param) 48 - 50: 15(int) Load 46(i) - Store 49(param) 50 - 51: 2 FunctionCall 20(foo1(d1;i1;) 47(param) 49(param) - 54: 6(float) Load 34(d) - Store 53(param) 54 - 56: 22(float) Load 52(f) - Store 55(param) 56 - 57: 2 FunctionCall 27(foo1(d1;f1;) 53(param) 55(param) - 58: 22(float) Load 52(f) - 59: 6(float) FConvert 58 - Store 60(param) 59 - 62: 6(float) Load 34(d) - Store 61(param) 62 - 63: 2 FunctionCall 32(foo1(d1;d1;) 60(param) 61(param) - 64: 22(float) Load 52(f) - 65: 6(float) FConvert 64 - Store 66(param) 65 - 68: 8(int) Load 40(u) - Store 67(param) 68 - 69: 2 FunctionCall 13(foo1(d1;u1;) 66(param) 67(param) - 70: 22(float) Load 52(f) - 71: 6(float) FConvert 70 - Store 72(param) 71 - 74: 15(int) Load 46(i) - Store 73(param) 74 - 75: 2 FunctionCall 20(foo1(d1;i1;) 72(param) 73(param) - 76: 22(float) Load 52(f) - 77: 6(float) FConvert 76 - Store 78(param) 77 - 80: 22(float) Load 52(f) - Store 79(param) 80 - 81: 2 FunctionCall 27(foo1(d1;f1;) 78(param) 79(param) - 82: 8(int) Load 40(u) - 83: 6(float) ConvertUToF 82 - Store 84(param) 83 - 86: 6(float) Load 34(d) - Store 85(param) 86 - 87: 2 FunctionCall 32(foo1(d1;d1;) 84(param) 85(param) - 88: 8(int) Load 40(u) - 89: 6(float) ConvertUToF 88 - Store 90(param) 89 - 92: 8(int) Load 40(u) - Store 91(param) 92 - 93: 2 FunctionCall 13(foo1(d1;u1;) 90(param) 91(param) - 94: 8(int) Load 40(u) - 95: 6(float) ConvertUToF 94 - Store 96(param) 95 - 98: 15(int) Load 46(i) - Store 97(param) 98 - 99: 2 FunctionCall 20(foo1(d1;i1;) 96(param) 97(param) - 100: 8(int) Load 40(u) - 101: 6(float) ConvertUToF 100 - Store 102(param) 101 - 104: 22(float) Load 52(f) - Store 103(param) 104 - 105: 2 FunctionCall 27(foo1(d1;f1;) 102(param) 103(param) - 106: 15(int) Load 46(i) - 107: 6(float) ConvertSToF 106 - Store 108(param) 107 - 110: 6(float) Load 34(d) - Store 109(param) 110 - 111: 2 FunctionCall 32(foo1(d1;d1;) 108(param) 109(param) - 112: 15(int) Load 46(i) - 113: 6(float) ConvertSToF 112 - Store 114(param) 113 - 116: 8(int) Load 40(u) - Store 115(param) 116 - 117: 2 FunctionCall 13(foo1(d1;u1;) 114(param) 115(param) - 118: 15(int) Load 46(i) - 119: 6(float) ConvertSToF 118 - Store 120(param) 119 - 122: 15(int) Load 46(i) - Store 121(param) 122 - 123: 2 FunctionCall 20(foo1(d1;i1;) 120(param) 121(param) - 124: 15(int) Load 46(i) - 125: 6(float) ConvertSToF 124 - Store 126(param) 125 - 128: 22(float) Load 52(f) - Store 127(param) 128 - 129: 2 FunctionCall 27(foo1(d1;f1;) 126(param) 127(param) - 133: 130(fvec4) Load 132(input) - ReturnValue 133 + 86(d): 7(ptr) Variable Function + 87(b): 9(ptr) Variable Function + 88(param): 7(ptr) Variable Function + 90(param): 9(ptr) Variable Function + 93(param): 7(ptr) Variable Function + 95(param): 7(ptr) Variable Function + 98(u): 16(ptr) Variable Function + 99(param): 7(ptr) Variable Function + 101(param): 16(ptr) Variable Function + 104(i): 23(ptr) Variable Function + 105(param): 7(ptr) Variable Function + 107(param): 23(ptr) Variable Function + 110(f): 30(ptr) Variable Function + 111(param): 7(ptr) Variable Function + 113(param): 30(ptr) Variable Function + 118(param): 7(ptr) Variable Function + 119(param): 9(ptr) Variable Function + 124(param): 7(ptr) Variable Function + 125(param): 7(ptr) Variable Function + 130(param): 7(ptr) Variable Function + 131(param): 16(ptr) Variable Function + 136(param): 7(ptr) Variable Function + 137(param): 23(ptr) Variable Function + 142(param): 7(ptr) Variable Function + 143(param): 30(ptr) Variable Function + 148(param): 7(ptr) Variable Function + 149(param): 9(ptr) Variable Function + 154(param): 7(ptr) Variable Function + 155(param): 7(ptr) Variable Function + 160(param): 7(ptr) Variable Function + 161(param): 16(ptr) Variable Function + 166(param): 7(ptr) Variable Function + 167(param): 23(ptr) Variable Function + 172(param): 7(ptr) Variable Function + 173(param): 30(ptr) Variable Function + 178(param): 7(ptr) Variable Function + 179(param): 9(ptr) Variable Function + 184(param): 7(ptr) Variable Function + 185(param): 7(ptr) Variable Function + 190(param): 7(ptr) Variable Function + 191(param): 16(ptr) Variable Function + 196(param): 7(ptr) Variable Function + 197(param): 23(ptr) Variable Function + 202(param): 7(ptr) Variable Function + 203(param): 30(ptr) Variable Function + 208(param): 23(ptr) Variable Function + 209(param): 9(ptr) Variable Function + 214(param): 23(ptr) Variable Function + 215(param): 7(ptr) Variable Function + 220(param): 23(ptr) Variable Function + 221(param): 16(ptr) Variable Function + 226(param): 23(ptr) Variable Function + 227(param): 23(ptr) Variable Function + 232(param): 23(ptr) Variable Function + 233(param): 30(ptr) Variable Function + 236(param): 23(ptr) Variable Function + 238(param): 9(ptr) Variable Function + 241(param): 23(ptr) Variable Function + 243(param): 7(ptr) Variable Function + 246(param): 23(ptr) Variable Function + 248(param): 16(ptr) Variable Function + 251(param): 23(ptr) Variable Function + 253(param): 23(ptr) Variable Function + 256(param): 23(ptr) Variable Function + 258(param): 30(ptr) Variable Function + 261(param): 9(ptr) Variable Function + 267(param): 9(ptr) Variable Function + 272(param): 9(ptr) Variable Function + 276(param): 9(ptr) Variable Function + 281(param): 9(ptr) Variable Function + 286(param): 16(ptr) Variable Function + 290(param): 16(ptr) Variable Function + 292(param): 16(ptr) Variable Function + 297(param): 16(ptr) Variable Function + 301(param): 16(ptr) Variable Function + 307(param): 23(ptr) Variable Function + 311(param): 23(ptr) Variable Function + 315(param): 23(ptr) Variable Function + 317(param): 23(ptr) Variable Function + 322(param): 23(ptr) Variable Function + 327(param): 30(ptr) Variable Function + 331(param): 30(ptr) Variable Function + 335(param): 30(ptr) Variable Function + 339(param): 30(ptr) Variable Function + 341(param): 30(ptr) Variable Function + 347(param): 7(ptr) Variable Function + 349(param): 7(ptr) Variable Function + 354(param): 7(ptr) Variable Function + 358(param): 7(ptr) Variable Function + 362(param): 7(ptr) Variable Function + 89: 6(float) Load 86(d) + Store 88(param) 89 + 91: 8(bool) Load 87(b) + Store 90(param) 91 + 92: 2 FunctionCall 13(foo1(d1;b1;) 88(param) 90(param) + 94: 6(float) Load 86(d) + Store 93(param) 94 + 96: 6(float) Load 86(d) + Store 95(param) 96 + 97: 2 FunctionCall 39(foo1(d1;d1;) 93(param) 95(param) + 100: 6(float) Load 86(d) + Store 99(param) 100 + 102: 15(int) Load 98(u) + Store 101(param) 102 + 103: 2 FunctionCall 20(foo1(d1;u1;) 99(param) 101(param) + 106: 6(float) Load 86(d) + Store 105(param) 106 + 108: 22(int) Load 104(i) + Store 107(param) 108 + 109: 2 FunctionCall 27(foo1(d1;i1;) 105(param) 107(param) + 112: 6(float) Load 86(d) + Store 111(param) 112 + 114: 29(float) Load 110(f) + Store 113(param) 114 + 115: 2 FunctionCall 34(foo1(d1;f1;) 111(param) 113(param) + 116: 29(float) Load 110(f) + 117: 6(float) FConvert 116 + Store 118(param) 117 + 120: 8(bool) Load 87(b) + Store 119(param) 120 + 121: 2 FunctionCall 13(foo1(d1;b1;) 118(param) 119(param) + 122: 29(float) Load 110(f) + 123: 6(float) FConvert 122 + Store 124(param) 123 + 126: 6(float) Load 86(d) + Store 125(param) 126 + 127: 2 FunctionCall 39(foo1(d1;d1;) 124(param) 125(param) + 128: 29(float) Load 110(f) + 129: 6(float) FConvert 128 + Store 130(param) 129 + 132: 15(int) Load 98(u) + Store 131(param) 132 + 133: 2 FunctionCall 20(foo1(d1;u1;) 130(param) 131(param) + 134: 29(float) Load 110(f) + 135: 6(float) FConvert 134 + Store 136(param) 135 + 138: 22(int) Load 104(i) + Store 137(param) 138 + 139: 2 FunctionCall 27(foo1(d1;i1;) 136(param) 137(param) + 140: 29(float) Load 110(f) + 141: 6(float) FConvert 140 + Store 142(param) 141 + 144: 29(float) Load 110(f) + Store 143(param) 144 + 145: 2 FunctionCall 34(foo1(d1;f1;) 142(param) 143(param) + 146: 15(int) Load 98(u) + 147: 6(float) ConvertUToF 146 + Store 148(param) 147 + 150: 8(bool) Load 87(b) + Store 149(param) 150 + 151: 2 FunctionCall 13(foo1(d1;b1;) 148(param) 149(param) + 152: 15(int) Load 98(u) + 153: 6(float) ConvertUToF 152 + Store 154(param) 153 + 156: 6(float) Load 86(d) + Store 155(param) 156 + 157: 2 FunctionCall 39(foo1(d1;d1;) 154(param) 155(param) + 158: 15(int) Load 98(u) + 159: 6(float) ConvertUToF 158 + Store 160(param) 159 + 162: 15(int) Load 98(u) + Store 161(param) 162 + 163: 2 FunctionCall 20(foo1(d1;u1;) 160(param) 161(param) + 164: 15(int) Load 98(u) + 165: 6(float) ConvertUToF 164 + Store 166(param) 165 + 168: 22(int) Load 104(i) + Store 167(param) 168 + 169: 2 FunctionCall 27(foo1(d1;i1;) 166(param) 167(param) + 170: 15(int) Load 98(u) + 171: 6(float) ConvertUToF 170 + Store 172(param) 171 + 174: 29(float) Load 110(f) + Store 173(param) 174 + 175: 2 FunctionCall 34(foo1(d1;f1;) 172(param) 173(param) + 176: 22(int) Load 104(i) + 177: 6(float) ConvertSToF 176 + Store 178(param) 177 + 180: 8(bool) Load 87(b) + Store 179(param) 180 + 181: 2 FunctionCall 13(foo1(d1;b1;) 178(param) 179(param) + 182: 22(int) Load 104(i) + 183: 6(float) ConvertSToF 182 + Store 184(param) 183 + 186: 6(float) Load 86(d) + Store 185(param) 186 + 187: 2 FunctionCall 39(foo1(d1;d1;) 184(param) 185(param) + 188: 22(int) Load 104(i) + 189: 6(float) ConvertSToF 188 + Store 190(param) 189 + 192: 15(int) Load 98(u) + Store 191(param) 192 + 193: 2 FunctionCall 20(foo1(d1;u1;) 190(param) 191(param) + 194: 22(int) Load 104(i) + 195: 6(float) ConvertSToF 194 + Store 196(param) 195 + 198: 22(int) Load 104(i) + Store 197(param) 198 + 199: 2 FunctionCall 27(foo1(d1;i1;) 196(param) 197(param) + 200: 22(int) Load 104(i) + 201: 6(float) ConvertSToF 200 + Store 202(param) 201 + 204: 29(float) Load 110(f) + Store 203(param) 204 + 205: 2 FunctionCall 34(foo1(d1;f1;) 202(param) 203(param) + 206: 15(int) Load 98(u) + 207: 22(int) Bitcast 206 + Store 208(param) 207 + 210: 8(bool) Load 87(b) + Store 209(param) 210 + 211: 2 FunctionCall 44(foo2(i1;b1;) 208(param) 209(param) + 212: 15(int) Load 98(u) + 213: 22(int) Bitcast 212 + Store 214(param) 213 + 216: 6(float) Load 86(d) + Store 215(param) 216 + 217: 2 FunctionCall 64(foo2(i1;d1;) 214(param) 215(param) + 218: 15(int) Load 98(u) + 219: 22(int) Bitcast 218 + Store 220(param) 219 + 222: 15(int) Load 98(u) + Store 221(param) 222 + 223: 2 FunctionCall 49(foo2(i1;u1;) 220(param) 221(param) + 224: 15(int) Load 98(u) + 225: 22(int) Bitcast 224 + Store 226(param) 225 + 228: 22(int) Load 104(i) + Store 227(param) 228 + 229: 2 FunctionCall 54(foo2(i1;i1;) 226(param) 227(param) + 230: 15(int) Load 98(u) + 231: 22(int) Bitcast 230 + Store 232(param) 231 + 234: 29(float) Load 110(f) + Store 233(param) 234 + 235: 2 FunctionCall 59(foo2(i1;f1;) 232(param) 233(param) + 237: 22(int) Load 104(i) + Store 236(param) 237 + 239: 8(bool) Load 87(b) + Store 238(param) 239 + 240: 2 FunctionCall 44(foo2(i1;b1;) 236(param) 238(param) + 242: 22(int) Load 104(i) + Store 241(param) 242 + 244: 6(float) Load 86(d) + Store 243(param) 244 + 245: 2 FunctionCall 64(foo2(i1;d1;) 241(param) 243(param) + 247: 22(int) Load 104(i) + Store 246(param) 247 + 249: 15(int) Load 98(u) + Store 248(param) 249 + 250: 2 FunctionCall 49(foo2(i1;u1;) 246(param) 248(param) + 252: 22(int) Load 104(i) + Store 251(param) 252 + 254: 22(int) Load 104(i) + Store 253(param) 254 + 255: 2 FunctionCall 54(foo2(i1;i1;) 251(param) 253(param) + 257: 22(int) Load 104(i) + Store 256(param) 257 + 259: 29(float) Load 110(f) + Store 258(param) 259 + 260: 2 FunctionCall 59(foo2(i1;f1;) 256(param) 258(param) + 262: 8(bool) Load 87(b) + Store 261(param) 262 + 263: 2 FunctionCall 68(foo3(b1;) 261(param) + 264: 6(float) Load 86(d) + 266: 8(bool) FOrdNotEqual 264 265 + Store 267(param) 266 + 268: 2 FunctionCall 68(foo3(b1;) 267(param) + 269: 15(int) Load 98(u) + 271: 8(bool) INotEqual 269 270 + Store 272(param) 271 + 273: 2 FunctionCall 68(foo3(b1;) 272(param) + 274: 22(int) Load 104(i) + 275: 8(bool) INotEqual 274 270 + Store 276(param) 275 + 277: 2 FunctionCall 68(foo3(b1;) 276(param) + 278: 29(float) Load 110(f) + 280: 8(bool) FOrdNotEqual 278 279 + Store 281(param) 280 + 282: 2 FunctionCall 68(foo3(b1;) 281(param) + 283: 8(bool) Load 87(b) + 285: 15(int) Select 283 284 270 + Store 286(param) 285 + 287: 2 FunctionCall 72(foo4(u1;) 286(param) + 288: 6(float) Load 86(d) + 289: 15(int) ConvertFToU 288 + Store 290(param) 289 + 291: 2 FunctionCall 72(foo4(u1;) 290(param) + 293: 15(int) Load 98(u) + Store 292(param) 293 + 294: 2 FunctionCall 72(foo4(u1;) 292(param) + 295: 22(int) Load 104(i) + 296: 15(int) Bitcast 295 + Store 297(param) 296 + 298: 2 FunctionCall 72(foo4(u1;) 297(param) + 299: 29(float) Load 110(f) + 300: 15(int) ConvertFToU 299 + Store 301(param) 300 + 302: 2 FunctionCall 72(foo4(u1;) 301(param) + 303: 8(bool) Load 87(b) + 306: 22(int) Select 303 305 304 + Store 307(param) 306 + 308: 2 FunctionCall 76(foo5(i1;) 307(param) + 309: 6(float) Load 86(d) + 310: 22(int) ConvertFToS 309 + Store 311(param) 310 + 312: 2 FunctionCall 76(foo5(i1;) 311(param) + 313: 15(int) Load 98(u) + 314: 22(int) Bitcast 313 + Store 315(param) 314 + 316: 2 FunctionCall 76(foo5(i1;) 315(param) + 318: 22(int) Load 104(i) + Store 317(param) 318 + 319: 2 FunctionCall 76(foo5(i1;) 317(param) + 320: 29(float) Load 110(f) + 321: 22(int) ConvertFToS 320 + Store 322(param) 321 + 323: 2 FunctionCall 76(foo5(i1;) 322(param) + 324: 8(bool) Load 87(b) + 326: 29(float) Select 324 325 279 + Store 327(param) 326 + 328: 2 FunctionCall 80(foo6(f1;) 327(param) + 329: 6(float) Load 86(d) + 330: 29(float) FConvert 329 + Store 331(param) 330 + 332: 2 FunctionCall 80(foo6(f1;) 331(param) + 333: 15(int) Load 98(u) + 334: 29(float) ConvertUToF 333 + Store 335(param) 334 + 336: 2 FunctionCall 80(foo6(f1;) 335(param) + 337: 22(int) Load 104(i) + 338: 29(float) ConvertSToF 337 + Store 339(param) 338 + 340: 2 FunctionCall 80(foo6(f1;) 339(param) + 342: 29(float) Load 110(f) + Store 341(param) 342 + 343: 2 FunctionCall 80(foo6(f1;) 341(param) + 344: 8(bool) Load 87(b) + 346: 6(float) Select 344 345 265 + Store 347(param) 346 + 348: 2 FunctionCall 84(foo7(d1;) 347(param) + 350: 6(float) Load 86(d) + Store 349(param) 350 + 351: 2 FunctionCall 84(foo7(d1;) 349(param) + 352: 15(int) Load 98(u) + 353: 6(float) ConvertUToF 352 + Store 354(param) 353 + 355: 2 FunctionCall 84(foo7(d1;) 354(param) + 356: 22(int) Load 104(i) + 357: 6(float) ConvertSToF 356 + Store 358(param) 357 + 359: 2 FunctionCall 84(foo7(d1;) 358(param) + 360: 29(float) Load 110(f) + 361: 6(float) FConvert 360 + Store 362(param) 361 + 363: 2 FunctionCall 84(foo7(d1;) 362(param) + 367: 364(fvec4) Load 366(input) + ReturnValue 367 FunctionEnd - 13(foo1(d1;u1;): 2 Function None 10 + 13(foo1(d1;b1;): 2 Function None 10 11(a): 7(ptr) FunctionParameter 12(b): 9(ptr) FunctionParameter 14: Label Return FunctionEnd - 20(foo1(d1;i1;): 2 Function None 17 + 20(foo1(d1;u1;): 2 Function None 17 18(a): 7(ptr) FunctionParameter 19(b): 16(ptr) FunctionParameter 21: Label Return FunctionEnd - 27(foo1(d1;f1;): 2 Function None 24 + 27(foo1(d1;i1;): 2 Function None 24 25(a): 7(ptr) FunctionParameter 26(b): 23(ptr) FunctionParameter 28: Label Return FunctionEnd - 32(foo1(d1;d1;): 2 Function None 29 - 30(a): 7(ptr) FunctionParameter - 31(b): 7(ptr) FunctionParameter - 33: Label + 34(foo1(d1;f1;): 2 Function None 31 + 32(a): 7(ptr) FunctionParameter + 33(b): 30(ptr) FunctionParameter + 35: Label + Return + FunctionEnd + 39(foo1(d1;d1;): 2 Function None 36 + 37(a): 7(ptr) FunctionParameter + 38(b): 7(ptr) FunctionParameter + 40: Label + Return + FunctionEnd + 44(foo2(i1;b1;): 2 Function None 41 + 42(a): 23(ptr) FunctionParameter + 43(b): 9(ptr) FunctionParameter + 45: Label + Return + FunctionEnd + 49(foo2(i1;u1;): 2 Function None 46 + 47(a): 23(ptr) FunctionParameter + 48(b): 16(ptr) FunctionParameter + 50: Label + Return + FunctionEnd + 54(foo2(i1;i1;): 2 Function None 51 + 52(a): 23(ptr) FunctionParameter + 53(b): 23(ptr) FunctionParameter + 55: Label + Return + FunctionEnd + 59(foo2(i1;f1;): 2 Function None 56 + 57(a): 23(ptr) FunctionParameter + 58(b): 30(ptr) FunctionParameter + 60: Label + Return + FunctionEnd + 64(foo2(i1;d1;): 2 Function None 61 + 62(a): 23(ptr) FunctionParameter + 63(b): 7(ptr) FunctionParameter + 65: Label + Return + FunctionEnd + 68(foo3(b1;): 2 Function None 66 + 67(b): 9(ptr) FunctionParameter + 69: Label + Return + FunctionEnd + 72(foo4(u1;): 2 Function None 70 + 71(b): 16(ptr) FunctionParameter + 73: Label + Return + FunctionEnd + 76(foo5(i1;): 2 Function None 74 + 75(b): 23(ptr) FunctionParameter + 77: Label + Return + FunctionEnd + 80(foo6(f1;): 2 Function None 78 + 79(b): 30(ptr) FunctionParameter + 81: Label + Return + FunctionEnd + 84(foo7(d1;): 2 Function None 82 + 83(b): 7(ptr) FunctionParameter + 85: Label Return FunctionEnd diff --git a/Test/hlsl.overload.frag b/Test/hlsl.overload.frag index feaee7f..2202ae0 100644 --- a/Test/hlsl.overload.frag +++ b/Test/hlsl.overload.frag @@ -1,35 +1,117 @@ // function selection under type conversion +void foo1(double a, bool b) {} void foo1(double a, uint b) {} void foo1(double a, int b) {} void foo1(double a, float b) {} void foo1(double a, double b){} +// uint -> int +void foo2(int a, bool b) {} +void foo2(int a, uint b) {} +void foo2(int a, int b) {} +void foo2(int a, float b) {} +void foo2(int a, double b){} + +// everything can promote +void foo3(bool b) {} +void foo4(uint b) {} +void foo5(int b) {} +void foo6(float b) {} +void foo7(double b){} + +// shorter forward chain better than longer or backward chain +void foo8(float); +void foo8(double); +void foo9(int); +void foo9(uint); +void foo10(bool); +void foo10(int); + float4 PixelShaderFunction(float4 input) : COLOR0 { + bool b; double d; uint u; int i; float f; + foo1(d, b); foo1(d, d); foo1(d, u); foo1(d, i); foo1(d, f); + foo1(f, b); foo1(f, d); foo1(f, u); foo1(f, i); foo1(f, f); + foo1(u, b); foo1(u, d); foo1(u, u); foo1(u, i); foo1(u, f); + foo1(i, b); foo1(i, d); foo1(i, u); foo1(i, i); foo1(i, f); + foo2(u, b); + foo2(u, d); + foo2(u, u); + foo2(u, i); + foo2(u, f); + + foo2(i, b); + foo2(i, d); + foo2(i, u); + foo2(i, i); + foo2(i, f); + + foo3(b); + foo3(d); + foo3(u); + foo3(i); + foo3(f); + + foo4(b); + foo4(d); + foo4(u); + foo4(i); + foo4(f); + + foo5(b); + foo5(d); + foo5(u); + foo5(i); + foo5(f); + + foo6(b); + foo6(d); + foo6(u); + foo6(i); + foo6(f); + + foo7(b); + foo7(d); + foo7(u); + foo7(i); + foo7(f); + + foo8(b); + foo8(u); + foo8(i); + + foo9(b); + foo9(f); + foo9(d); + + foo10(u); + foo10(f); + foo10(d); + return input; } diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index f77aad9..b239be1 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -2,5 +2,5 @@ // For the version, it uses the latest git tag followed by the number of commits. // For the date, it uses the current date (when then script is run). -#define GLSLANG_REVISION "Overload400-PrecQual.1433" -#define GLSLANG_DATE "24-Aug-2016" +#define GLSLANG_REVISION "Overload400-PrecQual.1434" +#define GLSLANG_DATE "25-Aug-2016" diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index bfa2dea..325f84f 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -750,6 +750,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EOpDivAssign: // ... case EOpModAssign: // ... case EOpReturn: // function returns can also perform arbitrary conversions + case EOpFunctionCall: // conversion of a calling parameter return true; default: break; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 9e2bb87..07eb00f 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -3567,27 +3567,46 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu return true; if (from.isArray() || to.isArray() || ! from.sameElementShape(to)) return false; - return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType()); + return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType(), EOpFunctionCall); }; // Is 'to2' a better conversion than 'to1'? // Ties should not be considered as better. // Assumes 'convertible' already said true. auto better = [](const TType& from, const TType& to1, const TType& to2) { - // 1. exact match + // exact match is always better than mismatch if (from == to2) return from != to1; if (from == to1) return false; - // 2. float -> double is better + // float -> double is better than any other float conversion if (from.getBasicType() == EbtFloat) { if (to2.getBasicType() == EbtDouble && to1.getBasicType() != EbtDouble) return true; } - // 3. -> float is better than -> double - return to2.getBasicType() == EbtFloat && to1.getBasicType() == EbtDouble; + // int -> uint is better than any other int conversion + if (from.getBasicType() == EbtInt) { + if (to2.getBasicType() == EbtUint && to1.getBasicType() != EbtUint) + return true; + } + + // TODO: these should be replaced by a more generic "shorter chain is better than longer chain" rule + + // -> float is better than -> double + if (to2.getBasicType() == EbtFloat && to1.getBasicType() == EbtDouble) + return true; + + // -> int is better than -> bool + if ((to2.getBasicType() == EbtInt || to2.getBasicType() == EbtUint) && to1.getBasicType() == EbtBool) + return true; + + // -> uint is better than -> int + if (to2.getBasicType() == EbtUint && to1.getBasicType() == EbtInt) + return true; + + return false; }; // for ambiguity reporting -- 2.7.4