• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#version 450
2
3#extension GL_KHR_shader_subgroup_rotate: enable
4#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
5#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
6#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
7#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
8
9layout (local_size_x = 8) in;
10
11readonly buffer roblock
12{
13    uint delta;
14} ro;
15
16layout(binding = 0) buffer Buffers
17{
18    i8vec4 i8;
19    u8vec4 u8;
20    i16vec4 i16;
21    u16vec4 u16;
22    i64vec4 i64;
23    u64vec4 u64;
24    f16vec4 f16;
25} data[4];
26
27void main()
28{
29    uint delta = ro.delta;
30
31    data[delta].i8.x   = subgroupRotate(data[0].i8.x,    delta);
32    data[delta].i8.xy  = subgroupRotate(data[1].i8.xy,   delta);
33    data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz,  delta);
34    data[delta].i8     = subgroupRotate(data[3].i8,      delta);
35
36    data[delta].i8.x   = subgroupClusteredRotate(data[0].i8.x,    delta, 1);
37    data[delta].i8.xy  = subgroupClusteredRotate(data[1].i8.xy,   delta, 1);
38    data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz,  delta, 1);
39    data[delta].i8     = subgroupClusteredRotate(data[3].i8,      delta, 1);
40
41    data[delta].u8.x   = subgroupRotate(data[0].u8.x,    delta);
42    data[delta].u8.xy  = subgroupRotate(data[1].u8.xy,   delta);
43    data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz,  delta);
44    data[delta].u8     = subgroupRotate(data[3].u8,      delta);
45
46    data[delta].u8.x   = subgroupClusteredRotate(data[0].u8.x,    delta, 1);
47    data[delta].u8.xy  = subgroupClusteredRotate(data[1].u8.xy,   delta, 1);
48    data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz,  delta, 1);
49    data[delta].u8     = subgroupClusteredRotate(data[3].u8,      delta, 1);
50
51    data[delta].i16.x   = subgroupRotate(data[0].i16.x,    delta);
52    data[delta].i16.xy  = subgroupRotate(data[1].i16.xy,   delta);
53    data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz,  delta);
54    data[delta].i16     = subgroupRotate(data[3].i16,      delta);
55
56    data[delta].i16.x   = subgroupClusteredRotate(data[0].i16.x,    delta, 1);
57    data[delta].i16.xy  = subgroupClusteredRotate(data[1].i16.xy,   delta, 1);
58    data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz,  delta, 1);
59    data[delta].i16     = subgroupClusteredRotate(data[3].i16,      delta, 1);
60
61    data[delta].u16.x   = subgroupRotate(data[0].u16.x,    delta);
62    data[delta].u16.xy  = subgroupRotate(data[1].u16.xy,   delta);
63    data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz,  delta);
64    data[delta].u16     = subgroupRotate(data[3].u16,      delta);
65
66    data[delta].u16.x   = subgroupClusteredRotate(data[0].u16.x,    delta, 1);
67    data[delta].u16.xy  = subgroupClusteredRotate(data[1].u16.xy,   delta, 1);
68    data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz,  delta, 1);
69    data[delta].u16     = subgroupClusteredRotate(data[3].u16,      delta, 1);
70
71    data[delta].i64.x   = subgroupRotate(data[0].i64.x,    delta);
72    data[delta].i64.xy  = subgroupRotate(data[1].i64.xy,   delta);
73    data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz,  delta);
74    data[delta].i64     = subgroupRotate(data[3].i64,      delta);
75
76    data[delta].i64.x   = subgroupClusteredRotate(data[0].i64.x,    delta, 1);
77    data[delta].i64.xy  = subgroupClusteredRotate(data[1].i64.xy,   delta, 1);
78    data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz,  delta, 1);
79    data[delta].i64     = subgroupClusteredRotate(data[3].i64,      delta, 1);
80
81    data[delta].u64.x   = subgroupRotate(data[0].u64.x,    delta);
82    data[delta].u64.xy  = subgroupRotate(data[1].u64.xy,   delta);
83    data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz,  delta);
84    data[delta].u64     = subgroupRotate(data[3].u64,      delta);
85
86    data[delta].u64.x   = subgroupClusteredRotate(data[0].u64.x,    delta, 1);
87    data[delta].u64.xy  = subgroupClusteredRotate(data[1].u64.xy,   delta, 1);
88    data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz,  delta, 1);
89    data[delta].u64     = subgroupClusteredRotate(data[3].u64,      delta, 1);
90
91    data[delta].f16.x   = subgroupRotate(data[0].f16.x,    delta);
92    data[delta].f16.xy  = subgroupRotate(data[1].f16.xy,   delta);
93    data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz,  delta);
94    data[delta].f16     = subgroupRotate(data[3].f16,      delta);
95
96    data[delta].f16.x   = subgroupClusteredRotate(data[0].f16.x,    delta, 1);
97    data[delta].f16.xy  = subgroupClusteredRotate(data[1].f16.xy,   delta, 1);
98    data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz,  delta, 1);
99    data[delta].f16     = subgroupClusteredRotate(data[3].f16,      delta, 1);
100}
101