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