| /*#pragma settings NoInline*/ |
| |
| uniform half4 colorRed, colorGreen; |
| |
| struct S { float x; int y; }; |
| |
| struct Nested { S a, b; }; |
| |
| S returns_a_struct() { |
| S s; |
| s.x = 1; |
| s.y = 2; |
| return s; |
| } |
| |
| S constructs_a_struct() { |
| return S(2, 3); |
| } |
| |
| float accepts_a_struct(S s) { |
| return s.x + float(s.y); |
| } |
| |
| void modifies_a_struct(inout S s) { |
| s.x++; |
| s.y++; |
| } |
| |
| half4 main(float2 coords) { |
| S s = returns_a_struct(); |
| float x = accepts_a_struct(s); |
| modifies_a_struct(s); |
| |
| S expected = constructs_a_struct(); |
| |
| Nested n1, n2, n3; |
| n1.a = returns_a_struct(); |
| n1.b = n1.a; |
| n2 = n1; |
| n3 = n2; |
| modifies_a_struct(n3.b); |
| |
| bool valid = (x == 3) && (s.x == 2) && (s.y == 3) && |
| (s == expected) && (s == S(2, 3)) && (s != returns_a_struct()) && |
| (n1 == n2) && (n1 != n3) && (n3 == Nested(S(1, 2), S(2, 3))); |
| return valid ? colorGreen : colorRed; |
| } |