Front-ends GLSL/HLSL: Fix initializer lists for structs of one member.

Single member structs initialized with an initializer list had
an incorrect argument for constructor emulation.
This commit is contained in:
John Kessenich 2016-07-29 18:22:22 -06:00
parent 96e9f47cbb
commit ff13213547
8 changed files with 567 additions and 331 deletions

View File

@ -51,6 +51,18 @@ struct S4 {
S3 s[2]; S3 s[2];
}; };
struct Single1 { int f; };
Single1 single1 = { 10 };
struct Single2 { uvec2 v; };
Single2 single2 = { { 1, 2 } };
struct Single3 { Single1 s1; };
Single3 single3 = { { 3 } };
struct Single4 { Single2 s1; };
Single4 single4 = { { { 4u, 5u } } };
const S4 constructed = S4(uvec2(1, 2), const S4 constructed = S4(uvec2(1, 2),
S3[2](S3(3.0, mat2x3(4.0)), S3[2](S3(3.0, mat2x3(4.0)),
S3(5.0, mat2x3(6.0)))); S3(5.0, mat2x3(6.0))));

View File

@ -732,7 +732,7 @@ ERROR: 0:29: 'const 2-element array of 4-component vector of float' : cannot con
ERROR: 0:29: '=' : cannot convert from 'const float' to 'global 2-element array of 4-component vector of float' ERROR: 0:29: '=' : cannot convert from 'const float' to 'global 2-element array of 4-component vector of float'
ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float
ERROR: 0:40: 'constructor' : cannot convert parameter 1 from 'temp float' to 'temp structure{global float s, global float t}' ERROR: 0:40: 'constructor' : cannot convert parameter 1 from 'temp float' to 'temp structure{global float s, global float t}'
ERROR: 0:58: 'initializer list' : wrong number of structure members ERROR: 0:70: 'initializer list' : wrong number of structure members
ERROR: 13 compilation errors. No code generated. ERROR: 13 compilation errors. No code generated.
@ -770,51 +770,73 @@ ERROR: node is still EOpNull!
0:42 5.000000 0:42 5.000000
0:42 5.200000 0:42 5.200000
0:42 1.100000 0:42 1.100000
0:67 Sequence 0:55 Sequence
0:67 move second child to first child (temp 3-component vector of float) 0:55 move second child to first child (temp structure{global int f})
0:67 'av3' (global 3-component vector of float) 0:55 'single1' (global structure{global int f})
0:67 Construct vec3 (global 3-component vector of float) 0:55 Constant:
0:67 'vc1' (global float) 0:55 10 (const int)
0:67 'vc2' (global float) 0:58 Sequence
0:67 'vc3' (global float) 0:58 move second child to first child (temp structure{global 2-component vector of uint v})
0:68 Sequence 0:58 'single2' (global structure{global 2-component vector of uint v})
0:68 move second child to first child (temp 3-component vector of float) 0:58 Constant:
0:68 'bv3' (global 3-component vector of float) 0:58 1 (const uint)
0:68 Construct vec3 (temp 3-component vector of float) 0:58 2 (const uint)
0:68 'vc1' (global float) 0:61 Sequence
0:68 'vc2' (global float) 0:61 move second child to first child (temp structure{global structure{global int f} s1})
0:68 'vc3' (global float) 0:61 'single3' (global structure{global structure{global int f} s1})
0:70 Function Definition: main( (global void) 0:61 Constant:
0:70 Function Parameters: 0:61 3 (const int)
0:72 Sequence 0:64 Sequence
0:72 MemoryBarrier (global void) 0:64 move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
0:74 Test condition and select (temp void) 0:64 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:74 Condition 0:64 Constant:
0:74 Compare Equal (temp bool) 0:64 4 (const uint)
0:74 Constant: 0:64 5 (const uint)
0:74 1 (const uint) 0:79 Sequence
0:74 2 (const uint) 0:79 move second child to first child (temp 3-component vector of float)
0:74 3.000000 0:79 'av3' (global 3-component vector of float)
0:74 4.000000 0:79 Construct vec3 (global 3-component vector of float)
0:74 0.000000 0:79 'vc1' (global float)
0:74 0.000000 0:79 'vc2' (global float)
0:74 0.000000 0:79 'vc3' (global float)
0:74 4.000000 0:80 Sequence
0:74 0.000000 0:80 move second child to first child (temp 3-component vector of float)
0:74 5.000000 0:80 'bv3' (global 3-component vector of float)
0:74 6.000000 0:80 Construct vec3 (temp 3-component vector of float)
0:74 0.000000 0:80 'vc1' (global float)
0:74 0.000000 0:80 'vc2' (global float)
0:74 0.000000 0:80 'vc3' (global float)
0:74 6.000000 0:82 Function Definition: main( (global void)
0:74 0.000000 0:82 Function Parameters:
0:74 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:84 Sequence
0:74 true case is null 0:84 MemoryBarrier (global void)
0:76 Test condition and select (temp void) 0:86 Test condition and select (temp void)
0:76 Condition 0:86 Condition
0:76 Constant: 0:86 Compare Equal (temp bool)
0:76 true (const bool) 0:86 Constant:
0:76 true case is null 0:86 1 (const uint)
0:86 2 (const uint)
0:86 3.000000
0:86 4.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 4.000000
0:86 0.000000
0:86 5.000000
0:86 6.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 6.000000
0:86 0.000000
0:86 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:86 true case is null
0:88 Test condition and select (temp void)
0:88 Condition
0:88 Constant:
0:88 true (const bool)
0:88 true case is null
0:? Linker Objects 0:? Linker Objects
0:? 'a' (const 2X2 matrix of float) 0:? 'a' (const 2X2 matrix of float)
0:? 1.000000 0:? 1.000000
@ -840,6 +862,10 @@ ERROR: node is still EOpNull!
0:? 'c3' (global 4X2 matrix of float) 0:? 'c3' (global 4X2 matrix of float)
0:? 'd2' (global implicitly-sized array of structure{global float s, global float t}) 0:? 'd2' (global implicitly-sized array of structure{global float s, global float t})
0:? 'b5' (global 5-element array of float) 0:? 'b5' (global 5-element array of float)
0:? 'single1' (global structure{global int f})
0:? 'single2' (global structure{global 2-component vector of uint v})
0:? 'single3' (global structure{global structure{global int f} s1})
0:? 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:? 1 (const uint) 0:? 1 (const uint)
0:? 2 (const uint) 0:? 2 (const uint)
@ -1524,51 +1550,73 @@ ERROR: node is still EOpNull!
0:42 5.000000 0:42 5.000000
0:42 5.200000 0:42 5.200000
0:42 1.100000 0:42 1.100000
0:67 Sequence 0:55 Sequence
0:67 move second child to first child (temp 3-component vector of float) 0:55 move second child to first child (temp structure{global int f})
0:67 'av3' (global 3-component vector of float) 0:55 'single1' (global structure{global int f})
0:67 Construct vec3 (global 3-component vector of float) 0:55 Constant:
0:67 'vc1' (global float) 0:55 10 (const int)
0:67 'vc2' (global float) 0:58 Sequence
0:67 'vc3' (global float) 0:58 move second child to first child (temp structure{global 2-component vector of uint v})
0:68 Sequence 0:58 'single2' (global structure{global 2-component vector of uint v})
0:68 move second child to first child (temp 3-component vector of float) 0:58 Constant:
0:68 'bv3' (global 3-component vector of float) 0:58 1 (const uint)
0:68 Construct vec3 (temp 3-component vector of float) 0:58 2 (const uint)
0:68 'vc1' (global float) 0:61 Sequence
0:68 'vc2' (global float) 0:61 move second child to first child (temp structure{global structure{global int f} s1})
0:68 'vc3' (global float) 0:61 'single3' (global structure{global structure{global int f} s1})
0:70 Function Definition: main( (global void) 0:61 Constant:
0:70 Function Parameters: 0:61 3 (const int)
0:72 Sequence 0:64 Sequence
0:72 MemoryBarrier (global void) 0:64 move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
0:74 Test condition and select (temp void) 0:64 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:74 Condition 0:64 Constant:
0:74 Compare Equal (temp bool) 0:64 4 (const uint)
0:74 Constant: 0:64 5 (const uint)
0:74 1 (const uint) 0:79 Sequence
0:74 2 (const uint) 0:79 move second child to first child (temp 3-component vector of float)
0:74 3.000000 0:79 'av3' (global 3-component vector of float)
0:74 4.000000 0:79 Construct vec3 (global 3-component vector of float)
0:74 0.000000 0:79 'vc1' (global float)
0:74 0.000000 0:79 'vc2' (global float)
0:74 0.000000 0:79 'vc3' (global float)
0:74 4.000000 0:80 Sequence
0:74 0.000000 0:80 move second child to first child (temp 3-component vector of float)
0:74 5.000000 0:80 'bv3' (global 3-component vector of float)
0:74 6.000000 0:80 Construct vec3 (temp 3-component vector of float)
0:74 0.000000 0:80 'vc1' (global float)
0:74 0.000000 0:80 'vc2' (global float)
0:74 0.000000 0:80 'vc3' (global float)
0:74 6.000000 0:82 Function Definition: main( (global void)
0:74 0.000000 0:82 Function Parameters:
0:74 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:84 Sequence
0:74 true case is null 0:84 MemoryBarrier (global void)
0:76 Test condition and select (temp void) 0:86 Test condition and select (temp void)
0:76 Condition 0:86 Condition
0:76 Constant: 0:86 Compare Equal (temp bool)
0:76 true (const bool) 0:86 Constant:
0:76 true case is null 0:86 1 (const uint)
0:86 2 (const uint)
0:86 3.000000
0:86 4.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 4.000000
0:86 0.000000
0:86 5.000000
0:86 6.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 6.000000
0:86 0.000000
0:86 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:86 true case is null
0:88 Test condition and select (temp void)
0:88 Condition
0:88 Constant:
0:88 true (const bool)
0:88 true case is null
0:? Linker Objects 0:? Linker Objects
0:? 'patchIn' (patch in 4-component vector of float) 0:? 'patchIn' (patch in 4-component vector of float)
0:? 'anon@0' (out block{gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance}) 0:? 'anon@0' (out block{gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance})
@ -1616,6 +1664,10 @@ ERROR: node is still EOpNull!
0:? 'c3' (global 4X2 matrix of float) 0:? 'c3' (global 4X2 matrix of float)
0:? 'd2' (global 1-element array of structure{global float s, global float t}) 0:? 'd2' (global 1-element array of structure{global float s, global float t})
0:? 'b5' (global 5-element array of float) 0:? 'b5' (global 5-element array of float)
0:? 'single1' (global structure{global int f})
0:? 'single2' (global structure{global 2-component vector of uint v})
0:? 'single3' (global structure{global structure{global int f} s1})
0:? 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:? 1 (const uint) 0:? 1 (const uint)
0:? 2 (const uint) 0:? 2 (const uint)

View File

@ -12,7 +12,7 @@ ERROR: 0:29: 'const 2-element array of 4-component vector of float' : cannot con
ERROR: 0:29: '=' : cannot convert from 'const float' to 'global 2-element array of 4-component vector of float' ERROR: 0:29: '=' : cannot convert from 'const float' to 'global 2-element array of 4-component vector of float'
ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float
ERROR: 0:40: 'constructor' : cannot convert parameter 1 from 'temp float' to 'temp structure{global float s, global float t}' ERROR: 0:40: 'constructor' : cannot convert parameter 1 from 'temp float' to 'temp structure{global float s, global float t}'
ERROR: 0:58: 'initializer list' : wrong number of structure members ERROR: 0:70: 'initializer list' : wrong number of structure members
ERROR: 13 compilation errors. No code generated. ERROR: 13 compilation errors. No code generated.
@ -50,51 +50,73 @@ ERROR: node is still EOpNull!
0:42 5.000000 0:42 5.000000
0:42 5.200000 0:42 5.200000
0:42 1.100000 0:42 1.100000
0:67 Sequence 0:55 Sequence
0:67 move second child to first child (temp 3-component vector of float) 0:55 move second child to first child (temp structure{global int f})
0:67 'av3' (global 3-component vector of float) 0:55 'single1' (global structure{global int f})
0:67 Construct vec3 (global 3-component vector of float) 0:55 Constant:
0:67 'vc1' (global float) 0:55 10 (const int)
0:67 'vc2' (global float) 0:58 Sequence
0:67 'vc3' (global float) 0:58 move second child to first child (temp structure{global 2-component vector of uint v})
0:68 Sequence 0:58 'single2' (global structure{global 2-component vector of uint v})
0:68 move second child to first child (temp 3-component vector of float) 0:58 Constant:
0:68 'bv3' (global 3-component vector of float) 0:58 1 (const uint)
0:68 Construct vec3 (temp 3-component vector of float) 0:58 2 (const uint)
0:68 'vc1' (global float) 0:61 Sequence
0:68 'vc2' (global float) 0:61 move second child to first child (temp structure{global structure{global int f} s1})
0:68 'vc3' (global float) 0:61 'single3' (global structure{global structure{global int f} s1})
0:70 Function Definition: main( (global void) 0:61 Constant:
0:70 Function Parameters: 0:61 3 (const int)
0:72 Sequence 0:64 Sequence
0:72 MemoryBarrier (global void) 0:64 move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
0:74 Test condition and select (temp void) 0:64 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:74 Condition 0:64 Constant:
0:74 Compare Equal (temp bool) 0:64 4 (const uint)
0:74 Constant: 0:64 5 (const uint)
0:74 1 (const uint) 0:79 Sequence
0:74 2 (const uint) 0:79 move second child to first child (temp 3-component vector of float)
0:74 3.000000 0:79 'av3' (global 3-component vector of float)
0:74 4.000000 0:79 Construct vec3 (global 3-component vector of float)
0:74 0.000000 0:79 'vc1' (global float)
0:74 0.000000 0:79 'vc2' (global float)
0:74 0.000000 0:79 'vc3' (global float)
0:74 4.000000 0:80 Sequence
0:74 0.000000 0:80 move second child to first child (temp 3-component vector of float)
0:74 5.000000 0:80 'bv3' (global 3-component vector of float)
0:74 6.000000 0:80 Construct vec3 (temp 3-component vector of float)
0:74 0.000000 0:80 'vc1' (global float)
0:74 0.000000 0:80 'vc2' (global float)
0:74 0.000000 0:80 'vc3' (global float)
0:74 6.000000 0:82 Function Definition: main( (global void)
0:74 0.000000 0:82 Function Parameters:
0:74 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:84 Sequence
0:74 true case is null 0:84 MemoryBarrier (global void)
0:76 Test condition and select (temp void) 0:86 Test condition and select (temp void)
0:76 Condition 0:86 Condition
0:76 Constant: 0:86 Compare Equal (temp bool)
0:76 true (const bool) 0:86 Constant:
0:76 true case is null 0:86 1 (const uint)
0:86 2 (const uint)
0:86 3.000000
0:86 4.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 4.000000
0:86 0.000000
0:86 5.000000
0:86 6.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 6.000000
0:86 0.000000
0:86 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:86 true case is null
0:88 Test condition and select (temp void)
0:88 Condition
0:88 Constant:
0:88 true (const bool)
0:88 true case is null
0:? Linker Objects 0:? Linker Objects
0:? 'a' (const 2X2 matrix of float) 0:? 'a' (const 2X2 matrix of float)
0:? 1.000000 0:? 1.000000
@ -120,6 +142,10 @@ ERROR: node is still EOpNull!
0:? 'c3' (global 4X2 matrix of float) 0:? 'c3' (global 4X2 matrix of float)
0:? 'd2' (global implicitly-sized array of structure{global float s, global float t}) 0:? 'd2' (global implicitly-sized array of structure{global float s, global float t})
0:? 'b5' (global 5-element array of float) 0:? 'b5' (global 5-element array of float)
0:? 'single1' (global structure{global int f})
0:? 'single2' (global structure{global 2-component vector of uint v})
0:? 'single3' (global structure{global structure{global int f} s1})
0:? 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:? 1 (const uint) 0:? 1 (const uint)
0:? 2 (const uint) 0:? 2 (const uint)
@ -200,51 +226,73 @@ ERROR: node is still EOpNull!
0:42 5.000000 0:42 5.000000
0:42 5.200000 0:42 5.200000
0:42 1.100000 0:42 1.100000
0:67 Sequence 0:55 Sequence
0:67 move second child to first child (temp 3-component vector of float) 0:55 move second child to first child (temp structure{global int f})
0:67 'av3' (global 3-component vector of float) 0:55 'single1' (global structure{global int f})
0:67 Construct vec3 (global 3-component vector of float) 0:55 Constant:
0:67 'vc1' (global float) 0:55 10 (const int)
0:67 'vc2' (global float) 0:58 Sequence
0:67 'vc3' (global float) 0:58 move second child to first child (temp structure{global 2-component vector of uint v})
0:68 Sequence 0:58 'single2' (global structure{global 2-component vector of uint v})
0:68 move second child to first child (temp 3-component vector of float) 0:58 Constant:
0:68 'bv3' (global 3-component vector of float) 0:58 1 (const uint)
0:68 Construct vec3 (temp 3-component vector of float) 0:58 2 (const uint)
0:68 'vc1' (global float) 0:61 Sequence
0:68 'vc2' (global float) 0:61 move second child to first child (temp structure{global structure{global int f} s1})
0:68 'vc3' (global float) 0:61 'single3' (global structure{global structure{global int f} s1})
0:70 Function Definition: main( (global void) 0:61 Constant:
0:70 Function Parameters: 0:61 3 (const int)
0:72 Sequence 0:64 Sequence
0:72 MemoryBarrier (global void) 0:64 move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
0:74 Test condition and select (temp void) 0:64 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:74 Condition 0:64 Constant:
0:74 Compare Equal (temp bool) 0:64 4 (const uint)
0:74 Constant: 0:64 5 (const uint)
0:74 1 (const uint) 0:79 Sequence
0:74 2 (const uint) 0:79 move second child to first child (temp 3-component vector of float)
0:74 3.000000 0:79 'av3' (global 3-component vector of float)
0:74 4.000000 0:79 Construct vec3 (global 3-component vector of float)
0:74 0.000000 0:79 'vc1' (global float)
0:74 0.000000 0:79 'vc2' (global float)
0:74 0.000000 0:79 'vc3' (global float)
0:74 4.000000 0:80 Sequence
0:74 0.000000 0:80 move second child to first child (temp 3-component vector of float)
0:74 5.000000 0:80 'bv3' (global 3-component vector of float)
0:74 6.000000 0:80 Construct vec3 (temp 3-component vector of float)
0:74 0.000000 0:80 'vc1' (global float)
0:74 0.000000 0:80 'vc2' (global float)
0:74 0.000000 0:80 'vc3' (global float)
0:74 6.000000 0:82 Function Definition: main( (global void)
0:74 0.000000 0:82 Function Parameters:
0:74 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:84 Sequence
0:74 true case is null 0:84 MemoryBarrier (global void)
0:76 Test condition and select (temp void) 0:86 Test condition and select (temp void)
0:76 Condition 0:86 Condition
0:76 Constant: 0:86 Compare Equal (temp bool)
0:76 true (const bool) 0:86 Constant:
0:76 true case is null 0:86 1 (const uint)
0:86 2 (const uint)
0:86 3.000000
0:86 4.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 4.000000
0:86 0.000000
0:86 5.000000
0:86 6.000000
0:86 0.000000
0:86 0.000000
0:86 0.000000
0:86 6.000000
0:86 0.000000
0:86 'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:86 true case is null
0:88 Test condition and select (temp void)
0:88 Condition
0:88 Constant:
0:88 true (const bool)
0:88 true case is null
0:? Linker Objects 0:? Linker Objects
0:? 'a' (const 2X2 matrix of float) 0:? 'a' (const 2X2 matrix of float)
0:? 1.000000 0:? 1.000000
@ -270,6 +318,10 @@ ERROR: node is still EOpNull!
0:? 'c3' (global 4X2 matrix of float) 0:? 'c3' (global 4X2 matrix of float)
0:? 'd2' (global 1-element array of structure{global float s, global float t}) 0:? 'd2' (global 1-element array of structure{global float s, global float t})
0:? 'b5' (global 5-element array of float) 0:? 'b5' (global 5-element array of float)
0:? 'single1' (global structure{global int f})
0:? 'single2' (global structure{global 2-component vector of uint v})
0:? 'single3' (global structure{global structure{global int f} s1})
0:? 'single4' (global structure{global structure{global 2-component vector of uint v} s1})
0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s}) 0:? 'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
0:? 1 (const uint) 0:? 1 (const uint)
0:? 2 (const uint) 0:? 2 (const uint)

View File

@ -56,56 +56,78 @@ gl_FragCoord origin is upper left
0:6 'c5' (global float) 0:6 'c5' (global float)
0:6 Constant: 0:6 Constant:
0:6 1.500000 0:6 1.500000
0:25 Function Definition: ShaderFunction(vf4; (global 4-component vector of float) 0:9 Sequence
0:9 Function Parameters: 0:9 move second child to first child (temp structure{temp int f})
0:9 'input' (in 4-component vector of float) 0:9 'single1' (global structure{temp int f})
0:9 Constant:
0:9 10 (const int)
0:12 Sequence
0:12 move second child to first child (temp structure{temp 2-component vector of uint v})
0:12 'single2' (global structure{temp 2-component vector of uint v})
0:12 Constant:
0:12 1 (const uint)
0:12 2 (const uint)
0:15 Sequence
0:15 move second child to first child (temp structure{temp structure{temp int f} s1})
0:15 'single3' (global structure{temp structure{temp int f} s1})
0:15 Constant:
0:15 3 (const int)
0:18 Sequence
0:18 move second child to first child (temp structure{temp structure{temp 2-component vector of uint v} s1})
0:18 'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
0:18 Constant:
0:18 4 (const uint)
0:18 5 (const uint)
0:37 Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
0:21 Function Parameters:
0:21 'input' (in 4-component vector of float)
0:? Sequence 0:? Sequence
0:10 Sequence 0:22 Sequence
0:10 move second child to first child (temp 4-component vector of float) 0:22 move second child to first child (temp 4-component vector of float)
0:10 'a2' (temp 4-component vector of float) 0:22 'a2' (temp 4-component vector of float)
0:? Constant: 0:? Constant:
0:? 0.200000 0:? 0.200000
0:? 0.300000 0:? 0.300000
0:? 0.400000 0:? 0.400000
0:? 0.500000 0:? 0.500000
0:20 Sequence 0:32 Sequence
0:20 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 Constant: 0:32 Constant:
0:20 9 (const int) 0:32 9 (const int)
0:20 'a5' (global float) 0:32 'a5' (global float)
0:20 Construct structure (temp structure{temp float f, temp int i}) 0:32 Construct structure (temp structure{temp float f, temp int i})
0:20 Comma (temp float) 0:32 Comma (temp float)
0:20 'a3' (global float) 0:32 'a3' (global float)
0:20 'a4' (global float) 0:32 'a4' (global float)
0:20 Constant: 0:32 Constant:
0:20 12 (const int) 0:32 12 (const int)
0:20 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:? Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:? Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 Constant: 0:32 Constant:
0:20 9 (const int) 0:32 9 (const int)
0:20 'a5' (global float) 0:32 'a5' (global float)
0:? Construct structure (temp structure{temp float f, temp int i}) 0:? Construct structure (temp structure{temp float f, temp int i})
0:20 Comma (temp float) 0:32 Comma (temp float)
0:20 'a3' (global float) 0:32 'a3' (global float)
0:20 'a4' (global float) 0:32 'a4' (global float)
0:20 Constant: 0:32 Constant:
0:20 12 (const int) 0:32 12 (const int)
0:21 Sequence 0:33 Sequence
0:21 move second child to first child (temp float) 0:33 move second child to first child (temp float)
0:21 'a8' (temp float) 0:33 'a8' (temp float)
0:21 Comma (temp float) 0:33 Comma (temp float)
0:21 'a2' (temp 4-component vector of float) 0:33 'a2' (temp 4-component vector of float)
0:21 'b2' (global float) 0:33 'b2' (global float)
0:21 move second child to first child (temp float) 0:33 move second child to first child (temp float)
0:21 'a9' (temp float) 0:33 'a9' (temp float)
0:21 'a5' (global float) 0:33 'a5' (global float)
0:23 Branch: Return with expression 0:35 Branch: Return with expression
0:23 component-wise multiply (temp 4-component vector of float) 0:35 component-wise multiply (temp 4-component vector of float)
0:23 'input' (in 4-component vector of float) 0:35 'input' (in 4-component vector of float)
0:23 'a1' (global 4-component vector of float) 0:35 'a1' (global 4-component vector of float)
0:? Linker Objects 0:? Linker Objects
0:? 'a1' (global 4-component vector of float) 0:? 'a1' (global 4-component vector of float)
0:? 'b1' (global 4-component vector of float) 0:? 'b1' (global 4-component vector of float)
@ -121,6 +143,10 @@ gl_FragCoord origin is upper left
0:? 'a5' (global float) 0:? 'a5' (global float)
0:? 'b5' (global float) 0:? 'b5' (global float)
0:? 'c5' (global float) 0:? 'c5' (global float)
0:? 'single1' (global structure{temp int f})
0:? 'single2' (global structure{temp 2-component vector of uint v})
0:? 'single3' (global structure{temp structure{temp int f} s1})
0:? 'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
Linked fragment stage: Linked fragment stage:
@ -183,56 +209,78 @@ gl_FragCoord origin is upper left
0:6 'c5' (global float) 0:6 'c5' (global float)
0:6 Constant: 0:6 Constant:
0:6 1.500000 0:6 1.500000
0:25 Function Definition: ShaderFunction(vf4; (global 4-component vector of float) 0:9 Sequence
0:9 Function Parameters: 0:9 move second child to first child (temp structure{temp int f})
0:9 'input' (in 4-component vector of float) 0:9 'single1' (global structure{temp int f})
0:9 Constant:
0:9 10 (const int)
0:12 Sequence
0:12 move second child to first child (temp structure{temp 2-component vector of uint v})
0:12 'single2' (global structure{temp 2-component vector of uint v})
0:12 Constant:
0:12 1 (const uint)
0:12 2 (const uint)
0:15 Sequence
0:15 move second child to first child (temp structure{temp structure{temp int f} s1})
0:15 'single3' (global structure{temp structure{temp int f} s1})
0:15 Constant:
0:15 3 (const int)
0:18 Sequence
0:18 move second child to first child (temp structure{temp structure{temp 2-component vector of uint v} s1})
0:18 'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
0:18 Constant:
0:18 4 (const uint)
0:18 5 (const uint)
0:37 Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
0:21 Function Parameters:
0:21 'input' (in 4-component vector of float)
0:? Sequence 0:? Sequence
0:10 Sequence 0:22 Sequence
0:10 move second child to first child (temp 4-component vector of float) 0:22 move second child to first child (temp 4-component vector of float)
0:10 'a2' (temp 4-component vector of float) 0:22 'a2' (temp 4-component vector of float)
0:? Constant: 0:? Constant:
0:? 0.200000 0:? 0.200000
0:? 0.300000 0:? 0.300000
0:? 0.400000 0:? 0.400000
0:? 0.500000 0:? 0.500000
0:20 Sequence 0:32 Sequence
0:20 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 Constant: 0:32 Constant:
0:20 9 (const int) 0:32 9 (const int)
0:20 'a5' (global float) 0:32 'a5' (global float)
0:20 Construct structure (temp structure{temp float f, temp int i}) 0:32 Construct structure (temp structure{temp float f, temp int i})
0:20 Comma (temp float) 0:32 Comma (temp float)
0:20 'a3' (global float) 0:32 'a3' (global float)
0:20 'a4' (global float) 0:32 'a4' (global float)
0:20 Constant: 0:32 Constant:
0:20 12 (const int) 0:32 12 (const int)
0:20 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:32 's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:? Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1}) 0:? Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
0:20 Constant: 0:32 Constant:
0:20 9 (const int) 0:32 9 (const int)
0:20 'a5' (global float) 0:32 'a5' (global float)
0:? Construct structure (temp structure{temp float f, temp int i}) 0:? Construct structure (temp structure{temp float f, temp int i})
0:20 Comma (temp float) 0:32 Comma (temp float)
0:20 'a3' (global float) 0:32 'a3' (global float)
0:20 'a4' (global float) 0:32 'a4' (global float)
0:20 Constant: 0:32 Constant:
0:20 12 (const int) 0:32 12 (const int)
0:21 Sequence 0:33 Sequence
0:21 move second child to first child (temp float) 0:33 move second child to first child (temp float)
0:21 'a8' (temp float) 0:33 'a8' (temp float)
0:21 Comma (temp float) 0:33 Comma (temp float)
0:21 'a2' (temp 4-component vector of float) 0:33 'a2' (temp 4-component vector of float)
0:21 'b2' (global float) 0:33 'b2' (global float)
0:21 move second child to first child (temp float) 0:33 move second child to first child (temp float)
0:21 'a9' (temp float) 0:33 'a9' (temp float)
0:21 'a5' (global float) 0:33 'a5' (global float)
0:23 Branch: Return with expression 0:35 Branch: Return with expression
0:23 component-wise multiply (temp 4-component vector of float) 0:35 component-wise multiply (temp 4-component vector of float)
0:23 'input' (in 4-component vector of float) 0:35 'input' (in 4-component vector of float)
0:23 'a1' (global 4-component vector of float) 0:35 'a1' (global 4-component vector of float)
0:? Linker Objects 0:? Linker Objects
0:? 'a1' (global 4-component vector of float) 0:? 'a1' (global 4-component vector of float)
0:? 'b1' (global 4-component vector of float) 0:? 'b1' (global 4-component vector of float)
@ -248,15 +296,19 @@ gl_FragCoord origin is upper left
0:? 'a5' (global float) 0:? 'a5' (global float)
0:? 'b5' (global float) 0:? 'b5' (global float)
0:? 'c5' (global float) 0:? 'c5' (global float)
0:? 'single1' (global structure{temp int f})
0:? 'single2' (global structure{temp 2-component vector of uint v})
0:? 'single3' (global structure{temp structure{temp int f} s1})
0:? 'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 67 // Id's are bound by 95
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "ShaderFunction" 60 EntryPoint Fragment 4 "ShaderFunction" 88
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source HLSL 450 Source HLSL 450
Name 4 "ShaderFunction" Name 4 "ShaderFunction"
@ -269,24 +321,36 @@ gl_FragCoord origin is upper left
Name 27 "b4" Name 27 "b4"
Name 29 "a5" Name 29 "a5"
Name 30 "c5" Name 30 "c5"
Name 33 "a2" Name 33 "Single1"
Name 36 "S1" MemberName 33(Single1) 0 "f"
MemberName 36(S1) 0 "f" Name 35 "single1"
MemberName 36(S1) 1 "i" Name 40 "Single2"
Name 37 "S2" MemberName 40(Single2) 0 "v"
MemberName 37(S2) 0 "j" Name 42 "single2"
MemberName 37(S2) 1 "g" Name 47 "Single3"
MemberName 37(S2) 2 "s1" MemberName 47(Single3) 0 "s1"
Name 39 "s2i" Name 49 "single3"
Name 42 "a3" Name 53 "Single4"
Name 43 "a4" MemberName 53(Single4) 0 "s1"
Name 48 "s2" Name 55 "single4"
Name 54 "a8" Name 62 "a2"
Name 55 "b2" Name 64 "S1"
Name 57 "a9" MemberName 64(S1) 0 "f"
Name 60 "input" MemberName 64(S1) 1 "i"
Name 65 "c4" Name 65 "S2"
Name 66 "b5" MemberName 65(S2) 0 "j"
MemberName 65(S2) 1 "g"
MemberName 65(S2) 2 "s1"
Name 67 "s2i"
Name 70 "a3"
Name 71 "a4"
Name 76 "s2"
Name 82 "a8"
Name 83 "b2"
Name 85 "a9"
Name 88 "input"
Name 93 "c4"
Name 94 "b5"
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -315,29 +379,57 @@ gl_FragCoord origin is upper left
29(a5): 22(ptr) Variable Private 29(a5): 22(ptr) Variable Private
30(c5): 22(ptr) Variable Private 30(c5): 22(ptr) Variable Private
31: 6(float) Constant 1069547520 31: 6(float) Constant 1069547520
32: TypePointer Function 7(fvec4) 32: TypeInt 32 1
34: 7(fvec4) ConstantComposite 24 26 28 11 33(Single1): TypeStruct 32(int)
35: TypeInt 32 1 34: TypePointer Private 33(Single1)
36(S1): TypeStruct 6(float) 35(int) 35(single1): 34(ptr) Variable Private
37(S2): TypeStruct 35(int) 6(float) 36(S1) 36: 32(int) Constant 10
38: TypePointer Function 37(S2) 37: 33(Single1) ConstantComposite 36
40: 35(int) Constant 9 38: TypeInt 32 0
42(a3): 22(ptr) Variable Private 39: TypeVector 38(int) 2
43(a4): 22(ptr) Variable Private 40(Single2): TypeStruct 39(ivec2)
45: 35(int) Constant 12 41: TypePointer Private 40(Single2)
53: TypePointer Function 6(float) 42(single2): 41(ptr) Variable Private
55(b2): 22(ptr) Variable Private 43: 38(int) Constant 1
59: TypePointer Input 7(fvec4) 44: 38(int) Constant 2
60(input): 59(ptr) Variable Input 45: 39(ivec2) ConstantComposite 43 44
65(c4): 22(ptr) Variable Private 46: 40(Single2) ConstantComposite 45
66(b5): 22(ptr) Variable Private 47(Single3): TypeStruct 33(Single1)
48: TypePointer Private 47(Single3)
49(single3): 48(ptr) Variable Private
50: 32(int) Constant 3
51: 33(Single1) ConstantComposite 50
52: 47(Single3) ConstantComposite 51
53(Single4): TypeStruct 40(Single2)
54: TypePointer Private 53(Single4)
55(single4): 54(ptr) Variable Private
56: 38(int) Constant 4
57: 38(int) Constant 5
58: 39(ivec2) ConstantComposite 56 57
59: 40(Single2) ConstantComposite 58
60: 53(Single4) ConstantComposite 59
61: TypePointer Function 7(fvec4)
63: 7(fvec4) ConstantComposite 24 26 28 11
64(S1): TypeStruct 6(float) 32(int)
65(S2): TypeStruct 32(int) 6(float) 64(S1)
66: TypePointer Function 65(S2)
68: 32(int) Constant 9
70(a3): 22(ptr) Variable Private
71(a4): 22(ptr) Variable Private
73: 32(int) Constant 12
81: TypePointer Function 6(float)
83(b2): 22(ptr) Variable Private
87: TypePointer Input 7(fvec4)
88(input): 87(ptr) Variable Input
93(c4): 22(ptr) Variable Private
94(b5): 22(ptr) Variable Private
4(ShaderFunction): 2 Function None 3 4(ShaderFunction): 2 Function None 3
5: Label 5: Label
33(a2): 32(ptr) Variable Function 62(a2): 61(ptr) Variable Function
39(s2i): 38(ptr) Variable Function 67(s2i): 66(ptr) Variable Function
48(s2): 38(ptr) Variable Function 76(s2): 66(ptr) Variable Function
54(a8): 53(ptr) Variable Function 82(a8): 81(ptr) Variable Function
57(a9): 53(ptr) Variable Function 85(a9): 81(ptr) Variable Function
Store 9(a1) 13 Store 9(a1) 13
Store 14(b1) 19 Store 14(b1) 19
Store 20(a1i) 13 Store 20(a1i) 13
@ -347,23 +439,27 @@ gl_FragCoord origin is upper left
Store 27(b4) 28 Store 27(b4) 28
Store 29(a5) 11 Store 29(a5) 11
Store 30(c5) 31 Store 30(c5) 31
Store 33(a2) 34 Store 35(single1) 37
41: 6(float) Load 29(a5) Store 42(single2) 46
44: 6(float) Load 43(a4) Store 49(single3) 52
46: 36(S1) CompositeConstruct 44 45 Store 55(single4) 60
47: 37(S2) CompositeConstruct 40 41 46 Store 62(a2) 63
Store 39(s2i) 47 69: 6(float) Load 29(a5)
49: 6(float) Load 29(a5) 72: 6(float) Load 71(a4)
50: 6(float) Load 43(a4) 74: 64(S1) CompositeConstruct 72 73
51: 36(S1) CompositeConstruct 50 45 75: 65(S2) CompositeConstruct 68 69 74
52: 37(S2) CompositeConstruct 40 49 51 Store 67(s2i) 75
Store 48(s2) 52 77: 6(float) Load 29(a5)
56: 6(float) Load 55(b2) 78: 6(float) Load 71(a4)
Store 54(a8) 56 79: 64(S1) CompositeConstruct 78 73
58: 6(float) Load 29(a5) 80: 65(S2) CompositeConstruct 68 77 79
Store 57(a9) 58 Store 76(s2) 80
61: 7(fvec4) Load 60(input) 84: 6(float) Load 83(b2)
62: 7(fvec4) Load 9(a1) Store 82(a8) 84
63: 7(fvec4) FMul 61 62 86: 6(float) Load 29(a5)
ReturnValue 63 Store 85(a9) 86
89: 7(fvec4) Load 88(input)
90: 7(fvec4) Load 9(a1)
91: 7(fvec4) FMul 89 90
ReturnValue 91
FunctionEnd FunctionEnd

View File

@ -4,6 +4,18 @@ float a2 = 0.2, b2;
float a3, b3 = 0.3; float a3, b3 = 0.3;
float a4, b4 = 0.4, c4; float a4, b4 = 0.4, c4;
float a5 = 0.5, b5, c5 = 1.5; float a5 = 0.5, b5, c5 = 1.5;
struct Single1 { int f; };
Single1 single1 = { 10 };
struct Single2 { uint2 v; };
Single2 single2 = { { 1, 2 } };
struct Single3 { Single1 s1; };
Single3 single3 = { { 3 } };
struct Single4 { Single2 s1; };
Single4 single4 = { { { 4u, 5u } } };
float4 ShaderFunction(float4 input) : COLOR0 float4 ShaderFunction(float4 input) : COLOR0
{ {

View File

@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits. // 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). // For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "SPIRV99.1365" #define GLSLANG_REVISION "SPIRV99.1367"
#define GLSLANG_DATE "29-Jul-2016" #define GLSLANG_DATE "29-Jul-2016"

View File

@ -5145,8 +5145,14 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const
return nullptr; return nullptr;
} }
// now that the subtree is processed, process this node // Now that the subtree is processed, process this node as if the
return addConstructor(loc, initList, type); // initializer list is a set of arguments to a constructor.
TIntermNode* emulatedConstructorArguments;
if (initList->getSequence().size() == 1)
emulatedConstructorArguments = initList->getSequence()[0];
else
emulatedConstructorArguments = initList;
return addConstructor(loc, emulatedConstructorArguments, type);
} }
// //

View File

@ -3725,8 +3725,14 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
return nullptr; return nullptr;
} }
// now that the subtree is processed, process this node // Now that the subtree is processed, process this node as if the
return addConstructor(loc, initList, type); // initializer list is a set of arguments to a constructor.
TIntermNode* emulatedConstructorArguments;
if (initList->getSequence().size() == 1)
emulatedConstructorArguments = initList->getSequence()[0];
else
emulatedConstructorArguments = initList;
return addConstructor(loc, emulatedConstructorArguments, type);
} }
// //