/*#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; }