1#version 450 2 3#extension GL_KHR_shader_subgroup_arithmetic: enable 4 5layout (local_size_x = 8) in; 6 7layout(binding = 0) buffer Buffers 8{ 9 vec4 f4; 10 ivec4 i4; 11 uvec4 u4; 12 dvec4 d4; 13} data[4]; 14 15void main() 16{ 17 uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4; 18 19 data[invocation].f4.x = subgroupAdd(data[0].f4.x); 20 data[invocation].f4.xy = subgroupAdd(data[1].f4.xy); 21 data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz); 22 data[invocation].f4 = subgroupAdd(data[3].f4); 23 24 data[invocation].i4.x = subgroupAdd(data[0].i4.x); 25 data[invocation].i4.xy = subgroupAdd(data[1].i4.xy); 26 data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz); 27 data[invocation].i4 = subgroupAdd(data[3].i4); 28 29 data[invocation].u4.x = subgroupAdd(data[0].u4.x); 30 data[invocation].u4.xy = subgroupAdd(data[1].u4.xy); 31 data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz); 32 data[invocation].u4 = subgroupAdd(data[3].u4); 33 34 data[invocation].d4.x = subgroupAdd(data[0].d4.x); 35 data[invocation].d4.xy = subgroupAdd(data[1].d4.xy); 36 data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz); 37 data[invocation].d4 = subgroupAdd(data[3].d4); 38 39 data[invocation].f4.x = subgroupMul(data[0].f4.x); 40 data[invocation].f4.xy = subgroupMul(data[1].f4.xy); 41 data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz); 42 data[invocation].f4 = subgroupMul(data[3].f4); 43 44 data[invocation].i4.x = subgroupMul(data[0].i4.x); 45 data[invocation].i4.xy = subgroupMul(data[1].i4.xy); 46 data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz); 47 data[invocation].i4 = subgroupMul(data[3].i4); 48 49 data[invocation].u4.x = subgroupMul(data[0].u4.x); 50 data[invocation].u4.xy = subgroupMul(data[1].u4.xy); 51 data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz); 52 data[invocation].u4 = subgroupMul(data[3].u4); 53 54 data[invocation].d4.x = subgroupMul(data[0].d4.x); 55 data[invocation].d4.xy = subgroupMul(data[1].d4.xy); 56 data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz); 57 data[invocation].d4 = subgroupMul(data[3].d4); 58 59 data[invocation].f4.x = subgroupMin(data[0].f4.x); 60 data[invocation].f4.xy = subgroupMin(data[1].f4.xy); 61 data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz); 62 data[invocation].f4 = subgroupMin(data[3].f4); 63 64 data[invocation].i4.x = subgroupMin(data[0].i4.x); 65 data[invocation].i4.xy = subgroupMin(data[1].i4.xy); 66 data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz); 67 data[invocation].i4 = subgroupMin(data[3].i4); 68 69 data[invocation].u4.x = subgroupMin(data[0].u4.x); 70 data[invocation].u4.xy = subgroupMin(data[1].u4.xy); 71 data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz); 72 data[invocation].u4 = subgroupMin(data[3].u4); 73 74 data[invocation].d4.x = subgroupMin(data[0].d4.x); 75 data[invocation].d4.xy = subgroupMin(data[1].d4.xy); 76 data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz); 77 data[invocation].d4 = subgroupMin(data[3].d4); 78 79 data[invocation].f4.x = subgroupMax(data[0].f4.x); 80 data[invocation].f4.xy = subgroupMax(data[1].f4.xy); 81 data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz); 82 data[invocation].f4 = subgroupMax(data[3].f4); 83 84 data[invocation].i4.x = subgroupMax(data[0].i4.x); 85 data[invocation].i4.xy = subgroupMax(data[1].i4.xy); 86 data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz); 87 data[invocation].i4 = subgroupMax(data[3].i4); 88 89 data[invocation].u4.x = subgroupMax(data[0].u4.x); 90 data[invocation].u4.xy = subgroupMax(data[1].u4.xy); 91 data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz); 92 data[invocation].u4 = subgroupMax(data[3].u4); 93 94 data[invocation].d4.x = subgroupMax(data[0].d4.x); 95 data[invocation].d4.xy = subgroupMax(data[1].d4.xy); 96 data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz); 97 data[invocation].d4 = subgroupMax(data[3].d4); 98 99 data[invocation].i4.x = subgroupAnd(data[0].i4.x); 100 data[invocation].i4.xy = subgroupAnd(data[1].i4.xy); 101 data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz); 102 data[invocation].i4 = subgroupAnd(data[3].i4); 103 104 data[invocation].u4.x = subgroupAnd(data[0].u4.x); 105 data[invocation].u4.xy = subgroupAnd(data[1].u4.xy); 106 data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz); 107 data[invocation].u4 = subgroupAnd(data[3].u4); 108 109 data[invocation].i4.x = int(subgroupAnd(data[0].i4.x < 0)); 110 data[invocation].i4.xy = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0)))); 111 data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0)))); 112 data[invocation].i4 = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0)))); 113 114 data[invocation].i4.x = subgroupOr(data[0].i4.x); 115 data[invocation].i4.xy = subgroupOr(data[1].i4.xy); 116 data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz); 117 data[invocation].i4 = subgroupOr(data[3].i4); 118 119 data[invocation].u4.x = subgroupOr(data[0].u4.x); 120 data[invocation].u4.xy = subgroupOr(data[1].u4.xy); 121 data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz); 122 data[invocation].u4 = subgroupOr(data[3].u4); 123 124 data[invocation].i4.x = int(subgroupOr(data[0].i4.x < 0)); 125 data[invocation].i4.xy = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0)))); 126 data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0)))); 127 data[invocation].i4 = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0)))); 128 129 data[invocation].i4.x = subgroupXor(data[0].i4.x); 130 data[invocation].i4.xy = subgroupXor(data[1].i4.xy); 131 data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz); 132 data[invocation].i4 = subgroupXor(data[3].i4); 133 134 data[invocation].u4.x = subgroupXor(data[0].u4.x); 135 data[invocation].u4.xy = subgroupXor(data[1].u4.xy); 136 data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz); 137 data[invocation].u4 = subgroupXor(data[3].u4); 138 139 data[invocation].i4.x = int(subgroupXor(data[0].i4.x < 0)); 140 data[invocation].i4.xy = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0)))); 141 data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0)))); 142 data[invocation].i4 = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0)))); 143 144 data[invocation].f4.x = subgroupInclusiveAdd(data[0].f4.x); 145 data[invocation].f4.xy = subgroupInclusiveAdd(data[1].f4.xy); 146 data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz); 147 data[invocation].f4 = subgroupInclusiveAdd(data[3].f4); 148 149 data[invocation].i4.x = subgroupInclusiveAdd(data[0].i4.x); 150 data[invocation].i4.xy = subgroupInclusiveAdd(data[1].i4.xy); 151 data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz); 152 data[invocation].i4 = subgroupInclusiveAdd(data[3].i4); 153 154 data[invocation].u4.x = subgroupInclusiveAdd(data[0].u4.x); 155 data[invocation].u4.xy = subgroupInclusiveAdd(data[1].u4.xy); 156 data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz); 157 data[invocation].u4 = subgroupInclusiveAdd(data[3].u4); 158 159 data[invocation].d4.x = subgroupInclusiveAdd(data[0].d4.x); 160 data[invocation].d4.xy = subgroupInclusiveAdd(data[1].d4.xy); 161 data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz); 162 data[invocation].d4 = subgroupInclusiveAdd(data[3].d4); 163 164 data[invocation].f4.x = subgroupInclusiveMul(data[0].f4.x); 165 data[invocation].f4.xy = subgroupInclusiveMul(data[1].f4.xy); 166 data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz); 167 data[invocation].f4 = subgroupInclusiveMul(data[3].f4); 168 169 data[invocation].i4.x = subgroupInclusiveMul(data[0].i4.x); 170 data[invocation].i4.xy = subgroupInclusiveMul(data[1].i4.xy); 171 data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz); 172 data[invocation].i4 = subgroupInclusiveMul(data[3].i4); 173 174 data[invocation].u4.x = subgroupInclusiveMul(data[0].u4.x); 175 data[invocation].u4.xy = subgroupInclusiveMul(data[1].u4.xy); 176 data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz); 177 data[invocation].u4 = subgroupInclusiveMul(data[3].u4); 178 179 data[invocation].d4.x = subgroupInclusiveMul(data[0].d4.x); 180 data[invocation].d4.xy = subgroupInclusiveMul(data[1].d4.xy); 181 data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz); 182 data[invocation].d4 = subgroupInclusiveMul(data[3].d4); 183 184 data[invocation].f4.x = subgroupInclusiveMin(data[0].f4.x); 185 data[invocation].f4.xy = subgroupInclusiveMin(data[1].f4.xy); 186 data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz); 187 data[invocation].f4 = subgroupInclusiveMin(data[3].f4); 188 189 data[invocation].i4.x = subgroupInclusiveMin(data[0].i4.x); 190 data[invocation].i4.xy = subgroupInclusiveMin(data[1].i4.xy); 191 data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz); 192 data[invocation].i4 = subgroupInclusiveMin(data[3].i4); 193 194 data[invocation].u4.x = subgroupInclusiveMin(data[0].u4.x); 195 data[invocation].u4.xy = subgroupInclusiveMin(data[1].u4.xy); 196 data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz); 197 data[invocation].u4 = subgroupInclusiveMin(data[3].u4); 198 199 data[invocation].d4.x = subgroupInclusiveMin(data[0].d4.x); 200 data[invocation].d4.xy = subgroupInclusiveMin(data[1].d4.xy); 201 data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz); 202 data[invocation].d4 = subgroupInclusiveMin(data[3].d4); 203 204 data[invocation].f4.x = subgroupInclusiveMax(data[0].f4.x); 205 data[invocation].f4.xy = subgroupInclusiveMax(data[1].f4.xy); 206 data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz); 207 data[invocation].f4 = subgroupInclusiveMax(data[3].f4); 208 209 data[invocation].i4.x = subgroupInclusiveMax(data[0].i4.x); 210 data[invocation].i4.xy = subgroupInclusiveMax(data[1].i4.xy); 211 data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz); 212 data[invocation].i4 = subgroupInclusiveMax(data[3].i4); 213 214 data[invocation].u4.x = subgroupInclusiveMax(data[0].u4.x); 215 data[invocation].u4.xy = subgroupInclusiveMax(data[1].u4.xy); 216 data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz); 217 data[invocation].u4 = subgroupInclusiveMax(data[3].u4); 218 219 data[invocation].d4.x = subgroupInclusiveMax(data[0].d4.x); 220 data[invocation].d4.xy = subgroupInclusiveMax(data[1].d4.xy); 221 data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz); 222 data[invocation].d4 = subgroupInclusiveMax(data[3].d4); 223 224 data[invocation].i4.x = subgroupInclusiveAnd(data[0].i4.x); 225 data[invocation].i4.xy = subgroupInclusiveAnd(data[1].i4.xy); 226 data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz); 227 data[invocation].i4 = subgroupInclusiveAnd(data[3].i4); 228 229 data[invocation].u4.x = subgroupInclusiveAnd(data[0].u4.x); 230 data[invocation].u4.xy = subgroupInclusiveAnd(data[1].u4.xy); 231 data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz); 232 data[invocation].u4 = subgroupInclusiveAnd(data[3].u4); 233 234 data[invocation].i4.x = int(subgroupInclusiveAnd(data[0].i4.x < 0)); 235 data[invocation].i4.xy = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0)))); 236 data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0)))); 237 data[invocation].i4 = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0)))); 238 239 data[invocation].i4.x = subgroupInclusiveOr(data[0].i4.x); 240 data[invocation].i4.xy = subgroupInclusiveOr(data[1].i4.xy); 241 data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz); 242 data[invocation].i4 = subgroupInclusiveOr(data[3].i4); 243 244 data[invocation].u4.x = subgroupInclusiveOr(data[0].u4.x); 245 data[invocation].u4.xy = subgroupInclusiveOr(data[1].u4.xy); 246 data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz); 247 data[invocation].u4 = subgroupInclusiveOr(data[3].u4); 248 249 data[invocation].i4.x = int(subgroupInclusiveOr(data[0].i4.x < 0)); 250 data[invocation].i4.xy = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0)))); 251 data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0)))); 252 data[invocation].i4 = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0)))); 253 254 data[invocation].i4.x = subgroupInclusiveXor(data[0].i4.x); 255 data[invocation].i4.xy = subgroupInclusiveXor(data[1].i4.xy); 256 data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz); 257 data[invocation].i4 = subgroupInclusiveXor(data[3].i4); 258 259 data[invocation].u4.x = subgroupInclusiveXor(data[0].u4.x); 260 data[invocation].u4.xy = subgroupInclusiveXor(data[1].u4.xy); 261 data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz); 262 data[invocation].u4 = subgroupInclusiveXor(data[3].u4); 263 264 data[invocation].i4.x = int(subgroupInclusiveXor(data[0].i4.x < 0)); 265 data[invocation].i4.xy = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0)))); 266 data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0)))); 267 data[invocation].i4 = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0)))); 268 269 data[invocation].f4.x = subgroupExclusiveAdd(data[0].f4.x); 270 data[invocation].f4.xy = subgroupExclusiveAdd(data[1].f4.xy); 271 data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz); 272 data[invocation].f4 = subgroupExclusiveAdd(data[3].f4); 273 274 data[invocation].i4.x = subgroupExclusiveAdd(data[0].i4.x); 275 data[invocation].i4.xy = subgroupExclusiveAdd(data[1].i4.xy); 276 data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz); 277 data[invocation].i4 = subgroupExclusiveAdd(data[3].i4); 278 279 data[invocation].u4.x = subgroupExclusiveAdd(data[0].u4.x); 280 data[invocation].u4.xy = subgroupExclusiveAdd(data[1].u4.xy); 281 data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz); 282 data[invocation].u4 = subgroupExclusiveAdd(data[3].u4); 283 284 data[invocation].d4.x = subgroupExclusiveAdd(data[0].d4.x); 285 data[invocation].d4.xy = subgroupExclusiveAdd(data[1].d4.xy); 286 data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz); 287 data[invocation].d4 = subgroupExclusiveAdd(data[3].d4); 288 289 data[invocation].f4.x = subgroupExclusiveMul(data[0].f4.x); 290 data[invocation].f4.xy = subgroupExclusiveMul(data[1].f4.xy); 291 data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz); 292 data[invocation].f4 = subgroupExclusiveMul(data[3].f4); 293 294 data[invocation].i4.x = subgroupExclusiveMul(data[0].i4.x); 295 data[invocation].i4.xy = subgroupExclusiveMul(data[1].i4.xy); 296 data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz); 297 data[invocation].i4 = subgroupExclusiveMul(data[3].i4); 298 299 data[invocation].u4.x = subgroupExclusiveMul(data[0].u4.x); 300 data[invocation].u4.xy = subgroupExclusiveMul(data[1].u4.xy); 301 data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz); 302 data[invocation].u4 = subgroupExclusiveMul(data[3].u4); 303 304 data[invocation].d4.x = subgroupExclusiveMul(data[0].d4.x); 305 data[invocation].d4.xy = subgroupExclusiveMul(data[1].d4.xy); 306 data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz); 307 data[invocation].d4 = subgroupExclusiveMul(data[3].d4); 308 309 data[invocation].f4.x = subgroupExclusiveMin(data[0].f4.x); 310 data[invocation].f4.xy = subgroupExclusiveMin(data[1].f4.xy); 311 data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz); 312 data[invocation].f4 = subgroupExclusiveMin(data[3].f4); 313 314 data[invocation].i4.x = subgroupExclusiveMin(data[0].i4.x); 315 data[invocation].i4.xy = subgroupExclusiveMin(data[1].i4.xy); 316 data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz); 317 data[invocation].i4 = subgroupExclusiveMin(data[3].i4); 318 319 data[invocation].u4.x = subgroupExclusiveMin(data[0].u4.x); 320 data[invocation].u4.xy = subgroupExclusiveMin(data[1].u4.xy); 321 data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz); 322 data[invocation].u4 = subgroupExclusiveMin(data[3].u4); 323 324 data[invocation].d4.x = subgroupExclusiveMin(data[0].d4.x); 325 data[invocation].d4.xy = subgroupExclusiveMin(data[1].d4.xy); 326 data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz); 327 data[invocation].d4 = subgroupExclusiveMin(data[3].d4); 328 329 data[invocation].f4.x = subgroupExclusiveMax(data[0].f4.x); 330 data[invocation].f4.xy = subgroupExclusiveMax(data[1].f4.xy); 331 data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz); 332 data[invocation].f4 = subgroupExclusiveMax(data[3].f4); 333 334 data[invocation].i4.x = subgroupExclusiveMax(data[0].i4.x); 335 data[invocation].i4.xy = subgroupExclusiveMax(data[1].i4.xy); 336 data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz); 337 data[invocation].i4 = subgroupExclusiveMax(data[3].i4); 338 339 data[invocation].u4.x = subgroupExclusiveMax(data[0].u4.x); 340 data[invocation].u4.xy = subgroupExclusiveMax(data[1].u4.xy); 341 data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz); 342 data[invocation].u4 = subgroupExclusiveMax(data[3].u4); 343 344 data[invocation].d4.x = subgroupExclusiveMax(data[0].d4.x); 345 data[invocation].d4.xy = subgroupExclusiveMax(data[1].d4.xy); 346 data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz); 347 data[invocation].d4 = subgroupExclusiveMax(data[3].d4); 348 349 data[invocation].i4.x = subgroupExclusiveAnd(data[0].i4.x); 350 data[invocation].i4.xy = subgroupExclusiveAnd(data[1].i4.xy); 351 data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz); 352 data[invocation].i4 = subgroupExclusiveAnd(data[3].i4); 353 354 data[invocation].u4.x = subgroupExclusiveAnd(data[0].u4.x); 355 data[invocation].u4.xy = subgroupExclusiveAnd(data[1].u4.xy); 356 data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz); 357 data[invocation].u4 = subgroupExclusiveAnd(data[3].u4); 358 359 data[invocation].i4.x = int(subgroupExclusiveAnd(data[0].i4.x < 0)); 360 data[invocation].i4.xy = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0)))); 361 data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0)))); 362 data[invocation].i4 = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0)))); 363 364 data[invocation].i4.x = subgroupExclusiveOr(data[0].i4.x); 365 data[invocation].i4.xy = subgroupExclusiveOr(data[1].i4.xy); 366 data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz); 367 data[invocation].i4 = subgroupExclusiveOr(data[3].i4); 368 369 data[invocation].u4.x = subgroupExclusiveOr(data[0].u4.x); 370 data[invocation].u4.xy = subgroupExclusiveOr(data[1].u4.xy); 371 data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz); 372 data[invocation].u4 = subgroupExclusiveOr(data[3].u4); 373 374 data[invocation].i4.x = int(subgroupExclusiveOr(data[0].i4.x < 0)); 375 data[invocation].i4.xy = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0)))); 376 data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0)))); 377 data[invocation].i4 = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0)))); 378 379 data[invocation].i4.x = subgroupExclusiveXor(data[0].i4.x); 380 data[invocation].i4.xy = subgroupExclusiveXor(data[1].i4.xy); 381 data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz); 382 data[invocation].i4 = subgroupExclusiveXor(data[3].i4); 383 384 data[invocation].u4.x = subgroupExclusiveXor(data[0].u4.x); 385 data[invocation].u4.xy = subgroupExclusiveXor(data[1].u4.xy); 386 data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz); 387 data[invocation].u4 = subgroupExclusiveXor(data[3].u4); 388 389 data[invocation].i4.x = int(subgroupExclusiveXor(data[0].i4.x < 0)); 390 data[invocation].i4.xy = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0)))); 391 data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0)))); 392 data[invocation].i4 = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0)))); 393} 394