1cb93a386Sopenharmony_ci 2cb93a386Sopenharmony_ciout vec4 sk_FragColor; 3cb93a386Sopenharmony_ciuniform vec4 colorRed; 4cb93a386Sopenharmony_ciuniform vec4 colorGreen; 5cb93a386Sopenharmony_cistruct S { 6cb93a386Sopenharmony_ci float x; 7cb93a386Sopenharmony_ci int y; 8cb93a386Sopenharmony_ci}; 9cb93a386Sopenharmony_cistruct Nested { 10cb93a386Sopenharmony_ci S a; 11cb93a386Sopenharmony_ci S b; 12cb93a386Sopenharmony_ci}; 13cb93a386Sopenharmony_cistruct Compound { 14cb93a386Sopenharmony_ci vec4 f4; 15cb93a386Sopenharmony_ci ivec3 i3; 16cb93a386Sopenharmony_ci}; 17cb93a386Sopenharmony_ciS returns_a_struct_S() { 18cb93a386Sopenharmony_ci S s; 19cb93a386Sopenharmony_ci s.x = 1.0; 20cb93a386Sopenharmony_ci s.y = 2; 21cb93a386Sopenharmony_ci return s; 22cb93a386Sopenharmony_ci} 23cb93a386Sopenharmony_ciS constructs_a_struct_S() { 24cb93a386Sopenharmony_ci return S(2.0, 3); 25cb93a386Sopenharmony_ci} 26cb93a386Sopenharmony_cifloat accepts_a_struct_fS(S s) { 27cb93a386Sopenharmony_ci return s.x + float(s.y); 28cb93a386Sopenharmony_ci} 29cb93a386Sopenharmony_civoid modifies_a_struct_vS(inout S s) { 30cb93a386Sopenharmony_ci s.x++; 31cb93a386Sopenharmony_ci s.y++; 32cb93a386Sopenharmony_ci} 33cb93a386Sopenharmony_civec4 main() { 34cb93a386Sopenharmony_ci S s = returns_a_struct_S(); 35cb93a386Sopenharmony_ci float x = accepts_a_struct_fS(s); 36cb93a386Sopenharmony_ci modifies_a_struct_vS(s); 37cb93a386Sopenharmony_ci S expected = constructs_a_struct_S(); 38cb93a386Sopenharmony_ci Nested n1; 39cb93a386Sopenharmony_ci Nested n2; 40cb93a386Sopenharmony_ci Nested n3; 41cb93a386Sopenharmony_ci n1.a = returns_a_struct_S(); 42cb93a386Sopenharmony_ci n1.b = n1.a; 43cb93a386Sopenharmony_ci n2 = n1; 44cb93a386Sopenharmony_ci n3 = n2; 45cb93a386Sopenharmony_ci modifies_a_struct_vS(n3.b); 46cb93a386Sopenharmony_ci Compound c1 = Compound(vec4(1.0, 2.0, 3.0, 4.0), ivec3(5, 6, 7)); 47cb93a386Sopenharmony_ci Compound c2 = Compound(vec4(colorGreen.y, 2.0, 3.0, 4.0), ivec3(5, 6, 7)); 48cb93a386Sopenharmony_ci Compound c3 = Compound(vec4(colorGreen.x, 2.0, 3.0, 4.0), ivec3(5, 6, 7)); 49cb93a386Sopenharmony_ci bool valid = (((((((((x == 3.0 && s.x == 2.0) && s.y == 3) && s == expected) && s == S(2.0, 3)) && s != returns_a_struct_S()) && n1 == n2) && n1 != n3) && n3 == Nested(S(1.0, 2), S(2.0, 3))) && c1 == c2) && c2 != c3; 50cb93a386Sopenharmony_ci return valid ? colorGreen : colorRed; 51cb93a386Sopenharmony_ci} 52