alan-baker
alan-baker
If the sample was rewritten as: ``` kernel void k0(global int* b, int v, local int* l){} kernel void k1(global int* b){} ``` Clspv would reuse binding 0 for by...
We've discussed some of this internally so I'll add the same feedback here. When I tested libclc, it was insufficient to reach full conformance across a wide variety of devices....
This works for me: ``` kernel void test(global float* out, global float* in) { int i = get_global_id(0); out[i] = cbrt(in[i]); } ``` Are you using any particular command line...
Traversing forwards doesn't lend itself to the way the pass works. A few other options: 1. Convert all constantexprs to instructions. Either a separate pass or as part of these...
Likely missing builtin support compared to float.
I wonder whether we should simply lower all ConstantExpr to instructions (using ConstantExpr::getAsInstruction). That pass could get run (probably twice) and it would prevent patching up these in an ad...
It is worth noting that if the barrier is moved before the if statement, clspv ends up with the barrier in the loop header.
I think generally this approach can work, but it feels like there will be some corner cases with multi-dimensional arrays. Not sure how best to proceed with those.
Fundamentally this won't work because Vulkan does not support atomics on floating point. You could change the type of result to be a global uint pointer and use OpenCL's reinterpretation...
Default behaviour (when char support is enabled) is ok, but disabling char support is still problematic.