layout(binding=0, rgba32f) readonly texture2D src;
layout(binding=1, rgba32f) writeonly texture2D dest;
//layout(binding=2, rgba32f) texture2D multipurpose;

// If we add support for read-write textures in SkSL, uncomment `needs_all_access`.
//void needs_all_access(texture2D t) {}

void overload(layout(rgba32f) readonly texture2D t)       {}
void overload(layout(rgba32f) writeonly texture2D t, int) {}

void main() {
    //needs_all_access(src);                          // BAD
    //needs_all_access(dest);                         // BAD
    //needs_all_access(multipurpose);                 // OK

    textureRead(dest, sk_GlobalInvocationID.xy);           // BAD
    textureWrite(src, sk_GlobalInvocationID.xy, half4(1)); // BAD

    overload(src);     //  OK: overload(readonly texture2D t)      exists
    overload(src, 1);  // BAD: overload(readonly texture2D t, int) missing
    overload(dest);    // BAD: overload(writeonly texture2D t)      missing
    overload(dest, 1); //  OK: overload(writeonly texture2D t, int) exists
}

// If we add support for read-write textures in SkSL, uncomment `function_param_honors_all_access`.
//void function_param_honors_all_access(texture2D t) {
//    //needs_all_access(t);                               // OK
//    textureWidth(t);                                     // OK
//    textureRead(t, sk_GlobalInvocationID.xy);            // OK
//    textureWrite(t, sk_GlobalInvocationID.xy, half4(1)); // OK
//}

void function_param_honors_readonly(layout(rgba32f) readonly texture2D t) {
    //needs_all_access(t);                               // BAD
    textureWidth(t);                                     // OK
    textureRead(t, sk_GlobalInvocationID.xy);            // OK
    textureWrite(t, sk_GlobalInvocationID.xy, half4(1)); // BAD
}

void function_param_honors_writeonly(layout(rgba32f) writeonly texture2D t) {
    //needs_all_access(t);                               // BAD
    textureWidth(t);                                     // OK
    textureRead(t, sk_GlobalInvocationID.xy);            // BAD
    textureWrite(t, sk_GlobalInvocationID.xy, half4(1)); // OK
}

/*%%*
no match for textureRead(writeonlyTexture2D, uint2)
no match for textureWrite(readonlyTexture2D, uint2, half4)
no match for overload(readonlyTexture2D, int)
no match for overload(writeonlyTexture2D)
no match for textureWrite(readonlyTexture2D, uint2, half4)
no match for textureRead(writeonlyTexture2D, uint2)
*%%*/
