xref: /aosp_15_r20/external/skia/resources/sksl/shared/ConstantCompositeAccessViaConstantIndex.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorRed;
2*c8dee2aaSAndroid Build Coastguard Workeruniform half2x2 testMatrix2x2;
3*c8dee2aaSAndroid Build Coastguard Workeruniform half testArray[5];
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerconst int zero = 0;
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Workerconst half[5] globalArray = half[5](1, 1, 1, 1, 1);
8*c8dee2aaSAndroid Build Coastguard Workerconst half2 globalVector = half2(1, 1);
9*c8dee2aaSAndroid Build Coastguard Workerconst half2x2 globalMatrix = half2x2(1, 1, 1, 1);
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2) {
12*c8dee2aaSAndroid Build Coastguard Worker    const half[5] localArray = half[5](0, 1, 2, 3, 4);
13*c8dee2aaSAndroid Build Coastguard Worker    const half2 localVector = half2(1, 1);
14*c8dee2aaSAndroid Build Coastguard Worker    const half2x2 localMatrix = half2x2(0, 1, 2, 3);
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker    // The comparisons against uniforms prevent the constant folding from eliminating the constant
17*c8dee2aaSAndroid Build Coastguard Worker    // composite variables entirely. We expect all of the variables to propagate to the codegen
18*c8dee2aaSAndroid Build Coastguard Worker    // backends, though the backend itself is allowed to eliminate variables.
19*c8dee2aaSAndroid Build Coastguard Worker    if (globalArray == testArray ||
20*c8dee2aaSAndroid Build Coastguard Worker        globalVector == colorRed.xy ||
21*c8dee2aaSAndroid Build Coastguard Worker        globalMatrix == testMatrix2x2 ||
22*c8dee2aaSAndroid Build Coastguard Worker        localArray == testArray ||
23*c8dee2aaSAndroid Build Coastguard Worker        localVector == colorRed.xy ||
24*c8dee2aaSAndroid Build Coastguard Worker        localMatrix == testMatrix2x2) {
25*c8dee2aaSAndroid Build Coastguard Worker        return colorRed;
26*c8dee2aaSAndroid Build Coastguard Worker    }
27*c8dee2aaSAndroid Build Coastguard Worker
28*c8dee2aaSAndroid Build Coastguard Worker    return half4(globalArray[zero] * localArray[zero],
29*c8dee2aaSAndroid Build Coastguard Worker                 globalVector[zero] * localVector[zero],
30*c8dee2aaSAndroid Build Coastguard Worker                 globalMatrix[zero] * localMatrix[zero]);
31*c8dee2aaSAndroid Build Coastguard Worker}
32