yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
b937eae5
main
1#version 450 core 2#extension GL_KHR_memory_scope_semantics : enable 3#extension GL_EXT_long_vector : enable 4#extension GL_EXT_shader_explicit_arithmetic_types : enable 5#extension GL_EXT_buffer_reference : enable 6#extension GL_EXT_expect_assume : enable 7#extension GL_EXT_bfloat16 : enable 8#extension GL_KHR_shader_subgroup_arithmetic : enable 9#extension GL_KHR_shader_subgroup_clustered : enable 10#extension GL_NV_shader_subgroup_partitioned : enable 11#extension GL_KHR_shader_subgroup_quad : enable 12#extension GL_KHR_shader_subgroup_shuffle : enable 13#extension GL_KHR_shader_subgroup_shuffle_relative : enable 14#extension GL_KHR_shader_subgroup_rotate : enable 15#extension GL_KHR_shader_subgroup_vote : enable 16#extension GL_KHR_shader_subgroup_ballot : enable 17#extension GL_EXT_shader_subgroup_extended_types_int64 : enable 18 19 20 21 22layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in; 23 24void main() 25{ 26 vector<float16_t, 5> vf16; 27 vector<float, 5> vf32; 28 vector<float64_t, 5> vf64; 29 vector<uint16_t, 5> vu16; 30 vector<int16_t, 5> vi16; 31 vector<uint32_t, 5> vu32; 32 vector<int32_t, 5> vi32; 33 vector<uint64_t, 5> vu64; 34 vector<int64_t, 5> vi64; 35 vector<bool, 5> vb; 36 37 bool b; 38 uint u; 39 uvec4 vu4; 40 41 b = subgroupAllEqual(vu32); 42 vu32 = subgroupBroadcast(vu32, 1u); 43 vu32 = subgroupBroadcastFirst(vu32); 44 vu32 = subgroupShuffle(vu32, u); 45 vu32 = subgroupShuffleXor(vu32, u); 46 vu32 = subgroupShuffleUp(vu32, u); 47 vu32 = subgroupShuffleDown(vu32, u); 48 vu32 = subgroupRotate(vu32, u); 49 vu32 = subgroupClusteredRotate(vu32, u, 4); 50 vu32 = subgroupAdd(vu32); 51 vu32 = subgroupMul(vu32); 52 vu32 = subgroupMin(vu32); 53 vu32 = subgroupMax(vu32); 54 vu32 = subgroupAnd(vu32); 55 vu32 = subgroupOr(vu32); 56 vu32 = subgroupXor(vu32); 57 vu32 = subgroupInclusiveAdd(vu32); 58 vu32 = subgroupInclusiveMul(vu32); 59 vu32 = subgroupInclusiveMin(vu32); 60 vu32 = subgroupInclusiveMax(vu32); 61 vu32 = subgroupInclusiveAnd(vu32); 62 vu32 = subgroupInclusiveOr(vu32); 63 vu32 = subgroupInclusiveXor(vu32); 64 vu32 = subgroupExclusiveAdd(vu32); 65 vu32 = subgroupExclusiveMul(vu32); 66 vu32 = subgroupExclusiveMin(vu32); 67 vu32 = subgroupExclusiveMax(vu32); 68 vu32 = subgroupExclusiveAnd(vu32); 69 vu32 = subgroupExclusiveOr(vu32); 70 vu32 = subgroupExclusiveXor(vu32); 71 vu32 = subgroupClusteredAdd(vu32, 4); 72 vu32 = subgroupClusteredMul(vu32, 4); 73 vu32 = subgroupClusteredMin(vu32, 4); 74 vu32 = subgroupClusteredMax(vu32, 4); 75 vu32 = subgroupClusteredAnd(vu32, 4); 76 vu32 = subgroupClusteredOr(vu32, 4); 77 vu32 = subgroupClusteredXor(vu32, 4); 78 vu32 = subgroupQuadBroadcast(vu32, 1); 79 vu32 = subgroupQuadSwapHorizontal(vu32); 80 vu32 = subgroupQuadSwapVertical(vu32); 81 vu32 = subgroupQuadSwapDiagonal(vu32); 82 vu4 = subgroupPartitionNV(vu32); 83 vu32 = subgroupPartitionedAddNV(vu32, vu4); 84 vu32 = subgroupPartitionedMulNV(vu32, vu4); 85 vu32 = subgroupPartitionedMinNV(vu32, vu4); 86 vu32 = subgroupPartitionedMaxNV(vu32, vu4); 87 vu32 = subgroupPartitionedAndNV(vu32, vu4); 88 vu32 = subgroupPartitionedOrNV(vu32, vu4); 89 vu32 = subgroupPartitionedXorNV(vu32, vu4); 90 vu32 = subgroupPartitionedInclusiveAddNV(vu32, vu4); 91 vu32 = subgroupPartitionedInclusiveMulNV(vu32, vu4); 92 vu32 = subgroupPartitionedInclusiveMinNV(vu32, vu4); 93 vu32 = subgroupPartitionedInclusiveMaxNV(vu32, vu4); 94 vu32 = subgroupPartitionedInclusiveAndNV(vu32, vu4); 95 vu32 = subgroupPartitionedInclusiveOrNV(vu32, vu4); 96 vu32 = subgroupPartitionedInclusiveXorNV(vu32, vu4); 97 vu32 = subgroupPartitionedExclusiveAddNV(vu32, vu4); 98 vu32 = subgroupPartitionedExclusiveMulNV(vu32, vu4); 99 vu32 = subgroupPartitionedExclusiveMinNV(vu32, vu4); 100 vu32 = subgroupPartitionedExclusiveMaxNV(vu32, vu4); 101 vu32 = subgroupPartitionedExclusiveAndNV(vu32, vu4); 102 vu32 = subgroupPartitionedExclusiveOrNV(vu32, vu4); 103 vu32 = subgroupPartitionedExclusiveXorNV(vu32, vu4); 104 105 b = subgroupAllEqual(vf32); 106 vf32 = subgroupBroadcast(vf32, 1u); 107 vf32 = subgroupBroadcastFirst(vf32); 108 vf32 = subgroupShuffle(vf32, u); 109 vf32 = subgroupShuffleXor(vf32, u); 110 vf32 = subgroupShuffleUp(vf32, u); 111 vf32 = subgroupShuffleDown(vf32, u); 112 vf32 = subgroupRotate(vf32, u); 113 vf32 = subgroupClusteredRotate(vf32, u, 4); 114 vf32 = subgroupAdd(vf32); 115 vf32 = subgroupMul(vf32); 116 vf32 = subgroupMin(vf32); 117 vf32 = subgroupMax(vf32); 118 //vf32 = subgroupAnd(vf32); 119 //vf32 = subgroupOr(vf32); 120 //vf32 = subgroupXor(vf32); 121 vf32 = subgroupInclusiveAdd(vf32); 122 vf32 = subgroupInclusiveMul(vf32); 123 vf32 = subgroupInclusiveMin(vf32); 124 vf32 = subgroupInclusiveMax(vf32); 125 //vf32 = subgroupInclusiveAnd(vf32); 126 //vf32 = subgroupInclusiveOr(vf32); 127 //vf32 = subgroupInclusiveXor(vf32); 128 vf32 = subgroupExclusiveAdd(vf32); 129 vf32 = subgroupExclusiveMul(vf32); 130 vf32 = subgroupExclusiveMin(vf32); 131 vf32 = subgroupExclusiveMax(vf32); 132 //vf32 = subgroupExclusiveAnd(vf32); 133 //vf32 = subgroupExclusiveOr(vf32); 134 //vf32 = subgroupExclusiveXor(vf32); 135 vf32 = subgroupClusteredAdd(vf32, 4); 136 vf32 = subgroupClusteredMul(vf32, 4); 137 vf32 = subgroupClusteredMin(vf32, 4); 138 vf32 = subgroupClusteredMax(vf32, 4); 139 //vf32 = subgroupClusteredAnd(vf32, 4); 140 //vf32 = subgroupClusteredOr(vf32, 4); 141 //vf32 = subgroupClusteredXor(vf32, 4); 142 vf32 = subgroupQuadBroadcast(vf32, 1); 143 vf32 = subgroupQuadSwapHorizontal(vf32); 144 vf32 = subgroupQuadSwapVertical(vf32); 145 vf32 = subgroupQuadSwapDiagonal(vf32); 146 vu4 = subgroupPartitionNV(vf32); 147 vf32 = subgroupPartitionedAddNV(vf32, vu4); 148 vf32 = subgroupPartitionedMulNV(vf32, vu4); 149 vf32 = subgroupPartitionedMinNV(vf32, vu4); 150 vf32 = subgroupPartitionedMaxNV(vf32, vu4); 151 //vf32 = subgroupPartitionedAndNV(vf32, vu4); 152 //vf32 = subgroupPartitionedOrNV(vf32, vu4); 153 //vf32 = subgroupPartitionedXorNV(vf32, vu4); 154 vf32 = subgroupPartitionedInclusiveAddNV(vf32, vu4); 155 vf32 = subgroupPartitionedInclusiveMulNV(vf32, vu4); 156 vf32 = subgroupPartitionedInclusiveMinNV(vf32, vu4); 157 vf32 = subgroupPartitionedInclusiveMaxNV(vf32, vu4); 158 //vf32 = subgroupPartitionedInclusiveAndNV(vf32, vu4); 159 //vf32 = subgroupPartitionedInclusiveOrNV(vf32, vu4); 160 //vf32 = subgroupPartitionedInclusiveXorNV(vf32, vu4); 161 vf32 = subgroupPartitionedExclusiveAddNV(vf32, vu4); 162 vf32 = subgroupPartitionedExclusiveMulNV(vf32, vu4); 163 vf32 = subgroupPartitionedExclusiveMinNV(vf32, vu4); 164 vf32 = subgroupPartitionedExclusiveMaxNV(vf32, vu4); 165 //vf32 = subgroupPartitionedExclusiveAndNV(vf32, vu4); 166 //vf32 = subgroupPartitionedExclusiveOrNV(vf32, vu4); 167 //vf32 = subgroupPartitionedExclusiveXorNV(vf32, vu4); 168 169 b = subgroupAllEqual(vf64); 170 vf64 = subgroupBroadcast(vf64, 1u); 171 vf64 = subgroupBroadcastFirst(vf64); 172 vf64 = subgroupShuffle(vf64, u); 173 vf64 = subgroupShuffleXor(vf64, u); 174 vf64 = subgroupShuffleUp(vf64, u); 175 vf64 = subgroupShuffleDown(vf64, u); 176 vf64 = subgroupRotate(vf64, u); 177 vf64 = subgroupClusteredRotate(vf64, u, 4); 178 vf64 = subgroupAdd(vf64); 179 vf64 = subgroupMul(vf64); 180 vf64 = subgroupMin(vf64); 181 vf64 = subgroupMax(vf64); 182 //vf64 = subgroupAnd(vf64); 183 //vf64 = subgroupOr(vf64); 184 //vf64 = subgroupXor(vf64); 185 vf64 = subgroupInclusiveAdd(vf64); 186 vf64 = subgroupInclusiveMul(vf64); 187 vf64 = subgroupInclusiveMin(vf64); 188 vf64 = subgroupInclusiveMax(vf64); 189 //vf64 = subgroupInclusiveAnd(vf64); 190 //vf64 = subgroupInclusiveOr(vf64); 191 //vf64 = subgroupInclusiveXor(vf64); 192 vf64 = subgroupExclusiveAdd(vf64); 193 vf64 = subgroupExclusiveMul(vf64); 194 vf64 = subgroupExclusiveMin(vf64); 195 vf64 = subgroupExclusiveMax(vf64); 196 //vf64 = subgroupExclusiveAnd(vf64); 197 //vf64 = subgroupExclusiveOr(vf64); 198 //vf64 = subgroupExclusiveXor(vf64); 199 vf64 = subgroupClusteredAdd(vf64, 4); 200 vf64 = subgroupClusteredMul(vf64, 4); 201 vf64 = subgroupClusteredMin(vf64, 4); 202 vf64 = subgroupClusteredMax(vf64, 4); 203 //vf64 = subgroupClusteredAnd(vf64, 4); 204 //vf64 = subgroupClusteredOr(vf64, 4); 205 //vf64 = subgroupClusteredXor(vf64, 4); 206 vf64 = subgroupQuadBroadcast(vf64, 1); 207 vf64 = subgroupQuadSwapHorizontal(vf64); 208 vf64 = subgroupQuadSwapVertical(vf64); 209 vf64 = subgroupQuadSwapDiagonal(vf64); 210 vu4 = subgroupPartitionNV(vf64); 211 vf64 = subgroupPartitionedAddNV(vf64, vu4); 212 vf64 = subgroupPartitionedMulNV(vf64, vu4); 213 vf64 = subgroupPartitionedMinNV(vf64, vu4); 214 vf64 = subgroupPartitionedMaxNV(vf64, vu4); 215 //vf64 = subgroupPartitionedAndNV(vf64, vu4); 216 //vf64 = subgroupPartitionedOrNV(vf64, vu4); 217 //vf64 = subgroupPartitionedXorNV(vf64, vu4); 218 vf64 = subgroupPartitionedInclusiveAddNV(vf64, vu4); 219 vf64 = subgroupPartitionedInclusiveMulNV(vf64, vu4); 220 vf64 = subgroupPartitionedInclusiveMinNV(vf64, vu4); 221 vf64 = subgroupPartitionedInclusiveMaxNV(vf64, vu4); 222 //vf64 = subgroupPartitionedInclusiveAndNV(vf64, vu4); 223 //vf64 = subgroupPartitionedInclusiveOrNV(vf64, vu4); 224 //vf64 = subgroupPartitionedInclusiveXorNV(vf64, vu4); 225 vf64 = subgroupPartitionedExclusiveAddNV(vf64, vu4); 226 vf64 = subgroupPartitionedExclusiveMulNV(vf64, vu4); 227 vf64 = subgroupPartitionedExclusiveMinNV(vf64, vu4); 228 vf64 = subgroupPartitionedExclusiveMaxNV(vf64, vu4); 229 //vf64 = subgroupPartitionedExclusiveAndNV(vf64, vu4); 230 //vf64 = subgroupPartitionedExclusiveOrNV(vf64, vu4); 231 //vf64 = subgroupPartitionedExclusiveXorNV(vf64, vu4); 232 233 b = subgroupAllEqual(vb); 234 vb = subgroupBroadcast(vb, 1u); 235 vb = subgroupBroadcastFirst(vb); 236 vb = subgroupShuffle(vb, u); 237 vb = subgroupShuffleXor(vb, u); 238 vb = subgroupShuffleUp(vb, u); 239 vb = subgroupShuffleDown(vb, u); 240 vb = subgroupRotate(vb, u); 241 vb = subgroupClusteredRotate(vb, u, 4); 242 //vb = subgroupAdd(vb); 243 //vb = subgroupMul(vb); 244 //vb = subgroupMin(vb); 245 //vb = subgroupMax(vb); 246 vb = subgroupAnd(vb); 247 vb = subgroupOr(vb); 248 vb = subgroupXor(vb); 249 //vb = subgroupInclusiveAdd(vb); 250 //vb = subgroupInclusiveMul(vb); 251 //vb = subgroupInclusiveMin(vb); 252 //vb = subgroupInclusiveMax(vb); 253 vb = subgroupInclusiveAnd(vb); 254 vb = subgroupInclusiveOr(vb); 255 vb = subgroupInclusiveXor(vb); 256 //vb = subgroupExclusiveAdd(vb); 257 //vb = subgroupExclusiveMul(vb); 258 //vb = subgroupExclusiveMin(vb); 259 //vb = subgroupExclusiveMax(vb); 260 vb = subgroupExclusiveAnd(vb); 261 vb = subgroupExclusiveOr(vb); 262 vb = subgroupExclusiveXor(vb); 263 //vb = subgroupClusteredAdd(vb, 4); 264 //vb = subgroupClusteredMul(vb, 4); 265 //vb = subgroupClusteredMin(vb, 4); 266 //vb = subgroupClusteredMax(vb, 4); 267 vb = subgroupClusteredAnd(vb, 4); 268 vb = subgroupClusteredOr(vb, 4); 269 vb = subgroupClusteredXor(vb, 4); 270 vb = subgroupQuadBroadcast(vb, 1); 271 vb = subgroupQuadSwapHorizontal(vb); 272 vb = subgroupQuadSwapVertical(vb); 273 vb = subgroupQuadSwapDiagonal(vb); 274 vu4 = subgroupPartitionNV(vb); 275 //vb = subgroupPartitionedAddNV(vb, vu4); 276 //vb = subgroupPartitionedMulNV(vb, vu4); 277 //vb = subgroupPartitionedMinNV(vb, vu4); 278 //vb = subgroupPartitionedMaxNV(vb, vu4); 279 vb = subgroupPartitionedAndNV(vb, vu4); 280 vb = subgroupPartitionedOrNV(vb, vu4); 281 vb = subgroupPartitionedXorNV(vb, vu4); 282 //vb = subgroupPartitionedInclusiveAddNV(vb, vu4); 283 //vb = subgroupPartitionedInclusiveMulNV(vb, vu4); 284 //vb = subgroupPartitionedInclusiveMinNV(vb, vu4); 285 //vb = subgroupPartitionedInclusiveMaxNV(vb, vu4); 286 vb = subgroupPartitionedInclusiveAndNV(vb, vu4); 287 vb = subgroupPartitionedInclusiveOrNV(vb, vu4); 288 vb = subgroupPartitionedInclusiveXorNV(vb, vu4); 289 //vb = subgroupPartitionedExclusiveAddNV(vb, vu4); 290 //vb = subgroupPartitionedExclusiveMulNV(vb, vu4); 291 //vb = subgroupPartitionedExclusiveMinNV(vb, vu4); 292 //vb = subgroupPartitionedExclusiveMaxNV(vb, vu4); 293 vb = subgroupPartitionedExclusiveAndNV(vb, vu4); 294 vb = subgroupPartitionedExclusiveOrNV(vb, vu4); 295 vb = subgroupPartitionedExclusiveXorNV(vb, vu4); 296 297 b = subgroupAllEqual(vu64); 298 vu64 = subgroupBroadcast(vu64, 1u); 299 vu64 = subgroupBroadcastFirst(vu64); 300 vu64 = subgroupShuffle(vu64, u); 301 vu64 = subgroupShuffleXor(vu64, u); 302 vu64 = subgroupShuffleUp(vu64, u); 303 vu64 = subgroupShuffleDown(vu64, u); 304 vu64 = subgroupRotate(vu64, u); 305 vu64 = subgroupClusteredRotate(vu64, u, 4); 306 vu64 = subgroupAdd(vu64); 307 vu64 = subgroupMul(vu64); 308 vu64 = subgroupMin(vu64); 309 vu64 = subgroupMax(vu64); 310 vu64 = subgroupAnd(vu64); 311 vu64 = subgroupOr(vu64); 312 vu64 = subgroupXor(vu64); 313 vu64 = subgroupInclusiveAdd(vu64); 314 vu64 = subgroupInclusiveMul(vu64); 315 vu64 = subgroupInclusiveMin(vu64); 316 vu64 = subgroupInclusiveMax(vu64); 317 vu64 = subgroupInclusiveAnd(vu64); 318 vu64 = subgroupInclusiveOr(vu64); 319 vu64 = subgroupInclusiveXor(vu64); 320 vu64 = subgroupExclusiveAdd(vu64); 321 vu64 = subgroupExclusiveMul(vu64); 322 vu64 = subgroupExclusiveMin(vu64); 323 vu64 = subgroupExclusiveMax(vu64); 324 vu64 = subgroupExclusiveAnd(vu64); 325 vu64 = subgroupExclusiveOr(vu64); 326 vu64 = subgroupExclusiveXor(vu64); 327 vu64 = subgroupClusteredAdd(vu64, 4); 328 vu64 = subgroupClusteredMul(vu64, 4); 329 vu64 = subgroupClusteredMin(vu64, 4); 330 vu64 = subgroupClusteredMax(vu64, 4); 331 vu64 = subgroupClusteredAnd(vu64, 4); 332 vu64 = subgroupClusteredOr(vu64, 4); 333 vu64 = subgroupClusteredXor(vu64, 4); 334 vu64 = subgroupQuadBroadcast(vu64, 1); 335 vu64 = subgroupQuadSwapHorizontal(vu64); 336 vu64 = subgroupQuadSwapVertical(vu64); 337 vu64 = subgroupQuadSwapDiagonal(vu64); 338 vu4 = subgroupPartitionNV(vu64); 339 vu64 = subgroupPartitionedAddNV(vu64, vu4); 340 vu64 = subgroupPartitionedMulNV(vu64, vu4); 341 vu64 = subgroupPartitionedMinNV(vu64, vu4); 342 vu64 = subgroupPartitionedMaxNV(vu64, vu4); 343 vu64 = subgroupPartitionedAndNV(vu64, vu4); 344 vu64 = subgroupPartitionedOrNV(vu64, vu4); 345 vu64 = subgroupPartitionedXorNV(vu64, vu4); 346 vu64 = subgroupPartitionedInclusiveAddNV(vu64, vu4); 347 vu64 = subgroupPartitionedInclusiveMulNV(vu64, vu4); 348 vu64 = subgroupPartitionedInclusiveMinNV(vu64, vu4); 349 vu64 = subgroupPartitionedInclusiveMaxNV(vu64, vu4); 350 vu64 = subgroupPartitionedInclusiveAndNV(vu64, vu4); 351 vu64 = subgroupPartitionedInclusiveOrNV(vu64, vu4); 352 vu64 = subgroupPartitionedInclusiveXorNV(vu64, vu4); 353 vu64 = subgroupPartitionedExclusiveAddNV(vu64, vu4); 354 vu64 = subgroupPartitionedExclusiveMulNV(vu64, vu4); 355 vu64 = subgroupPartitionedExclusiveMinNV(vu64, vu4); 356 vu64 = subgroupPartitionedExclusiveMaxNV(vu64, vu4); 357 vu64 = subgroupPartitionedExclusiveAndNV(vu64, vu4); 358 vu64 = subgroupPartitionedExclusiveOrNV(vu64, vu4); 359 vu64 = subgroupPartitionedExclusiveXorNV(vu64, vu4); 360 361}