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