1cb93a386Sopenharmony_ci/*#pragma settings NoInline*/ 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen; 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_cistruct S { float x; int y; }; 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_cistruct Nested { S a, b; }; 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_cistruct Compound { float4 f4; int3 i3; }; 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ciS returns_a_struct() { 12cb93a386Sopenharmony_ci S s; 13cb93a386Sopenharmony_ci s.x = 1; 14cb93a386Sopenharmony_ci s.y = 2; 15cb93a386Sopenharmony_ci return s; 16cb93a386Sopenharmony_ci} 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciS constructs_a_struct() { 19cb93a386Sopenharmony_ci return S(2, 3); 20cb93a386Sopenharmony_ci} 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_cifloat accepts_a_struct(S s) { 23cb93a386Sopenharmony_ci return s.x + float(s.y); 24cb93a386Sopenharmony_ci} 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_civoid modifies_a_struct(inout S s) { 27cb93a386Sopenharmony_ci s.x++; 28cb93a386Sopenharmony_ci s.y++; 29cb93a386Sopenharmony_ci} 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_cihalf4 main(float2 coords) { 32cb93a386Sopenharmony_ci S s = returns_a_struct(); 33cb93a386Sopenharmony_ci float x = accepts_a_struct(s); 34cb93a386Sopenharmony_ci modifies_a_struct(s); 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci S expected = constructs_a_struct(); 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci Nested n1, n2, n3; 39cb93a386Sopenharmony_ci n1.a = returns_a_struct(); 40cb93a386Sopenharmony_ci n1.b = n1.a; 41cb93a386Sopenharmony_ci n2 = n1; 42cb93a386Sopenharmony_ci n3 = n2; 43cb93a386Sopenharmony_ci modifies_a_struct(n3.b); 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci Compound c1 = Compound(float4(1, 2, 3, 4), int3(5, 6, 7)); 46cb93a386Sopenharmony_ci Compound c2 = Compound(float4(colorGreen.g, 2, 3, 4), int3(5, 6, 7)); 47cb93a386Sopenharmony_ci Compound c3 = Compound(float4(colorGreen.r, 2, 3, 4), int3(5, 6, 7)); 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci bool valid = (x == 3) && (s.x == 2) && (s.y == 3) && 50cb93a386Sopenharmony_ci (s == expected) && (s == S(2, 3)) && (s != returns_a_struct()) && 51cb93a386Sopenharmony_ci (n1 == n2) && (n1 != n3) && (n3 == Nested(S(1, 2), S(2, 3))) && 52cb93a386Sopenharmony_ci (c1 == c2) && (c2 != c3); 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci return valid ? colorGreen : colorRed; 55cb93a386Sopenharmony_ci} 56