xref: /aosp_15_r20/external/skia/resources/sksl/errors/ReadonlyWriteonly.compute (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerlayout(binding=0, rgba32f) readonly texture2D src;
2*c8dee2aaSAndroid Build Coastguard Workerlayout(binding=1, rgba32f) writeonly texture2D dest;
3*c8dee2aaSAndroid Build Coastguard Worker//layout(binding=2, rgba32f) texture2D multipurpose;
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Worker// If we add support for read-write textures in SkSL, uncomment `needs_all_access`.
6*c8dee2aaSAndroid Build Coastguard Worker//void needs_all_access(texture2D t) {}
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workervoid overload(layout(rgba32f) readonly texture2D t)       {}
9*c8dee2aaSAndroid Build Coastguard Workervoid overload(layout(rgba32f) writeonly texture2D t, int) {}
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Workervoid main() {
12*c8dee2aaSAndroid Build Coastguard Worker    //needs_all_access(src);                          // BAD
13*c8dee2aaSAndroid Build Coastguard Worker    //needs_all_access(dest);                         // BAD
14*c8dee2aaSAndroid Build Coastguard Worker    //needs_all_access(multipurpose);                 // OK
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker    textureRead(dest, sk_GlobalInvocationID.xy);           // BAD
17*c8dee2aaSAndroid Build Coastguard Worker    textureWrite(src, sk_GlobalInvocationID.xy, half4(1)); // BAD
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard Worker    overload(src);     //  OK: overload(readonly texture2D t)      exists
20*c8dee2aaSAndroid Build Coastguard Worker    overload(src, 1);  // BAD: overload(readonly texture2D t, int) missing
21*c8dee2aaSAndroid Build Coastguard Worker    overload(dest);    // BAD: overload(writeonly texture2D t)      missing
22*c8dee2aaSAndroid Build Coastguard Worker    overload(dest, 1); //  OK: overload(writeonly texture2D t, int) exists
23*c8dee2aaSAndroid Build Coastguard Worker}
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard Worker// If we add support for read-write textures in SkSL, uncomment `function_param_honors_all_access`.
26*c8dee2aaSAndroid Build Coastguard Worker//void function_param_honors_all_access(texture2D t) {
27*c8dee2aaSAndroid Build Coastguard Worker//    //needs_all_access(t);                               // OK
28*c8dee2aaSAndroid Build Coastguard Worker//    textureWidth(t);                                     // OK
29*c8dee2aaSAndroid Build Coastguard Worker//    textureRead(t, sk_GlobalInvocationID.xy);            // OK
30*c8dee2aaSAndroid Build Coastguard Worker//    textureWrite(t, sk_GlobalInvocationID.xy, half4(1)); // OK
31*c8dee2aaSAndroid Build Coastguard Worker//}
32*c8dee2aaSAndroid Build Coastguard Worker
33*c8dee2aaSAndroid Build Coastguard Workervoid function_param_honors_readonly(layout(rgba32f) readonly texture2D t) {
34*c8dee2aaSAndroid Build Coastguard Worker    //needs_all_access(t);                               // BAD
35*c8dee2aaSAndroid Build Coastguard Worker    textureWidth(t);                                     // OK
36*c8dee2aaSAndroid Build Coastguard Worker    textureRead(t, sk_GlobalInvocationID.xy);            // OK
37*c8dee2aaSAndroid Build Coastguard Worker    textureWrite(t, sk_GlobalInvocationID.xy, half4(1)); // BAD
38*c8dee2aaSAndroid Build Coastguard Worker}
39*c8dee2aaSAndroid Build Coastguard Worker
40*c8dee2aaSAndroid Build Coastguard Workervoid function_param_honors_writeonly(layout(rgba32f) writeonly texture2D t) {
41*c8dee2aaSAndroid Build Coastguard Worker    //needs_all_access(t);                               // BAD
42*c8dee2aaSAndroid Build Coastguard Worker    textureWidth(t);                                     // OK
43*c8dee2aaSAndroid Build Coastguard Worker    textureRead(t, sk_GlobalInvocationID.xy);            // BAD
44*c8dee2aaSAndroid Build Coastguard Worker    textureWrite(t, sk_GlobalInvocationID.xy, half4(1)); // OK
45*c8dee2aaSAndroid Build Coastguard Worker}
46*c8dee2aaSAndroid Build Coastguard Worker
47*c8dee2aaSAndroid Build Coastguard Worker/*%%*
48*c8dee2aaSAndroid Build Coastguard Workerno match for textureRead(writeonlyTexture2D, uint2)
49*c8dee2aaSAndroid Build Coastguard Workerno match for textureWrite(readonlyTexture2D, uint2, half4)
50*c8dee2aaSAndroid Build Coastguard Workerno match for overload(readonlyTexture2D, int)
51*c8dee2aaSAndroid Build Coastguard Workerno match for overload(writeonlyTexture2D)
52*c8dee2aaSAndroid Build Coastguard Workerno match for textureWrite(readonlyTexture2D, uint2, half4)
53*c8dee2aaSAndroid Build Coastguard Workerno match for textureRead(writeonlyTexture2D, uint2)
54*c8dee2aaSAndroid Build Coastguard Worker*%%*/
55