| 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) |
| *%%*/ |