Merge pull request #2976 from jeremy-lunarg/hayes-fix-2975
[platform/upstream/glslang.git] / Test / spv.subgroupExtendedTypesQuad.comp
1 #version 450\r
2 \r
3 #extension GL_KHR_shader_subgroup_quad: enable\r
4 #extension GL_EXT_shader_subgroup_extended_types_int8: enable\r
5 #extension GL_EXT_shader_subgroup_extended_types_int16: enable\r
6 #extension GL_EXT_shader_subgroup_extended_types_int64: enable\r
7 #extension GL_EXT_shader_subgroup_extended_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   = subgroupQuadBroadcast(data[0].i8.x, 1);\r
27     data[invocation].i8.xy  = subgroupQuadBroadcast(data[1].i8.xy, 1);\r
28     data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);\r
29     data[invocation].i8     = subgroupQuadBroadcast(data[3].i8, 1);\r
30 \r
31     data[invocation].i8.x   = subgroupQuadSwapHorizontal(data[0].i8.x);\r
32     data[invocation].i8.xy  = subgroupQuadSwapHorizontal(data[1].i8.xy);\r
33     data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);\r
34     data[invocation].i8     = subgroupQuadSwapHorizontal(data[3].i8);\r
35 \r
36     data[invocation].i8.x   = subgroupQuadSwapVertical(data[0].i8.x);\r
37     data[invocation].i8.xy  = subgroupQuadSwapVertical(data[1].i8.xy);\r
38     data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);\r
39     data[invocation].i8     = subgroupQuadSwapVertical(data[3].i8);\r
40 \r
41     data[invocation].i8.x   = subgroupQuadSwapDiagonal(data[0].i8.x);\r
42     data[invocation].i8.xy  = subgroupQuadSwapDiagonal(data[1].i8.xy);\r
43     data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);\r
44     data[invocation].i8     = subgroupQuadSwapDiagonal(data[3].i8);\r
45 \r
46     data[invocation].u8.x   = subgroupQuadBroadcast(data[0].u8.x, 1);\r
47     data[invocation].u8.xy  = subgroupQuadBroadcast(data[1].u8.xy, 1);\r
48     data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);\r
49     data[invocation].u8     = subgroupQuadBroadcast(data[3].u8, 1);\r
50 \r
51     data[invocation].u8.x   = subgroupQuadSwapHorizontal(data[0].u8.x);\r
52     data[invocation].u8.xy  = subgroupQuadSwapHorizontal(data[1].u8.xy);\r
53     data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);\r
54     data[invocation].u8     = subgroupQuadSwapHorizontal(data[3].u8);\r
55 \r
56     data[invocation].u8.x   = subgroupQuadSwapVertical(data[0].u8.x);\r
57     data[invocation].u8.xy  = subgroupQuadSwapVertical(data[1].u8.xy);\r
58     data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);\r
59     data[invocation].u8     = subgroupQuadSwapVertical(data[3].u8);\r
60 \r
61     data[invocation].u8.x   = subgroupQuadSwapDiagonal(data[0].u8.x);\r
62     data[invocation].u8.xy  = subgroupQuadSwapDiagonal(data[1].u8.xy);\r
63     data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);\r
64     data[invocation].u8     = subgroupQuadSwapDiagonal(data[3].u8);\r
65 \r
66     data[invocation].i16.x   = subgroupQuadBroadcast(data[0].i16.x, 1);\r
67     data[invocation].i16.xy  = subgroupQuadBroadcast(data[1].i16.xy, 1);\r
68     data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);\r
69     data[invocation].i16     = subgroupQuadBroadcast(data[3].i16, 1);\r
70 \r
71     data[invocation].i16.x   = subgroupQuadSwapHorizontal(data[0].i16.x);\r
72     data[invocation].i16.xy  = subgroupQuadSwapHorizontal(data[1].i16.xy);\r
73     data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);\r
74     data[invocation].i16     = subgroupQuadSwapHorizontal(data[3].i16);\r
75 \r
76     data[invocation].i16.x   = subgroupQuadSwapVertical(data[0].i16.x);\r
77     data[invocation].i16.xy  = subgroupQuadSwapVertical(data[1].i16.xy);\r
78     data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);\r
79     data[invocation].i16     = subgroupQuadSwapVertical(data[3].i16);\r
80 \r
81     data[invocation].i16.x   = subgroupQuadSwapDiagonal(data[0].i16.x);\r
82     data[invocation].i16.xy  = subgroupQuadSwapDiagonal(data[1].i16.xy);\r
83     data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);\r
84     data[invocation].i16     = subgroupQuadSwapDiagonal(data[3].i16);\r
85 \r
86     data[invocation].u16.x   = subgroupQuadBroadcast(data[0].u16.x, 1);\r
87     data[invocation].u16.xy  = subgroupQuadBroadcast(data[1].u16.xy, 1);\r
88     data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);\r
89     data[invocation].u16     = subgroupQuadBroadcast(data[3].u16, 1);\r
90 \r
91     data[invocation].u16.x   = subgroupQuadSwapHorizontal(data[0].u16.x);\r
92     data[invocation].u16.xy  = subgroupQuadSwapHorizontal(data[1].u16.xy);\r
93     data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);\r
94     data[invocation].u16     = subgroupQuadSwapHorizontal(data[3].u16);\r
95 \r
96     data[invocation].u16.x   = subgroupQuadSwapVertical(data[0].u16.x);\r
97     data[invocation].u16.xy  = subgroupQuadSwapVertical(data[1].u16.xy);\r
98     data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);\r
99     data[invocation].u16     = subgroupQuadSwapVertical(data[3].u16);\r
100 \r
101     data[invocation].u16.x   = subgroupQuadSwapDiagonal(data[0].u16.x);\r
102     data[invocation].u16.xy  = subgroupQuadSwapDiagonal(data[1].u16.xy);\r
103     data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);\r
104     data[invocation].u16     = subgroupQuadSwapDiagonal(data[3].u16);\r
105 \r
106     data[invocation].i64.x   = subgroupQuadBroadcast(data[0].i64.x, 1);\r
107     data[invocation].i64.xy  = subgroupQuadBroadcast(data[1].i64.xy, 1);\r
108     data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);\r
109     data[invocation].i64     = subgroupQuadBroadcast(data[3].i64, 1);\r
110 \r
111     data[invocation].i64.x   = subgroupQuadSwapHorizontal(data[0].i64.x);\r
112     data[invocation].i64.xy  = subgroupQuadSwapHorizontal(data[1].i64.xy);\r
113     data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);\r
114     data[invocation].i64     = subgroupQuadSwapHorizontal(data[3].i64);\r
115 \r
116     data[invocation].i64.x   = subgroupQuadSwapVertical(data[0].i64.x);\r
117     data[invocation].i64.xy  = subgroupQuadSwapVertical(data[1].i64.xy);\r
118     data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);\r
119     data[invocation].i64     = subgroupQuadSwapVertical(data[3].i64);\r
120 \r
121     data[invocation].i64.x   = subgroupQuadSwapDiagonal(data[0].i64.x);\r
122     data[invocation].i64.xy  = subgroupQuadSwapDiagonal(data[1].i64.xy);\r
123     data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);\r
124     data[invocation].i64     = subgroupQuadSwapDiagonal(data[3].i64);\r
125 \r
126     data[invocation].u64.x   = subgroupQuadBroadcast(data[0].u64.x, 1);\r
127     data[invocation].u64.xy  = subgroupQuadBroadcast(data[1].u64.xy, 1);\r
128     data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);\r
129     data[invocation].u64     = subgroupQuadBroadcast(data[3].u64, 1);\r
130 \r
131     data[invocation].u64.x   = subgroupQuadSwapHorizontal(data[0].u64.x);\r
132     data[invocation].u64.xy  = subgroupQuadSwapHorizontal(data[1].u64.xy);\r
133     data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);\r
134     data[invocation].u64     = subgroupQuadSwapHorizontal(data[3].u64);\r
135 \r
136     data[invocation].u64.x   = subgroupQuadSwapVertical(data[0].u64.x);\r
137     data[invocation].u64.xy  = subgroupQuadSwapVertical(data[1].u64.xy);\r
138     data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);\r
139     data[invocation].u64     = subgroupQuadSwapVertical(data[3].u64);\r
140 \r
141     data[invocation].u64.x   = subgroupQuadSwapDiagonal(data[0].u64.x);\r
142     data[invocation].u64.xy  = subgroupQuadSwapDiagonal(data[1].u64.xy);\r
143     data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);\r
144     data[invocation].u64     = subgroupQuadSwapDiagonal(data[3].u64);\r
145 \r
146     data[invocation].f16.x   = subgroupQuadBroadcast(data[0].f16.x, 1);\r
147     data[invocation].f16.xy  = subgroupQuadBroadcast(data[1].f16.xy, 1);\r
148     data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);\r
149     data[invocation].f16     = subgroupQuadBroadcast(data[3].f16, 1);\r
150 \r
151     data[invocation].f16.x   = subgroupQuadSwapHorizontal(data[0].f16.x);\r
152     data[invocation].f16.xy  = subgroupQuadSwapHorizontal(data[1].f16.xy);\r
153     data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);\r
154     data[invocation].f16     = subgroupQuadSwapHorizontal(data[3].f16);\r
155 \r
156     data[invocation].f16.x   = subgroupQuadSwapVertical(data[0].f16.x);\r
157     data[invocation].f16.xy  = subgroupQuadSwapVertical(data[1].f16.xy);\r
158     data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);\r
159     data[invocation].f16     = subgroupQuadSwapVertical(data[3].f16);\r
160 \r
161     data[invocation].f16.x   = subgroupQuadSwapDiagonal(data[0].f16.x);\r
162     data[invocation].f16.xy  = subgroupQuadSwapDiagonal(data[1].f16.xy);\r
163     data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);\r
164     data[invocation].f16     = subgroupQuadSwapDiagonal(data[3].f16);\r
165 }\r