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

void needs_all_access(texture2D t) {}

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

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

    read(dest, sk_ThreadPosition.xy);           // BAD
    write(src, sk_ThreadPosition.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
}

void function_param_honors_all_access(texture2D t) {
    needs_all_access(t);                      // OK
    width(t);                                 // OK
    read(t, sk_ThreadPosition.xy);            // OK
    write(t, sk_ThreadPosition.xy, half4(1)); // OK
}

void function_param_honors_readonly(readonly texture2D t) {
    needs_all_access(t);                      // BAD
    width(t);                                 // OK
    read(t, sk_ThreadPosition.xy);            // OK
    write(t, sk_ThreadPosition.xy, half4(1)); // BAD
}

void function_param_honors_writeonly(writeonly texture2D t) {
    needs_all_access(t);                      // BAD
    width(t);                                 // OK
    read(t, sk_ThreadPosition.xy);            // BAD
    write(t, sk_ThreadPosition.xy, half4(1)); // OK
}

/*%%*
expected 'texture2D', but found 'readonlyTexture2D'
expected 'texture2D', but found 'writeonlyTexture2D'
no match for read(writeonlyTexture2D, uint2)
no match for write(readonlyTexture2D, uint2, half4)
no match for overload(readonlyTexture2D, int)
no match for overload(writeonlyTexture2D)
expected 'texture2D', but found 'readonlyTexture2D'
no match for write(readonlyTexture2D, uint2, half4)
expected 'texture2D', but found 'writeonlyTexture2D'
no match for read(writeonlyTexture2D, uint2)
*%%*/
