| #version 310 es |
| |
| precision highp float; |
| |
| layout (local_size_x = 16, local_size_y = 32, local_size_z = 4) in; |
| |
| shared float s; |
| shared int i; |
| |
| buffer outb { |
| float f; |
| float g; |
| float h; |
| vec3 uns[]; // this makes it look like the "second" set of 3 floats in a struct, which LLVM |
| // takes advantage of when optimizing, giving confusing results, like thinking |
| // &outbname.uns[18].x == &outbname[9].uns.x |
| } outbname; |
| |
| buffer outbna { |
| int k; |
| vec4 na; |
| } outbnamena; |
| |
| buffer outs { |
| vec4 va[]; |
| } outnames; |
| |
| void main() |
| { |
| barrier(); |
| outbname.f = s; |
| outbnamena.na = vec4(s); |
| s = outbname.uns[18].x; // TODO: see note above |
| //outbname.uns[17] = vec3(3.0); // TODO: see note above, this one bitcasts, which isn't handled |
| outbname.uns[i] = vec3(s); |
| outnames.va[gl_LocalInvocationID.x] = vec4(s); |
| } |