Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / spv.subgroupExtendedTypesShuffleRelativeNeg.comp
1 #version 450\r
2 \r
3 #extension GL_KHR_shader_subgroup_shuffle_relative: enable\r
4 #extension GL_EXT_shader_explicit_arithmetic_types_int8: enable\r
5 #extension GL_EXT_shader_explicit_arithmetic_types_int16: enable\r
6 #extension GL_EXT_shader_explicit_arithmetic_types_int64: enable\r
7 #extension GL_EXT_shader_explicit_arithmetic_types_float16: enable\r
8 \r
9 layout (local_size_x = 8) in;\r
10 \r
11 layout(binding = 0) buffer Buffers\r
12 {\r
13     i8vec4 i8;\r
14     u8vec4 u8;\r
15     i16vec4 i16;\r
16     u16vec4 u16;\r
17     i64vec4 i64;\r
18     u64vec4 u64;\r
19     f16vec4 f16;\r
20 } data[4];\r
21 \r
22 void main()\r
23 {\r
24     uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;\r
25 \r
26     data[invocation].i8.x   = subgroupShuffleUp(data[0].i8.x,    invocation);\r
27     data[invocation].i8.xy  = subgroupShuffleUp(data[1].i8.xy,   invocation);\r
28     data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz,  invocation);\r
29     data[invocation].i8     = subgroupShuffleUp(data[3].i8,      invocation);\r
30 \r
31     data[invocation].i8.x   = subgroupShuffleDown(data[0].i8.x,    invocation);\r
32     data[invocation].i8.xy  = subgroupShuffleDown(data[1].i8.xy,   invocation);\r
33     data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz,  invocation);\r
34     data[invocation].i8     = subgroupShuffleDown(data[3].i8,      invocation);\r
35 \r
36     data[invocation].u8.x   = subgroupShuffleUp(data[0].u8.x,    invocation);\r
37     data[invocation].u8.xy  = subgroupShuffleUp(data[1].u8.xy,   invocation);\r
38     data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz,  invocation);\r
39     data[invocation].u8     = subgroupShuffleUp(data[3].u8,      invocation);\r
40 \r
41     data[invocation].u8.x   = subgroupShuffleDown(data[0].u8.x,    invocation);\r
42     data[invocation].u8.xy  = subgroupShuffleDown(data[1].u8.xy,   invocation);\r
43     data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz,  invocation);\r
44     data[invocation].u8     = subgroupShuffleDown(data[3].u8,      invocation);\r
45 \r
46     data[invocation].i16.x   = subgroupShuffleUp(data[0].i16.x,    invocation);\r
47     data[invocation].i16.xy  = subgroupShuffleUp(data[1].i16.xy,   invocation);\r
48     data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz,  invocation);\r
49     data[invocation].i16     = subgroupShuffleUp(data[3].i16,      invocation);\r
50 \r
51     data[invocation].i16.x   = subgroupShuffleDown(data[0].i16.x,    invocation);\r
52     data[invocation].i16.xy  = subgroupShuffleDown(data[1].i16.xy,   invocation);\r
53     data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz,  invocation);\r
54     data[invocation].i16     = subgroupShuffleDown(data[3].i16,      invocation);\r
55 \r
56     data[invocation].u16.x   = subgroupShuffleUp(data[0].u16.x,    invocation);\r
57     data[invocation].u16.xy  = subgroupShuffleUp(data[1].u16.xy,   invocation);\r
58     data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz,  invocation);\r
59     data[invocation].u16     = subgroupShuffleUp(data[3].u16,      invocation);\r
60 \r
61     data[invocation].u16.x   = subgroupShuffleDown(data[0].u16.x,    invocation);\r
62     data[invocation].u16.xy  = subgroupShuffleDown(data[1].u16.xy,   invocation);\r
63     data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz,  invocation);\r
64     data[invocation].u16     = subgroupShuffleDown(data[3].u16,      invocation);\r
65 \r
66     data[invocation].i64.x   = subgroupShuffleUp(data[0].i64.x,    invocation);\r
67     data[invocation].i64.xy  = subgroupShuffleUp(data[1].i64.xy,   invocation);\r
68     data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz,  invocation);\r
69     data[invocation].i64     = subgroupShuffleUp(data[3].i64,      invocation);\r
70 \r
71     data[invocation].i64.x   = subgroupShuffleDown(data[0].i64.x,    invocation);\r
72     data[invocation].i64.xy  = subgroupShuffleDown(data[1].i64.xy,   invocation);\r
73     data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz,  invocation);\r
74     data[invocation].i64     = subgroupShuffleDown(data[3].i64,      invocation);\r
75 \r
76     data[invocation].u64.x   = subgroupShuffleUp(data[0].u64.x,    invocation);\r
77     data[invocation].u64.xy  = subgroupShuffleUp(data[1].u64.xy,   invocation);\r
78     data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz,  invocation);\r
79     data[invocation].u64     = subgroupShuffleUp(data[3].u64,      invocation);\r
80 \r
81     data[invocation].u64.x   = subgroupShuffleDown(data[0].u64.x,    invocation);\r
82     data[invocation].u64.xy  = subgroupShuffleDown(data[1].u64.xy,   invocation);\r
83     data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz,  invocation);\r
84     data[invocation].u64     = subgroupShuffleDown(data[3].u64,      invocation);\r
85 \r
86     data[invocation].f16.x   = subgroupShuffleUp(data[0].f16.x,    invocation);\r
87     data[invocation].f16.xy  = subgroupShuffleUp(data[1].f16.xy,   invocation);\r
88     data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz,  invocation);\r
89     data[invocation].f16     = subgroupShuffleUp(data[3].f16,      invocation);\r
90 \r
91     data[invocation].f16.x   = subgroupShuffleDown(data[0].f16.x,    invocation);\r
92     data[invocation].f16.xy  = subgroupShuffleDown(data[1].f16.xy,   invocation);\r
93     data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz,  invocation);\r
94     data[invocation].f16     = subgroupShuffleDown(data[3].f16,      invocation);\r
95 }\r