1617a3babSopenharmony_ci#version 420 core
2617a3babSopenharmony_ci
3617a3babSopenharmony_ciconst mat2x2 a = mat2( vec2( 1.0, 0.0 ), vec2( 0.0, 1.0 ) );
4617a3babSopenharmony_cimat2x2 b = { vec2( 1.0, 0.0 ), vec2( 0.0, 1.0 ) };
5617a3babSopenharmony_ciconst mat2x2 c = { { 1.0, 0.0, }, { 0.0, 1.0 } };
6617a3babSopenharmony_ci
7617a3babSopenharmony_cifloat a2[2] = { 3.4, 4.2, 5.0 }; // illegal
8617a3babSopenharmony_civec2 b2 = { 1.0, 2.0, 3.0 }; // illegal
9617a3babSopenharmony_cimat3x3 c2 = { vec3(0.0), vec3(1.0), vec3(2.0), vec3(3.0) }; // illegal
10617a3babSopenharmony_cimat2x2 d = { 1.0, 0.0, 0.0, 1.0 }; // illegal, can't flatten nesting
11617a3babSopenharmony_ci
12617a3babSopenharmony_cistruct {
13617a3babSopenharmony_ci    float a;
14617a3babSopenharmony_ci    int b;
15617a3babSopenharmony_ci} e = { 1.2, 2, };
16617a3babSopenharmony_ci
17617a3babSopenharmony_cistruct {
18617a3babSopenharmony_ci    float a;
19617a3babSopenharmony_ci    int b;
20617a3babSopenharmony_ci} e2 = { 1, 3 }; // legal, first initializer is converted
21617a3babSopenharmony_ci
22617a3babSopenharmony_cistruct {
23617a3babSopenharmony_ci    float a;
24617a3babSopenharmony_ci    int b;
25617a3babSopenharmony_ci} e3 = { 1.2, 2, 3 }; // illegal
26617a3babSopenharmony_ci
27617a3babSopenharmony_ciint a3 = true; // illegal
28617a3babSopenharmony_civec4 b3[2] = { vec4(0.0), 1.0 }; // illegal
29617a3babSopenharmony_civec4 b4[2] = vec4[2](vec4(0.0), mat2x2(1.0)); // illegal
30617a3babSopenharmony_cimat4x2 c3 = { vec3(0.0), vec3(1.0) }; // illegal
31617a3babSopenharmony_ci
32617a3babSopenharmony_cistruct S1 {
33617a3babSopenharmony_ci    vec4 a;
34617a3babSopenharmony_ci    vec4 b;
35617a3babSopenharmony_ci};
36617a3babSopenharmony_ci
37617a3babSopenharmony_cistruct {
38617a3babSopenharmony_ci    float s;
39617a3babSopenharmony_ci    float t;
40617a3babSopenharmony_ci} d2[] = { S1(vec4(0.0), vec4(1.1)) }; // illegal
41617a3babSopenharmony_ci
42617a3babSopenharmony_cifloat b5[] = { 3.4, 4.2, 5.0, 5.2, 1.1 };
43617a3babSopenharmony_ci
44617a3babSopenharmony_cistruct S3 {
45617a3babSopenharmony_ci    float f;
46617a3babSopenharmony_ci    mat2x3 m23;
47617a3babSopenharmony_ci};
48617a3babSopenharmony_ci
49617a3babSopenharmony_cistruct S4 {
50617a3babSopenharmony_ci    uvec2 uv2;
51617a3babSopenharmony_ci    S3 s[2];
52617a3babSopenharmony_ci};
53617a3babSopenharmony_ci
54617a3babSopenharmony_cistruct Single1 { int f; };
55617a3babSopenharmony_ciSingle1 single1 = { 10 };
56617a3babSopenharmony_ci
57617a3babSopenharmony_cistruct Single2 { uvec2 v; };
58617a3babSopenharmony_ciSingle2 single2 = { { 1, 2 } };
59617a3babSopenharmony_ci
60617a3babSopenharmony_cistruct Single3 { Single1 s1; };
61617a3babSopenharmony_ciSingle3 single3 = { { 3 } };
62617a3babSopenharmony_ci
63617a3babSopenharmony_cistruct Single4 { Single2 s1; };
64617a3babSopenharmony_ciSingle4 single4 = { { { 4u, 5u } } };
65617a3babSopenharmony_ci
66617a3babSopenharmony_ciconst S4 constructed = S4(uvec2(1, 2), 
67617a3babSopenharmony_ci                          S3[2](S3(3.0, mat2x3(4.0)), 
68617a3babSopenharmony_ci                                S3(5.0, mat2x3(6.0))));
69617a3babSopenharmony_ci
70617a3babSopenharmony_ciconst S4 curlybad1 = { {1, 2},
71617a3babSopenharmony_ci                       { {3,   {4.0, 0, 0.0}, {0.0, 4.0, 0.0 } },       // ERROR, the mat2x3 isn't isolated
72617a3babSopenharmony_ci                         {5.0, {6, 0.0, 0.0}, {0.0, 6.0, 0.0 } } } }; 
73617a3babSopenharmony_ci
74617a3babSopenharmony_ciconst S4 curlyInit = { {1, 2},
75617a3babSopenharmony_ci                       { {3,   { {4.0, 0, 0.0}, {0.0, 4.0, 0.0 } } },
76617a3babSopenharmony_ci                         {5.0, { {6, 0.0, 0.0}, {0.0, 6.0, 0.0 } } } } }; 
77617a3babSopenharmony_ci
78617a3babSopenharmony_cifloat vc1, vc2, vc3;
79617a3babSopenharmony_civec3 av3 = vec3(vc1, vc2, vc3);
80617a3babSopenharmony_civec3 bv3 = { vc1, vc2, vc3 };
81617a3babSopenharmony_ci
82617a3babSopenharmony_civoid main()
83617a3babSopenharmony_ci{
84617a3babSopenharmony_ci    memoryBarrier();
85617a3babSopenharmony_ci
86617a3babSopenharmony_ci    if (constructed == curlybad1)
87617a3babSopenharmony_ci        ;
88617a3babSopenharmony_ci    if (constructed == curlyInit)
89617a3babSopenharmony_ci        ;
90617a3babSopenharmony_ci}
91