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