xref: /aosp_15_r20/external/skia/tests/sksl/shared/StructsInFunctions.hlsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerstruct S
2*c8dee2aaSAndroid Build Coastguard Worker{
3*c8dee2aaSAndroid Build Coastguard Worker    float x;
4*c8dee2aaSAndroid Build Coastguard Worker    int y;
5*c8dee2aaSAndroid Build Coastguard Worker};
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Workerstruct Nested
8*c8dee2aaSAndroid Build Coastguard Worker{
9*c8dee2aaSAndroid Build Coastguard Worker    S a;
10*c8dee2aaSAndroid Build Coastguard Worker    S b;
11*c8dee2aaSAndroid Build Coastguard Worker};
12*c8dee2aaSAndroid Build Coastguard Worker
13*c8dee2aaSAndroid Build Coastguard Workerstruct Compound
14*c8dee2aaSAndroid Build Coastguard Worker{
15*c8dee2aaSAndroid Build Coastguard Worker    float4 f4;
16*c8dee2aaSAndroid Build Coastguard Worker    int3 i3;
17*c8dee2aaSAndroid Build Coastguard Worker};
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard Workercbuffer _UniformBuffer : register(b0, space0)
20*c8dee2aaSAndroid Build Coastguard Worker{
21*c8dee2aaSAndroid Build Coastguard Worker    float4 _11_colorRed : packoffset(c0);
22*c8dee2aaSAndroid Build Coastguard Worker    float4 _11_colorGreen : packoffset(c1);
23*c8dee2aaSAndroid Build Coastguard Worker};
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard Worker
26*c8dee2aaSAndroid Build Coastguard Workerstatic float4 sk_FragColor;
27*c8dee2aaSAndroid Build Coastguard Worker
28*c8dee2aaSAndroid Build Coastguard Workerstruct SPIRV_Cross_Output
29*c8dee2aaSAndroid Build Coastguard Worker{
30*c8dee2aaSAndroid Build Coastguard Worker    float4 sk_FragColor : SV_Target0;
31*c8dee2aaSAndroid Build Coastguard Worker};
32*c8dee2aaSAndroid Build Coastguard Worker
33*c8dee2aaSAndroid Build Coastguard WorkerS returns_a_struct_S()
34*c8dee2aaSAndroid Build Coastguard Worker{
35*c8dee2aaSAndroid Build Coastguard Worker    S s = { 0.0f, 0 };
36*c8dee2aaSAndroid Build Coastguard Worker    s.x = 1.0f;
37*c8dee2aaSAndroid Build Coastguard Worker    s.y = 2;
38*c8dee2aaSAndroid Build Coastguard Worker    return s;
39*c8dee2aaSAndroid Build Coastguard Worker}
40*c8dee2aaSAndroid Build Coastguard Worker
41*c8dee2aaSAndroid Build Coastguard Workerfloat accepts_a_struct_fS(S _44)
42*c8dee2aaSAndroid Build Coastguard Worker{
43*c8dee2aaSAndroid Build Coastguard Worker    return _44.x + float(_44.y);
44*c8dee2aaSAndroid Build Coastguard Worker}
45*c8dee2aaSAndroid Build Coastguard Worker
46*c8dee2aaSAndroid Build Coastguard Workervoid modifies_a_struct_vS(inout S _53)
47*c8dee2aaSAndroid Build Coastguard Worker{
48*c8dee2aaSAndroid Build Coastguard Worker    _53.x += 1.0f;
49*c8dee2aaSAndroid Build Coastguard Worker    _53.y++;
50*c8dee2aaSAndroid Build Coastguard Worker}
51*c8dee2aaSAndroid Build Coastguard Worker
52*c8dee2aaSAndroid Build Coastguard WorkerS constructs_a_struct_S()
53*c8dee2aaSAndroid Build Coastguard Worker{
54*c8dee2aaSAndroid Build Coastguard Worker    S _42 = { 2.0f, 3 };
55*c8dee2aaSAndroid Build Coastguard Worker    return _42;
56*c8dee2aaSAndroid Build Coastguard Worker}
57*c8dee2aaSAndroid Build Coastguard Worker
58*c8dee2aaSAndroid Build Coastguard Workerfloat4 main(float2 _62)
59*c8dee2aaSAndroid Build Coastguard Worker{
60*c8dee2aaSAndroid Build Coastguard Worker    S _65 = returns_a_struct_S();
61*c8dee2aaSAndroid Build Coastguard Worker    S s = _65;
62*c8dee2aaSAndroid Build Coastguard Worker    S _67 = _65;
63*c8dee2aaSAndroid Build Coastguard Worker    float x = accepts_a_struct_fS(_67);
64*c8dee2aaSAndroid Build Coastguard Worker    S _69 = _65;
65*c8dee2aaSAndroid Build Coastguard Worker    modifies_a_struct_vS(_69);
66*c8dee2aaSAndroid Build Coastguard Worker    s = _69;
67*c8dee2aaSAndroid Build Coastguard Worker    S expected = constructs_a_struct_S();
68*c8dee2aaSAndroid Build Coastguard Worker    Nested n1 = { { 0.0f, 0 }, { 0.0f, 0 } };
69*c8dee2aaSAndroid Build Coastguard Worker    n1.a = returns_a_struct_S();
70*c8dee2aaSAndroid Build Coastguard Worker    n1.b = n1.a;
71*c8dee2aaSAndroid Build Coastguard Worker    Nested n2 = n1;
72*c8dee2aaSAndroid Build Coastguard Worker    Nested n3 = n1;
73*c8dee2aaSAndroid Build Coastguard Worker    S _87 = n3.b;
74*c8dee2aaSAndroid Build Coastguard Worker    modifies_a_struct_vS(_87);
75*c8dee2aaSAndroid Build Coastguard Worker    n3.b = _87;
76*c8dee2aaSAndroid Build Coastguard Worker    Compound _101 = { float4(1.0f, 2.0f, 3.0f, 4.0f), int3(5, 6, 7) };
77*c8dee2aaSAndroid Build Coastguard Worker    Compound c1 = _101;
78*c8dee2aaSAndroid Build Coastguard Worker    float4 _107 = float4(_11_colorGreen.y, 2.0f, 3.0f, 4.0f);
79*c8dee2aaSAndroid Build Coastguard Worker    Compound _108 = { _107, int3(5, 6, 7) };
80*c8dee2aaSAndroid Build Coastguard Worker    Compound c2 = _108;
81*c8dee2aaSAndroid Build Coastguard Worker    float4 _113 = float4(_11_colorGreen.x, 2.0f, 3.0f, 4.0f);
82*c8dee2aaSAndroid Build Coastguard Worker    Compound _114 = { _113, int3(5, 6, 7) };
83*c8dee2aaSAndroid Build Coastguard Worker    Compound c3 = _114;
84*c8dee2aaSAndroid Build Coastguard Worker    bool _126 = false;
85*c8dee2aaSAndroid Build Coastguard Worker    if (x == 3.0f)
86*c8dee2aaSAndroid Build Coastguard Worker    {
87*c8dee2aaSAndroid Build Coastguard Worker        _126 = s.x == 2.0f;
88*c8dee2aaSAndroid Build Coastguard Worker    }
89*c8dee2aaSAndroid Build Coastguard Worker    else
90*c8dee2aaSAndroid Build Coastguard Worker    {
91*c8dee2aaSAndroid Build Coastguard Worker        _126 = false;
92*c8dee2aaSAndroid Build Coastguard Worker    }
93*c8dee2aaSAndroid Build Coastguard Worker    bool _132 = false;
94*c8dee2aaSAndroid Build Coastguard Worker    if (_126)
95*c8dee2aaSAndroid Build Coastguard Worker    {
96*c8dee2aaSAndroid Build Coastguard Worker        _132 = s.y == 3;
97*c8dee2aaSAndroid Build Coastguard Worker    }
98*c8dee2aaSAndroid Build Coastguard Worker    else
99*c8dee2aaSAndroid Build Coastguard Worker    {
100*c8dee2aaSAndroid Build Coastguard Worker        _132 = false;
101*c8dee2aaSAndroid Build Coastguard Worker    }
102*c8dee2aaSAndroid Build Coastguard Worker    bool _144 = false;
103*c8dee2aaSAndroid Build Coastguard Worker    if (_132)
104*c8dee2aaSAndroid Build Coastguard Worker    {
105*c8dee2aaSAndroid Build Coastguard Worker        _144 = (s.y == expected.y) && (s.x == expected.x);
106*c8dee2aaSAndroid Build Coastguard Worker    }
107*c8dee2aaSAndroid Build Coastguard Worker    else
108*c8dee2aaSAndroid Build Coastguard Worker    {
109*c8dee2aaSAndroid Build Coastguard Worker        _144 = false;
110*c8dee2aaSAndroid Build Coastguard Worker    }
111*c8dee2aaSAndroid Build Coastguard Worker    bool _154 = false;
112*c8dee2aaSAndroid Build Coastguard Worker    if (_144)
113*c8dee2aaSAndroid Build Coastguard Worker    {
114*c8dee2aaSAndroid Build Coastguard Worker        S _148 = { 2.0f, 3 };
115*c8dee2aaSAndroid Build Coastguard Worker        _154 = (s.y == 3) && (s.x == 2.0f);
116*c8dee2aaSAndroid Build Coastguard Worker    }
117*c8dee2aaSAndroid Build Coastguard Worker    else
118*c8dee2aaSAndroid Build Coastguard Worker    {
119*c8dee2aaSAndroid Build Coastguard Worker        _154 = false;
120*c8dee2aaSAndroid Build Coastguard Worker    }
121*c8dee2aaSAndroid Build Coastguard Worker    bool _166 = false;
122*c8dee2aaSAndroid Build Coastguard Worker    if (_154)
123*c8dee2aaSAndroid Build Coastguard Worker    {
124*c8dee2aaSAndroid Build Coastguard Worker        S _158 = returns_a_struct_S();
125*c8dee2aaSAndroid Build Coastguard Worker        _166 = (s.y != _158.y) || (s.x != _158.x);
126*c8dee2aaSAndroid Build Coastguard Worker    }
127*c8dee2aaSAndroid Build Coastguard Worker    else
128*c8dee2aaSAndroid Build Coastguard Worker    {
129*c8dee2aaSAndroid Build Coastguard Worker        _166 = false;
130*c8dee2aaSAndroid Build Coastguard Worker    }
131*c8dee2aaSAndroid Build Coastguard Worker    bool _190 = false;
132*c8dee2aaSAndroid Build Coastguard Worker    if (_166)
133*c8dee2aaSAndroid Build Coastguard Worker    {
134*c8dee2aaSAndroid Build Coastguard Worker        _190 = ((n1.b.y == n2.b.y) && (n1.b.x == n2.b.x)) && ((n1.a.y == n2.a.y) && (n1.a.x == n2.a.x));
135*c8dee2aaSAndroid Build Coastguard Worker    }
136*c8dee2aaSAndroid Build Coastguard Worker    else
137*c8dee2aaSAndroid Build Coastguard Worker    {
138*c8dee2aaSAndroid Build Coastguard Worker        _190 = false;
139*c8dee2aaSAndroid Build Coastguard Worker    }
140*c8dee2aaSAndroid Build Coastguard Worker    bool _214 = false;
141*c8dee2aaSAndroid Build Coastguard Worker    if (_190)
142*c8dee2aaSAndroid Build Coastguard Worker    {
143*c8dee2aaSAndroid Build Coastguard Worker        _214 = ((n1.b.y != n3.b.y) || (n1.b.x != n3.b.x)) || ((n1.a.y != n3.a.y) || (n1.a.x != n3.a.x));
144*c8dee2aaSAndroid Build Coastguard Worker    }
145*c8dee2aaSAndroid Build Coastguard Worker    else
146*c8dee2aaSAndroid Build Coastguard Worker    {
147*c8dee2aaSAndroid Build Coastguard Worker        _214 = false;
148*c8dee2aaSAndroid Build Coastguard Worker    }
149*c8dee2aaSAndroid Build Coastguard Worker    bool _234 = false;
150*c8dee2aaSAndroid Build Coastguard Worker    if (_214)
151*c8dee2aaSAndroid Build Coastguard Worker    {
152*c8dee2aaSAndroid Build Coastguard Worker        S _218 = { 1.0f, 2 };
153*c8dee2aaSAndroid Build Coastguard Worker        S _219 = { 2.0f, 3 };
154*c8dee2aaSAndroid Build Coastguard Worker        Nested _220 = { _218, _219 };
155*c8dee2aaSAndroid Build Coastguard Worker        _234 = ((n3.b.y == 3) && (n3.b.x == 2.0f)) && ((n3.a.y == 2) && (n3.a.x == 1.0f));
156*c8dee2aaSAndroid Build Coastguard Worker    }
157*c8dee2aaSAndroid Build Coastguard Worker    else
158*c8dee2aaSAndroid Build Coastguard Worker    {
159*c8dee2aaSAndroid Build Coastguard Worker        _234 = false;
160*c8dee2aaSAndroid Build Coastguard Worker    }
161*c8dee2aaSAndroid Build Coastguard Worker    bool _242 = false;
162*c8dee2aaSAndroid Build Coastguard Worker    if (_234)
163*c8dee2aaSAndroid Build Coastguard Worker    {
164*c8dee2aaSAndroid Build Coastguard Worker        _242 = true && all(bool4(float4(1.0f, 2.0f, 3.0f, 4.0f).x == _107.x, float4(1.0f, 2.0f, 3.0f, 4.0f).y == _107.y, float4(1.0f, 2.0f, 3.0f, 4.0f).z == _107.z, float4(1.0f, 2.0f, 3.0f, 4.0f).w == _107.w));
165*c8dee2aaSAndroid Build Coastguard Worker    }
166*c8dee2aaSAndroid Build Coastguard Worker    else
167*c8dee2aaSAndroid Build Coastguard Worker    {
168*c8dee2aaSAndroid Build Coastguard Worker        _242 = false;
169*c8dee2aaSAndroid Build Coastguard Worker    }
170*c8dee2aaSAndroid Build Coastguard Worker    bool _248 = false;
171*c8dee2aaSAndroid Build Coastguard Worker    if (_242)
172*c8dee2aaSAndroid Build Coastguard Worker    {
173*c8dee2aaSAndroid Build Coastguard Worker        _248 = false || any(bool4(_107.x != _113.x, _107.y != _113.y, _107.z != _113.z, _107.w != _113.w));
174*c8dee2aaSAndroid Build Coastguard Worker    }
175*c8dee2aaSAndroid Build Coastguard Worker    else
176*c8dee2aaSAndroid Build Coastguard Worker    {
177*c8dee2aaSAndroid Build Coastguard Worker        _248 = false;
178*c8dee2aaSAndroid Build Coastguard Worker    }
179*c8dee2aaSAndroid Build Coastguard Worker    bool valid = _248;
180*c8dee2aaSAndroid Build Coastguard Worker    float4 _249 = 0.0f.xxxx;
181*c8dee2aaSAndroid Build Coastguard Worker    if (_248)
182*c8dee2aaSAndroid Build Coastguard Worker    {
183*c8dee2aaSAndroid Build Coastguard Worker        _249 = _11_colorGreen;
184*c8dee2aaSAndroid Build Coastguard Worker    }
185*c8dee2aaSAndroid Build Coastguard Worker    else
186*c8dee2aaSAndroid Build Coastguard Worker    {
187*c8dee2aaSAndroid Build Coastguard Worker        _249 = _11_colorRed;
188*c8dee2aaSAndroid Build Coastguard Worker    }
189*c8dee2aaSAndroid Build Coastguard Worker    return _249;
190*c8dee2aaSAndroid Build Coastguard Worker}
191*c8dee2aaSAndroid Build Coastguard Worker
192*c8dee2aaSAndroid Build Coastguard Workervoid frag_main()
193*c8dee2aaSAndroid Build Coastguard Worker{
194*c8dee2aaSAndroid Build Coastguard Worker    float2 _21 = 0.0f.xx;
195*c8dee2aaSAndroid Build Coastguard Worker    sk_FragColor = main(_21);
196*c8dee2aaSAndroid Build Coastguard Worker}
197*c8dee2aaSAndroid Build Coastguard Worker
198*c8dee2aaSAndroid Build Coastguard WorkerSPIRV_Cross_Output main()
199*c8dee2aaSAndroid Build Coastguard Worker{
200*c8dee2aaSAndroid Build Coastguard Worker    frag_main();
201*c8dee2aaSAndroid Build Coastguard Worker    SPIRV_Cross_Output stage_output;
202*c8dee2aaSAndroid Build Coastguard Worker    stage_output.sk_FragColor = sk_FragColor;
203*c8dee2aaSAndroid Build Coastguard Worker    return stage_output;
204*c8dee2aaSAndroid Build Coastguard Worker}
205