Front-ends GLSL/HLSL: Fix initializer lists for structs of one member.
authorJohn Kessenich <cepheus@frii.com>
Sat, 30 Jul 2016 00:22:22 +0000 (18:22 -0600)
committerJohn Kessenich <cepheus@frii.com>
Sat, 30 Jul 2016 00:29:06 +0000 (18:29 -0600)
Single member structs initialized with an initializer list had
an incorrect argument for constructor emulation.

Test/420.tese
Test/baseResults/150.tesc.out
Test/baseResults/420.tese.out
Test/baseResults/hlsl.init.frag.out
Test/hlsl.init.frag
glslang/Include/revision.h
glslang/MachineIndependent/ParseHelper.cpp
hlsl/hlslParseHelper.cpp

index 988a26d..4c3693a 100644 (file)
@@ -51,6 +51,18 @@ struct S4 {
     S3 s[2];\r
 };\r
 \r
+struct Single1 { int f; };\r
+Single1 single1 = { 10 };\r
+\r
+struct Single2 { uvec2 v; };\r
+Single2 single2 = { { 1, 2 } };\r
+\r
+struct Single3 { Single1 s1; };\r
+Single3 single3 = { { 3 } };\r
+\r
+struct Single4 { Single2 s1; };\r
+Single4 single4 = { { { 4u, 5u } } };\r
+\r
 const S4 constructed = S4(uvec2(1, 2), \r
                           S3[2](S3(3.0, mat2x3(4.0)), \r
                                 S3(5.0, mat2x3(6.0))));\r
index 78020e1..1736bf0 100644 (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: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: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.
 
 
@@ -770,51 +770,73 @@ ERROR: node is still EOpNull!
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-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:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+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:?     'a' (const 2X2 matrix of float)
 0:?       1.000000
@@ -840,6 +862,10 @@ ERROR: node is still EOpNull!
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global implicitly-sized array of structure{global float s, global float t})
 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:?       1 (const uint)
 0:?       2 (const uint)
@@ -1524,51 +1550,73 @@ ERROR: node is still EOpNull!
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-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:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+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:?     '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})
@@ -1616,6 +1664,10 @@ ERROR: node is still EOpNull!
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global 1-element array of structure{global float s, global float t})
 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:?       1 (const uint)
 0:?       2 (const uint)
index fb9bc20..b8379d1 100644 (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: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: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.
 
 
@@ -50,51 +50,73 @@ ERROR: node is still EOpNull!
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-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:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+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:?     'a' (const 2X2 matrix of float)
 0:?       1.000000
@@ -120,6 +142,10 @@ ERROR: node is still EOpNull!
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global implicitly-sized array of structure{global float s, global float t})
 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:?       1 (const uint)
 0:?       2 (const uint)
@@ -200,51 +226,73 @@ ERROR: node is still EOpNull!
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-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:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+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:?     'a' (const 2X2 matrix of float)
 0:?       1.000000
@@ -270,6 +318,10 @@ ERROR: node is still EOpNull!
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global 1-element array of structure{global float s, global float t})
 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:?       1 (const uint)
 0:?       2 (const uint)
index 1a4c802..bc7c21b 100755 (executable)
@@ -56,56 +56,78 @@ gl_FragCoord origin is upper left
 0:6      'c5' (global float)
 0:6      Constant:
 0:6        1.500000
-0:25  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
-0:9    Function Parameters: 
-0:9      'input' (in 4-component vector of float)
+0:9  Sequence
+0:9    move second child to first child (temp structure{temp int f})
+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:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:10          'a2' (temp 4-component vector of float)
+0:22      Sequence
+0:22        move second child to first child (temp 4-component vector of float)
+0:22          'a2' (temp 4-component vector of float)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:?             0.400000
 0:?             0.500000
