xref: /aosp_15_r20/external/skia/tests/sksl/shared/StructIndexLookup.hlsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1struct InnerLUT
2{
3    float3 values;
4};
5
6struct OuterLUT
7{
8    InnerLUT inner[3];
9};
10
11struct Root
12{
13    OuterLUT outer[3];
14};
15
16cbuffer _UniformBuffer : register(b0, space0)
17{
18    float4 _7_colorGreen : packoffset(c0);
19    float4 _7_colorRed : packoffset(c1);
20};
21
22
23static float4 sk_FragColor;
24
25struct SPIRV_Cross_Output
26{
27    float4 sk_FragColor : SV_Target0;
28};
29
30float4 main(float2 _21)
31{
32    Root data = { { { { { 0.0f.xxx }, { 0.0f.xxx }, { 0.0f.xxx } } }, { { { 0.0f.xxx }, { 0.0f.xxx }, { 0.0f.xxx } } }, { { { 0.0f.xxx }, { 0.0f.xxx }, { 0.0f.xxx } } } } };
33    data.outer[0].inner[0].values = float3(1.0f, 10.0f, 100.0f);
34    data.outer[0].inner[1].values = float3(2.0f, 20.0f, 200.0f);
35    data.outer[0].inner[2].values = float3(3.0f, 30.0f, 300.0f);
36    data.outer[1].inner[0].values = float3(4.0f, 40.0f, 400.0f);
37    data.outer[1].inner[1].values = float3(5.0f, 50.0f, 500.0f);
38    data.outer[1].inner[2].values = float3(6.0f, 60.0f, 600.0f);
39    data.outer[2].inner[0].values = float3(7.0f, 70.0f, 700.0f);
40    data.outer[2].inner[1].values = float3(8.0f, 80.0f, 800.0f);
41    data.outer[2].inner[2].values = float3(9.0f, 90.0f, 900.0f);
42    float3 expected = 0.0f.xxx;
43    for (int i = 0; i < 3; i++)
44    {
45        for (int j = 0; j < 3; j++)
46        {
47            float3 _102 = expected;
48            float3 _103 = _102 + float3(1.0f, 10.0f, 100.0f);
49            expected = _103;
50            if (any(bool3(data.outer[i].inner[j].values.x != _103.x, data.outer[i].inner[j].values.y != _103.y, data.outer[i].inner[j].values.z != _103.z)))
51            {
52                return _7_colorRed;
53            }
54            for (int k = 0; k < 3; k++)
55            {
56                if (data.outer[i].inner[j].values[k] != expected[k])
57                {
58                    return _7_colorRed;
59                }
60            }
61        }
62    }
63    return _7_colorGreen;
64}
65
66void frag_main()
67{
68    float2 _17 = 0.0f.xx;
69    sk_FragColor = main(_17);
70}
71
72SPIRV_Cross_Output main()
73{
74    frag_main();
75    SPIRV_Cross_Output stage_output;
76    stage_output.sk_FragColor = sk_FragColor;
77    return stage_output;
78}
79