blob: 64678bc97fa6be4a9d96fe189d367e4368104d7f [file] [log] [blame]
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)
*%%*/