-0:20      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:20          '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:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
-0:20            Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                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:20          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32      Sequence
+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:32          's2i' (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:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
+0:32            Construct structure (temp structure{temp float f, temp int i})
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+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: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:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
+0:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
 0:?             Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                12 (const int)
-0:21      Sequence
-0:21        move second child to first child (temp float)
-0:21          'a8' (temp float)
-0:21          Comma (temp float)
-0:21            'a2' (temp 4-component vector of float)
-0:21            'b2' (global float)
-0:21        move second child to first child (temp float)
-0:21          'a9' (temp float)
-0:21          'a5' (global float)
-0:23      Branch: Return with expression
-0:23        component-wise multiply (temp 4-component vector of float)
-0:23          'input' (in 4-component vector of float)
-0:23          'a1' (global 4-component vector of float)
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'a8' (temp float)
+0:33          Comma (temp float)
+0:33            'a2' (temp 4-component vector of float)
+0:33            'b2' (global float)
+0:33        move second child to first child (temp float)
+0:33          'a9' (temp float)
+0:33          'a5' (global float)
+0:35      Branch: Return with expression
+0:35        component-wise multiply (temp 4-component vector of float)
+0:35          'input' (in 4-component vector of float)
+0:35          'a1' (global 4-component vector of float)
 0:?   Linker Objects
 0:?     'a1' (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:?     'b5' (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:
@@ -183,56 +209,78 @@ gl_FragCoord origin is upper left
 0:6      'c5' (global float)
 0:6      Constant:
 0:6        1.500000
-0:25  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
-0:9    Function Parameters: 
-0:9      'input' (in 4-component vector of float)
+0:9  Sequence
+0:9    move second child to first child (temp structure{temp int f})
+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:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:10          'a2' (temp 4-component vector of float)
+0:22      Sequence
+0:22        move second child to first child (temp 4-component vector of float)
+0:22          'a2' (temp 4-component vector of float)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:?             0.400000
 0:?             0.500000
-0:20      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:20          '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:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
-0:20            Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                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:20          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32      Sequence
+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:32          's2i' (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:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
+0:32            Construct structure (temp structure{temp float f, temp int i})
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+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: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:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
+0:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
 0:?             Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                12 (const int)
-0:21      Sequence
-0:21        move second child to first child (temp float)
-0:21          'a8' (temp float)
-0:21          Comma (temp float)
-0:21            'a2' (temp 4-component vector of float)
-0:21            'b2' (global float)
-0:21        move second child to first child (temp float)
-0:21          'a9' (temp float)
-0:21          'a5' (global float)
-0:23      Branch: Return with expression
-0:23        component-wise multiply (temp 4-component vector of float)
-0:23          'input' (in 4-component vector of float)
-0:23          'a1' (global 4-component vector of float)
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'a8' (temp float)
+0:33          Comma (temp float)
+0:33            'a2' (temp 4-component vector of float)
+0:33            'b2' (global float)
+0:33        move second child to first child (temp float)
+0:33          'a9' (temp float)
+0:33          'a5' (global float)
+0:35      Branch: Return with expression
+0:35        component-wise multiply (temp 4-component vector of float)
+0:35          'input' (in 4-component vector of float)
+0:35          'a1' (global 4-component vector of float)
 0:?   Linker Objects
 0:?     'a1' (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:?     'b5' (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
 // Generated by (magic number): 80001
-// Id's are bound by 67
+// Id's are bound by 95
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "ShaderFunction" 60
+                              EntryPoint Fragment 4  "ShaderFunction" 88
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 450
                               Name 4  "ShaderFunction"
@@ -269,24 +321,36 @@ gl_FragCoord origin is upper left
                               Name 27  "b4"
                               Name 29  "a5"
                               Name 30  "c5"
-                              Name 33  "a2"
-                              Name 36  "S1"
-                              MemberName 36(S1) 0  "f"
-                              MemberName 36(S1) 1  "i"
-                              Name 37  "S2"
-                              MemberName 37(S2) 0  "j"
-                              MemberName 37(S2) 1  "g"
-                              MemberName 37(S2) 2  "s1"
-                              Name 39  "s2i"
-                              Name 42  "a3"
-                              Name 43  "a4"
-                              Name 48  "s2"
-                              Name 54  "a8"
-                              Name 55  "b2"
-                              Name 57  "a9"
-                              Name 60  "input"
-                              Name 65  "c4"
-                              Name 66  "b5"
+                              Name 33  "Single1"
+                              MemberName 33(Single1) 0  "f"
+                              Name 35  "single1"
+                              Name 40  "Single2"
+                              MemberName 40(Single2) 0  "v"
+                              Name 42  "single2"
+                              Name 47  "Single3"
+                              MemberName 47(Single3) 0  "s1"
+                              Name 49  "single3"
+                              Name 53  "Single4"
+                              MemberName 53(Single4) 0  "s1"
+                              Name 55  "single4"
+                              Name 62  "a2"
+                              Name 64  "S1"
+                              MemberName 64(S1) 0  "f"
+                              MemberName 64(S1) 1  "i"
+                              Name 65  "S2"
+                              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
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -315,29 +379,57 @@ gl_FragCoord origin is upper left
           29(a5):     22(ptr) Variable Private
           30(c5):     22(ptr) Variable Private
               31:    6(float) Constant 1069547520
-              32:             TypePointer Function 7(fvec4)
-              34:    7(fvec4) ConstantComposite 24 26 28 11
-              35:             TypeInt 32 1
-          36(S1):             TypeStruct 6(float) 35(int)
-          37(S2):             TypeStruct 35(int) 6(float) 36(S1)
-              38:             TypePointer Function 37(S2)
-              40:     35(int) Constant 9
-          42(a3):     22(ptr) Variable Private
-          43(a4):     22(ptr) Variable Private
-              45:     35(int) Constant 12
-              53:             TypePointer Function 6(float)
-          55(b2):     22(ptr) Variable Private
-              59:             TypePointer Input 7(fvec4)
-       60(input):     59(ptr) Variable Input
-          65(c4):     22(ptr) Variable Private
-          66(b5):     22(ptr) Variable Private
+              32:             TypeInt 32 1
+     33(Single1):             TypeStruct 32(int)
+              34:             TypePointer Private 33(Single1)
+     35(single1):     34(ptr) Variable Private
+              36:     32(int) Constant 10
+              37: 33(Single1) ConstantComposite 36
+              38:             TypeInt 32 0
+              39:             TypeVector 38(int) 2
+     40(Single2):             TypeStruct 39(ivec2)
+              41:             TypePointer Private 40(Single2)
+     42(single2):     41(ptr) Variable Private
+              43:     38(int) Constant 1
+              44:     38(int) Constant 2
+              45:   39(ivec2) ConstantComposite 43 44
+              46: 40(Single2) ConstantComposite 45
+     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
                5:             Label
-          33(a2):     32(ptr) Variable Function
-         39(s2i):     38(ptr) Variable Function
-          48(s2):     38(ptr) Variable Function
-          54(a8):     53(ptr) Variable Function
-          57(a9):     53(ptr) Variable Function
+          62(a2):     61(ptr) Variable Function
+         67(s2i):     66(ptr) Variable Function
+          76(s2):     66(ptr) Variable Function
+          82(a8):     81(ptr) Variable Function
+          85(a9):     81(ptr) Variable Function
                               Store 9(a1) 13
                               Store 14(b1) 19
                               Store 20(a1i) 13
@@ -347,23 +439,27 @@ gl_FragCoord origin is upper left
                               Store 27(b4) 28
                               Store 29(a5) 11
                               Store 30(c5) 31
-                              Store 33(a2) 34
-              41:    6(float) Load 29(a5)
-              44:    6(float) Load 43(a4)
-              46:      36(S1) CompositeConstruct 44 45
-              47:      37(S2) CompositeConstruct 40 41 46
-                              Store 39(s2i) 47
-              49:    6(float) Load 29(a5)
-              50:    6(float) Load 43(a4)
-              51:      36(S1) CompositeConstruct 50 45
-              52:      37(S2) CompositeConstruct 40 49 51
-                              Store 48(s2) 52
-              56:    6(float) Load 55(b2)
-                              Store 54(a8) 56
-              58:    6(float) Load 29(a5)
-                              Store 57(a9) 58
-              61:    7(fvec4) Load 60(input)
-              62:    7(fvec4) Load 9(a1)
-              63:    7(fvec4) FMul 61 62
-                              ReturnValue 63
+                              Store 35(single1) 37
+                              Store 42(single2) 46
+                              Store 49(single3) 52
+                              Store 55(single4) 60
+                              Store 62(a2) 63
+              69:    6(float) Load 29(a5)
+              72:    6(float) Load 71(a4)
+              74:      64(S1) CompositeConstruct 72 73
+              75:      65(S2) CompositeConstruct 68 69 74
+                              Store 67(s2i) 75
+              77:    6(float) Load 29(a5)
+              78:    6(float) Load 71(a4)
+              79:      64(S1) CompositeConstruct 78 73
+              80:      65(S2) CompositeConstruct 68 77 79
+                              Store 76(s2) 80
+              84:    6(float) Load 83(b2)
+                              Store 82(a8) 84
+              86:    6(float) Load 29(a5)
+                              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
index 5acf55d..c233d12 100644 (file)
@@ -4,6 +4,18 @@ float a2 = 0.2, b2;
 float a3, b3 = 0.3;
 float a4, b4 = 0.4, c4;
 float a5 = 0.5, b5, c5 = 1.5;
+\r
+struct Single1 { int f; };\r
+Single1 single1 = { 10 };\r
+\r
+struct Single2 { uint2 v; };\r
+Single2 single2 = { { 1, 2 } };\r
+\r
+struct Single3 { Single1 s1; };\r
+Single3 single3 = { { 3 } };\r
+\r
+struct Single4 { Single2 s1; };\r
+Single4 single4 = { { { 4u, 5u } } };\r
 
 float4 ShaderFunction(float4 input) : COLOR0
 {
index f8fb279..5e83db7 100644 (file)
@@ -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 "SPIRV99.1365"
+#define GLSLANG_REVISION "SPIRV99.1367"
 #define GLSLANG_DATE "29-Jul-2016"
index c2bf7a3..25ab4ca 100644 (file)
@@ -5145,8 +5145,14 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const
         return nullptr;
     }
 
-    // now that the subtree is processed, process this node
-    return addConstructor(loc, initList, type);
+    // Now that the subtree is processed, process this node as if the
+    // 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);
 }
 
 //
index 5989f29..f918852 100755 (executable)
@@ -3725,8 +3725,14 @@ TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, co
         return nullptr;
     }
 
-    // now that the subtree is processed, process this node
-    return addConstructor(loc, initList, type);
+    // Now that the subtree is processed, process this node as if the
+    // 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);
 }
 
 //