xref: /aosp_15_r20/external/skia/resources/sksl/spirv/SpecializedFieldAccess.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerstruct StructB {
2*c8dee2aaSAndroid Build Coastguard Worker    float val;
3*c8dee2aaSAndroid Build Coastguard Worker};
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerstruct StructA {
6*c8dee2aaSAndroid Build Coastguard Worker    StructB structB;
7*c8dee2aaSAndroid Build Coastguard Worker    float val;
8*c8dee2aaSAndroid Build Coastguard Worker};
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Workerlayout(set = 0, binding = 0) readonly buffer testStorageBuffer {
11*c8dee2aaSAndroid Build Coastguard Worker    StructA testStructA;
12*c8dee2aaSAndroid Build Coastguard Worker    float[] testArr;
13*c8dee2aaSAndroid Build Coastguard Worker};
14*c8dee2aaSAndroid Build Coastguard Workerlayout(set = 0, binding = 1) readonly buffer testSecondStorageBuffer {
15*c8dee2aaSAndroid Build Coastguard Worker    StructA[] testStructArr;
16*c8dee2aaSAndroid Build Coastguard Worker};
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Workernoinline float foo(float[] arr, float f) {
19*c8dee2aaSAndroid Build Coastguard Worker    return arr[int(f)];
20*c8dee2aaSAndroid Build Coastguard Worker}
21*c8dee2aaSAndroid Build Coastguard Worker
22*c8dee2aaSAndroid Build Coastguard Workernoinline float bar(StructA[] arr, float f) {
23*c8dee2aaSAndroid Build Coastguard Worker    return arr[int(f)].structB.val;
24*c8dee2aaSAndroid Build Coastguard Worker}
25*c8dee2aaSAndroid Build Coastguard Worker
26*c8dee2aaSAndroid Build Coastguard Workervoid main() {
27*c8dee2aaSAndroid Build Coastguard Worker    foo(testArr, testStructA.val);
28*c8dee2aaSAndroid Build Coastguard Worker    foo(testArr, testStructA.structB.val);
29*c8dee2aaSAndroid Build Coastguard Worker    bar(testStructArr, testStructA.structB.val);
30*c8dee2aaSAndroid Build Coastguard Worker}
31