xref: /aosp_15_r20/external/angle/third_party/glslang/src/Test/spv.subgroupRotate.comp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#version 450
2
3#extension GL_KHR_shader_subgroup_rotate: enable
4
5layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
6
7readonly buffer roblock
8{
9    uint delta;
10} ro;
11
12layout(binding = 0) buffer Buffers
13{
14    vec4  f4;
15    ivec4 i4;
16    uvec4 u4;
17    dvec4 d4;
18} data[4];
19
20void main()
21{
22    uint delta = ro.delta;
23
24    data[delta].f4.x   = subgroupRotate(data[0].f4.x,    delta);
25    data[delta].f4.xy  = subgroupRotate(data[1].f4.xy,   delta);
26    data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz,  delta);
27    data[delta].f4     = subgroupRotate(data[3].f4,      delta);
28
29    data[delta].i4.x   = subgroupRotate(data[0].i4.x,    delta);
30    data[delta].i4.xy  = subgroupRotate(data[1].i4.xy,   delta);
31    data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz,  delta);
32    data[delta].i4     = subgroupRotate(data[3].i4,      delta);
33
34    data[delta].u4.x   = subgroupRotate(data[0].u4.x,    delta);
35    data[delta].u4.xy  = subgroupRotate(data[1].u4.xy,   delta);
36    data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz,  delta);
37    data[delta].u4     = subgroupRotate(data[3].u4,      delta);
38
39    data[delta].d4.x   = subgroupRotate(data[0].d4.x,    delta);
40    data[delta].d4.xy  = subgroupRotate(data[1].d4.xy,   delta);
41    data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz,  delta);
42    data[delta].d4     = subgroupRotate(data[3].d4,      delta);
43
44    data[delta].i4.x   =   int(subgroupRotate(data[0].i4.x < 0,                   delta));
45    data[delta].i4.xy  = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta));
46    data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
47    data[delta].i4     = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)),     delta));
48
49    data[delta].f4.x   = subgroupClusteredRotate(data[0].f4.x,    delta, 1);
50    data[delta].f4.xy  = subgroupClusteredRotate(data[1].f4.xy,   delta, 1);
51    data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz,  delta, 1);
52    data[delta].f4     = subgroupClusteredRotate(data[3].f4,      delta, 1);
53
54    data[delta].i4.x   = subgroupClusteredRotate(data[0].i4.x,    delta, 1);
55    data[delta].i4.xy  = subgroupClusteredRotate(data[1].i4.xy,   delta, 1);
56    data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz,  delta, 1);
57    data[delta].i4     = subgroupClusteredRotate(data[3].i4,      delta, 1);
58
59    data[delta].u4.x   = subgroupClusteredRotate(data[0].u4.x,    delta, 1);
60    data[delta].u4.xy  = subgroupClusteredRotate(data[1].u4.xy,   delta, 1);
61    data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz,  delta, 1);
62    data[delta].u4     = subgroupClusteredRotate(data[3].u4,      delta, 1);
63
64    data[delta].d4.x   = subgroupClusteredRotate(data[0].d4.x,    delta, 1);
65    data[delta].d4.xy  = subgroupClusteredRotate(data[1].d4.xy,   delta, 1);
66    data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz,  delta, 1);
67    data[delta].d4     = subgroupClusteredRotate(data[3].d4,      delta, 1);
68
69    data[delta].i4.x   =   int(subgroupClusteredRotate(data[0].i4.x < 0,                   delta, 1));
70    data[delta].i4.xy  = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta, 1));
71    data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1));
72    data[delta].i4     = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)),     delta, 1));
73}
74