diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out index 23a59132..ea152d9a 100644 --- a/Test/baseResults/spv.subgroupBallot.comp.out +++ b/Test/baseResults/spv.subgroupBallot.comp.out @@ -1,7 +1,7 @@ spv.subgroupBallot.comp // Module Version 10300 // Generated by (magic number): 80007 -// Id's are bound by 417 +// Id's are bound by 397 Capability Shader Capability Float64 @@ -51,7 +51,7 @@ spv.subgroupBallot.comp Decorate 46(Buffers) Block Decorate 49(data) DescriptorSet 0 Decorate 49(data) Binding 0 - Decorate 416 BuiltIn WorkgroupSize + Decorate 396 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -91,30 +91,30 @@ spv.subgroupBallot.comp 83: TypeVector 36(bool) 4 88: TypePointer StorageBuffer 17(ivec4) 96: TypePointer StorageBuffer 40(float) - 103: TypeVector 40(float) 2 - 104: TypePointer StorageBuffer 41(fvec4) - 114: TypeVector 40(float) 3 - 124: 42(int) Constant 3 - 131: TypePointer StorageBuffer 42(int) - 138: TypeVector 42(int) 2 - 139: TypePointer StorageBuffer 43(ivec4) - 149: TypeVector 42(int) 3 - 171: TypeVector 6(int) 2 - 181: TypeVector 6(int) 3 - 197: TypePointer StorageBuffer 44(float64_t) - 204: TypeVector 44(float64_t) 2 - 205: TypePointer StorageBuffer 45(f64vec4) - 215: TypeVector 44(float64_t) 3 - 242: 138(ivec2) ConstantComposite 61 61 - 243: TypeVector 36(bool) 2 - 247: 138(ivec2) ConstantComposite 60 60 - 256: 149(ivec3) ConstantComposite 61 61 61 - 257: TypeVector 36(bool) 3 - 261: 149(ivec3) ConstantComposite 60 60 60 - 269: 43(ivec4) ConstantComposite 61 61 61 61 - 273: 43(ivec4) ConstantComposite 60 60 60 60 - 415: 6(int) Constant 8 - 416: 181(ivec3) ConstantComposite 415 415 64 + 102: TypeVector 40(float) 2 + 103: TypePointer StorageBuffer 41(fvec4) + 112: TypeVector 40(float) 3 + 121: 42(int) Constant 3 + 127: TypePointer StorageBuffer 42(int) + 133: TypeVector 42(int) 2 + 134: TypePointer StorageBuffer 43(ivec4) + 143: TypeVector 42(int) 3 + 162: TypeVector 6(int) 2 + 171: TypeVector 6(int) 3 + 185: TypePointer StorageBuffer 44(float64_t) + 191: TypeVector 44(float64_t) 2 + 192: TypePointer StorageBuffer 45(f64vec4) + 201: TypeVector 44(float64_t) 3 + 225: 133(ivec2) ConstantComposite 61 61 + 226: TypeVector 36(bool) 2 + 229: 133(ivec2) ConstantComposite 60 60 + 238: 143(ivec3) ConstantComposite 61 61 61 + 239: TypeVector 36(bool) 3 + 242: 143(ivec3) ConstantComposite 60 60 60 + 250: 43(ivec4) ConstantComposite 61 61 61 61 + 253: 43(ivec4) ConstantComposite 60 60 60 60 + 395: 6(int) Constant 8 + 396: 171(ivec3) ConstantComposite 395 395 64 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -179,346 +179,326 @@ spv.subgroupBallot.comp 87: Label 92: 36(bool) Phi 85 5 91 86 SelectionMerge 94 None - BranchConditional 92 93 276 + BranchConditional 92 93 256 93: Label 95: 6(int) Load 8(invocation) 97: 96(ptr) AccessChain 49(data) 61 61 54 98: 40(float) Load 97 - 99: 6(int) Load 8(invocation) - 100: 40(float) GroupNonUniformBroadcast 38 98 99 - 101: 96(ptr) AccessChain 49(data) 95 61 54 - Store 101 100 - 102: 6(int) Load 8(invocation) - 105: 104(ptr) AccessChain 49(data) 60 61 - 106: 41(fvec4) Load 105 - 107: 103(fvec2) VectorShuffle 106 106 0 1 - 108: 6(int) Load 8(invocation) - 109: 103(fvec2) GroupNonUniformBroadcast 38 107 108 - 110: 104(ptr) AccessChain 49(data) 102 61 - 111: 41(fvec4) Load 110 - 112: 41(fvec4) VectorShuffle 111 109 4 5 2 3 - Store 110 112 - 113: 6(int) Load 8(invocation) - 115: 104(ptr) AccessChain 49(data) 51 61 - 116: 41(fvec4) Load 115 - 117: 114(fvec3) VectorShuffle 116 116 0 1 2 - 118: 6(int) Load 8(invocation) - 119: 114(fvec3) GroupNonUniformBroadcast 38 117 118 - 120: 104(ptr) AccessChain 49(data) 113 61 - 121: 41(fvec4) Load 120 - 122: 41(fvec4) VectorShuffle 121 119 4 5 6 3 - Store 120 122 - 123: 6(int) Load 8(invocation) - 125: 104(ptr) AccessChain 49(data) 124 61 - 126: 41(fvec4) Load 125 - 127: 6(int) Load 8(invocation) - 128: 41(fvec4) GroupNonUniformBroadcast 38 126 127 - 129: 104(ptr) AccessChain 49(data) 123 61 - Store 129 128 - 130: 6(int) Load 8(invocation) - 132: 131(ptr) AccessChain 49(data) 61 60 54 - 133: 42(int) Load 132 - 134: 6(int) Load 8(invocation) - 135: 42(int) GroupNonUniformBroadcast 38 133 134 - 136: 131(ptr) AccessChain 49(data) 130 60 54 - Store 136 135 - 137: 6(int) Load 8(invocation) - 140: 139(ptr) AccessChain 49(data) 60 60 - 141: 43(ivec4) Load 140 - 142: 138(ivec2) VectorShuffle 141 141 0 1 - 143: 6(int) Load 8(invocation) - 144: 138(ivec2) GroupNonUniformBroadcast 38 142 143 - 145: 139(ptr) AccessChain 49(data) 137 60 - 146: 43(ivec4) Load 145 - 147: 43(ivec4) VectorShuffle 146 144 4 5 2 3 - Store 145 147 - 148: 6(int) Load 8(invocation) - 150: 139(ptr) AccessChain 49(data) 51 60 - 151: 43(ivec4) Load 150 - 152: 149(ivec3) VectorShuffle 151 151 0 1 2 - 153: 6(int) Load 8(invocation) - 154: 149(ivec3) GroupNonUniformBroadcast 38 152 153 - 155: 139(ptr) AccessChain 49(data) 148 60 - 156: 43(ivec4) Load 155 - 157: 43(ivec4) VectorShuffle 156 154 4 5 6 3 - Store 155 157 - 158: 6(int) Load 8(invocation) - 159: 139(ptr) AccessChain 49(data) 124 60 - 160: 43(ivec4) Load 159 + 99: 40(float) GroupNonUniformBroadcast 38 98 38 + 100: 96(ptr) AccessChain 49(data) 95 61 54 + Store 100 99 + 101: 6(int) Load 8(invocation) + 104: 103(ptr) AccessChain 49(data) 60 61 + 105: 41(fvec4) Load 104 + 106: 102(fvec2) VectorShuffle 105 105 0 1 + 107: 102(fvec2) GroupNonUniformBroadcast 38 106 38 + 108: 103(ptr) AccessChain 49(data) 101 61 + 109: 41(fvec4) Load 108 + 110: 41(fvec4) VectorShuffle 109 107 4 5 2 3 + Store 108 110 + 111: 6(int) Load 8(invocation) + 113: 103(ptr) AccessChain 49(data) 51 61 + 114: 41(fvec4) Load 113 + 115: 112(fvec3) VectorShuffle 114 114 0 1 2 + 116: 112(fvec3) GroupNonUniformBroadcast 38 115 38 + 117: 103(ptr) AccessChain 49(data) 111 61 + 118: 41(fvec4) Load 117 + 119: 41(fvec4) VectorShuffle 118 116 4 5 6 3 + Store 117 119 + 120: 6(int) Load 8(invocation) + 122: 103(ptr) AccessChain 49(data) 121 61 + 123: 41(fvec4) Load 122 + 124: 41(fvec4) GroupNonUniformBroadcast 38 123 38 + 125: 103(ptr) AccessChain 49(data) 120 61 + Store 125 124 + 126: 6(int) Load 8(invocation) + 128: 127(ptr) AccessChain 49(data) 61 60 54 + 129: 42(int) Load 128 + 130: 42(int) GroupNonUniformBroadcast 38 129 72 + 131: 127(ptr) AccessChain 49(data) 126 60 54 + Store 131 130 + 132: 6(int) Load 8(invocation) + 135: 134(ptr) AccessChain 49(data) 60 60 + 136: 43(ivec4) Load 135 + 137: 133(ivec2) VectorShuffle 136 136 0 1 + 138: 133(ivec2) GroupNonUniformBroadcast 38 137 72 + 139: 134(ptr) AccessChain 49(data) 132 60 + 140: 43(ivec4) Load 139 + 141: 43(ivec4) VectorShuffle 140 138 4 5 2 3 + Store 139 141 + 142: 6(int) Load 8(invocation) + 144: 134(ptr) AccessChain 49(data) 51 60 + 145: 43(ivec4) Load 144 + 146: 143(ivec3) VectorShuffle 145 145 0 1 2 + 147: 143(ivec3) GroupNonUniformBroadcast 38 146 72 + 148: 134(ptr) AccessChain 49(data) 142 60 + 149: 43(ivec4) Load 148 + 150: 43(ivec4) VectorShuffle 149 147 4 5 6 3 + Store 148 150 + 151: 6(int) Load 8(invocation) + 152: 134(ptr) AccessChain 49(data) 121 60 + 153: 43(ivec4) Load 152 + 154: 43(ivec4) GroupNonUniformBroadcast 38 153 72 + 155: 134(ptr) AccessChain 49(data) 151 60 + Store 155 154 + 156: 6(int) Load 8(invocation) + 157: 55(ptr) AccessChain 49(data) 61 51 54 + 158: 6(int) Load 157 + 159: 6(int) GroupNonUniformBroadcast 38 158 64 + 160: 55(ptr) AccessChain 49(data) 156 51 54 + Store 160 159 161: 6(int) Load 8(invocation) - 162: 43(ivec4) GroupNonUniformBroadcast 38 160 161 - 163: 139(ptr) AccessChain 49(data) 158 60 - Store 163 162 - 164: 6(int) Load 8(invocation) - 165: 55(ptr) AccessChain 49(data) 61 51 54 - 166: 6(int) Load 165 - 167: 6(int) Load 8(invocation) - 168: 6(int) GroupNonUniformBroadcast 38 166 167 - 169: 55(ptr) AccessChain 49(data) 164 51 54 - Store 169 168 + 163: 88(ptr) AccessChain 49(data) 60 51 + 164: 17(ivec4) Load 163 + 165: 162(ivec2) VectorShuffle 164 164 0 1 + 166: 162(ivec2) GroupNonUniformBroadcast 38 165 64 + 167: 88(ptr) AccessChain 49(data) 161 51 + 168: 17(ivec4) Load 167 + 169: 17(ivec4) VectorShuffle 168 166 4 5 2 3 + Store 167 169 170: 6(int) Load 8(invocation) - 172: 88(ptr) AccessChain 49(data) 60 51 + 172: 88(ptr) AccessChain 49(data) 51 51 173: 17(ivec4) Load 172 - 174: 171(ivec2) VectorShuffle 173 173 0 1 - 175: 6(int) Load 8(invocation) - 176: 171(ivec2) GroupNonUniformBroadcast 38 174 175 - 177: 88(ptr) AccessChain 49(data) 170 51 - 178: 17(ivec4) Load 177 - 179: 17(ivec4) VectorShuffle 178 176 4 5 2 3 - Store 177 179 - 180: 6(int) Load 8(invocation) - 182: 88(ptr) AccessChain 49(data) 51 51 - 183: 17(ivec4) Load 182 - 184: 181(ivec3) VectorShuffle 183 183 0 1 2 - 185: 6(int) Load 8(invocation) - 186: 181(ivec3) GroupNonUniformBroadcast 38 184 185 - 187: 88(ptr) AccessChain 49(data) 180 51 - 188: 17(ivec4) Load 187 - 189: 17(ivec4) VectorShuffle 188 186 4 5 6 3 - Store 187 189 + 174: 171(ivec3) VectorShuffle 173 173 0 1 2 + 175: 171(ivec3) GroupNonUniformBroadcast 38 174 64 + 176: 88(ptr) AccessChain 49(data) 170 51 + 177: 17(ivec4) Load 176 + 178: 17(ivec4) VectorShuffle 177 175 4 5 6 3 + Store 176 178 + 179: 6(int) Load 8(invocation) + 180: 88(ptr) AccessChain 49(data) 121 51 + 181: 17(ivec4) Load 180 + 182: 17(ivec4) GroupNonUniformBroadcast 38 181 64 + 183: 88(ptr) AccessChain 49(data) 179 51 + Store 183 182 + 184: 6(int) Load 8(invocation) + 186: 185(ptr) AccessChain 49(data) 61 121 54 + 187:44(float64_t) Load 186 + 188:44(float64_t) GroupNonUniformBroadcast 38 187 54 + 189: 185(ptr) AccessChain 49(data) 184 121 54 + Store 189 188 190: 6(int) Load 8(invocation) - 191: 88(ptr) AccessChain 49(data) 124 51 - 192: 17(ivec4) Load 191 - 193: 6(int) Load 8(invocation) - 194: 17(ivec4) GroupNonUniformBroadcast 38 192 193 - 195: 88(ptr) AccessChain 49(data) 190 51 - Store 195 194 - 196: 6(int) Load 8(invocation) - 198: 197(ptr) AccessChain 49(data) 61 124 54 - 199:44(float64_t) Load 198 + 193: 192(ptr) AccessChain 49(data) 60 121 + 194: 45(f64vec4) Load 193 + 195:191(f64vec2) VectorShuffle 194 194 0 1 + 196:191(f64vec2) GroupNonUniformBroadcast 38 195 54 + 197: 192(ptr) AccessChain 49(data) 190 121 + 198: 45(f64vec4) Load 197 + 199: 45(f64vec4) VectorShuffle 198 196 4 5 2 3 + Store 197 199 200: 6(int) Load 8(invocation) - 201:44(float64_t) GroupNonUniformBroadcast 38 199 200 - 202: 197(ptr) AccessChain 49(data) 196 124 54 - Store 202 201 - 203: 6(int) Load 8(invocation) - 206: 205(ptr) AccessChain 49(data) 60 124 + 202: 192(ptr) AccessChain 49(data) 51 121 + 203: 45(f64vec4) Load 202 + 204:201(f64vec3) VectorShuffle 203 203 0 1 2 + 205:201(f64vec3) GroupNonUniformBroadcast 38 204 54 + 206: 192(ptr) AccessChain 49(data) 200 121 207: 45(f64vec4) Load 206 - 208:204(f64vec2) VectorShuffle 207 207 0 1 + 208: 45(f64vec4) VectorShuffle 207 205 4 5 6 3 + Store 206 208 209: 6(int) Load 8(invocation) - 210:204(f64vec2) GroupNonUniformBroadcast 38 208 209 - 211: 205(ptr) AccessChain 49(data) 203 124 - 212: 45(f64vec4) Load 211 - 213: 45(f64vec4) VectorShuffle 212 210 4 5 2 3 - Store 211 213 + 210: 192(ptr) AccessChain 49(data) 121 121 + 211: 45(f64vec4) Load 210 + 212: 45(f64vec4) GroupNonUniformBroadcast 38 211 54 + 213: 192(ptr) AccessChain 49(data) 209 121 + Store 213 212 214: 6(int) Load 8(invocation) - 216: 205(ptr) AccessChain 49(data) 51 124 - 217: 45(f64vec4) Load 216 - 218:215(f64vec3) VectorShuffle 217 217 0 1 2 - 219: 6(int) Load 8(invocation) - 220:215(f64vec3) GroupNonUniformBroadcast 38 218 219 - 221: 205(ptr) AccessChain 49(data) 214 124 - 222: 45(f64vec4) Load 221 - 223: 45(f64vec4) VectorShuffle 222 220 4 5 6 3 - Store 221 223 - 224: 6(int) Load 8(invocation) - 225: 205(ptr) AccessChain 49(data) 124 124 - 226: 45(f64vec4) Load 225 - 227: 6(int) Load 8(invocation) - 228: 45(f64vec4) GroupNonUniformBroadcast 38 226 227 - 229: 205(ptr) AccessChain 49(data) 224 124 - Store 229 228 - 230: 6(int) Load 8(invocation) - 231: 131(ptr) AccessChain 49(data) 61 60 54 - 232: 42(int) Load 231 - 233: 36(bool) SLessThan 232 61 + 215: 127(ptr) AccessChain 49(data) 61 60 54 + 216: 42(int) Load 215 + 217: 36(bool) SLessThan 216 61 + 218: 36(bool) GroupNonUniformBroadcast 38 217 64 + 219: 42(int) Select 218 60 61 + 220: 127(ptr) AccessChain 49(data) 214 60 54 + Store 220 219 + 221: 6(int) Load 8(invocation) + 222: 134(ptr) AccessChain 49(data) 60 60 + 223: 43(ivec4) Load 222 + 224: 133(ivec2) VectorShuffle 223 223 0 1 + 227: 226(bvec2) SLessThan 224 225 + 228: 226(bvec2) GroupNonUniformBroadcast 38 227 64 + 230: 133(ivec2) Select 228 229 225 + 231: 134(ptr) AccessChain 49(data) 221 60 + 232: 43(ivec4) Load 231 + 233: 43(ivec4) VectorShuffle 232 230 4 5 2 3 + Store 231 233 234: 6(int) Load 8(invocation) - 235: 36(bool) GroupNonUniformBroadcast 38 233 234 - 236: 42(int) Select 235 60 61 - 237: 131(ptr) AccessChain 49(data) 230 60 54 - Store 237 236 - 238: 6(int) Load 8(invocation) - 239: 139(ptr) AccessChain 49(data) 60 60 - 240: 43(ivec4) Load 239 - 241: 138(ivec2) VectorShuffle 240 240 0 1 - 244: 243(bvec2) SLessThan 241 242 - 245: 6(int) Load 8(invocation) - 246: 243(bvec2) GroupNonUniformBroadcast 38 244 245 - 248: 138(ivec2) Select 246 247 242 - 249: 139(ptr) AccessChain 49(data) 238 60 - 250: 43(ivec4) Load 249 - 251: 43(ivec4) VectorShuffle 250 248 4 5 2 3 - Store 249 251 - 252: 6(int) Load 8(invocation) - 253: 139(ptr) AccessChain 49(data) 60 60 - 254: 43(ivec4) Load 253 - 255: 149(ivec3) VectorShuffle 254 254 0 1 2 - 258: 257(bvec3) SLessThan 255 256 - 259: 6(int) Load 8(invocation) - 260: 257(bvec3) GroupNonUniformBroadcast 38 258 259 - 262: 149(ivec3) Select 260 261 256 - 263: 139(ptr) AccessChain 49(data) 252 60 - 264: 43(ivec4) Load 263 - 265: 43(ivec4) VectorShuffle 264 262 4 5 6 3 - Store 263 265 - 266: 6(int) Load 8(invocation) - 267: 139(ptr) AccessChain 49(data) 60 60 - 268: 43(ivec4) Load 267 - 270: 83(bvec4) SLessThan 268 269 - 271: 6(int) Load 8(invocation) - 272: 83(bvec4) GroupNonUniformBroadcast 38 270 271 - 274: 43(ivec4) Select 272 273 269 - 275: 139(ptr) AccessChain 49(data) 266 60 - Store 275 274 + 235: 134(ptr) AccessChain 49(data) 60 60 + 236: 43(ivec4) Load 235 + 237: 143(ivec3) VectorShuffle 236 236 0 1 2 + 240: 239(bvec3) SLessThan 237 238 + 241: 239(bvec3) GroupNonUniformBroadcast 38 240 64 + 243: 143(ivec3) Select 241 242 238 + 244: 134(ptr) AccessChain 49(data) 234 60 + 245: 43(ivec4) Load 244 + 246: 43(ivec4) VectorShuffle 245 243 4 5 6 3 + Store 244 246 + 247: 6(int) Load 8(invocation) + 248: 134(ptr) AccessChain 49(data) 60 60 + 249: 43(ivec4) Load 248 + 251: 83(bvec4) SLessThan 249 250 + 252: 83(bvec4) GroupNonUniformBroadcast 38 251 64 + 254: 43(ivec4) Select 252 253 250 + 255: 134(ptr) AccessChain 49(data) 247 60 + Store 255 254 Branch 94 - 276: Label - 277: 6(int) Load 8(invocation) - 278: 96(ptr) AccessChain 49(data) 61 61 54 - 279: 40(float) Load 278 - 280: 40(float) GroupNonUniformBroadcastFirst 38 279 - 281: 96(ptr) AccessChain 49(data) 277 61 54 - Store 281 280 - 282: 6(int) Load 8(invocation) - 283: 104(ptr) AccessChain 49(data) 60 61 - 284: 41(fvec4) Load 283 - 285: 103(fvec2) VectorShuffle 284 284 0 1 - 286: 103(fvec2) GroupNonUniformBroadcastFirst 38 285 - 287: 104(ptr) AccessChain 49(data) 282 61 - 288: 41(fvec4) Load 287 - 289: 41(fvec4) VectorShuffle 288 286 4 5 2 3 - Store 287 289 - 290: 6(int) Load 8(invocation) - 291: 104(ptr) AccessChain 49(data) 51 61 - 292: 41(fvec4) Load 291 - 293: 114(fvec3) VectorShuffle 292 292 0 1 2 - 294: 114(fvec3) GroupNonUniformBroadcastFirst 38 293 - 295: 104(ptr) AccessChain 49(data) 290 61 - 296: 41(fvec4) Load 295 - 297: 41(fvec4) VectorShuffle 296 294 4 5 6 3 - Store 295 297 - 298: 6(int) Load 8(invocation) - 299: 104(ptr) AccessChain 49(data) 124 61 - 300: 41(fvec4) Load 299 - 301: 41(fvec4) GroupNonUniformBroadcastFirst 38 300 - 302: 104(ptr) AccessChain 49(data) 298 61 - Store 302 301 - 303: 6(int) Load 8(invocation) - 304: 131(ptr) AccessChain 49(data) 61 60 54 - 305: 42(int) Load 304 - 306: 42(int) GroupNonUniformBroadcastFirst 38 305 - 307: 131(ptr) AccessChain 49(data) 303 60 54 - Store 307 306 - 308: 6(int) Load 8(invocation) - 309: 139(ptr) AccessChain 49(data) 60 60 - 310: 43(ivec4) Load 309 - 311: 138(ivec2) VectorShuffle 310 310 0 1 - 312: 138(ivec2) GroupNonUniformBroadcastFirst 38 311 - 313: 139(ptr) AccessChain 49(data) 308 60 - 314: 43(ivec4) Load 313 - 315: 43(ivec4) VectorShuffle 314 312 4 5 2 3 - Store 313 315 - 316: 6(int) Load 8(invocation) - 317: 139(ptr) AccessChain 49(data) 51 60 - 318: 43(ivec4) Load 317 - 319: 149(ivec3) VectorShuffle 318 318 0 1 2 - 320: 149(ivec3) GroupNonUniformBroadcastFirst 38 319 - 321: 139(ptr) AccessChain 49(data) 316 60 - 322: 43(ivec4) Load 321 - 323: 43(ivec4) VectorShuffle 322 320 4 5 6 3 - Store 321 323 - 324: 6(int) Load 8(invocation) - 325: 139(ptr) AccessChain 49(data) 124 60 - 326: 43(ivec4) Load 325 - 327: 43(ivec4) GroupNonUniformBroadcastFirst 38 326 - 328: 139(ptr) AccessChain 49(data) 324 60 - Store 328 327 - 329: 6(int) Load 8(invocation) - 330: 55(ptr) AccessChain 49(data) 61 51 54 - 331: 6(int) Load 330 - 332: 6(int) GroupNonUniformBroadcastFirst 38 331 - 333: 55(ptr) AccessChain 49(data) 329 51 54 - Store 333 332 - 334: 6(int) Load 8(invocation) - 335: 88(ptr) AccessChain 49(data) 60 51 - 336: 17(ivec4) Load 335 - 337: 171(ivec2) VectorShuffle 336 336 0 1 - 338: 171(ivec2) GroupNonUniformBroadcastFirst 38 337 - 339: 88(ptr) AccessChain 49(data) 334 51 - 340: 17(ivec4) Load 339 - 341: 17(ivec4) VectorShuffle 340 338 4 5 2 3 - Store 339 341 - 342: 6(int) Load 8(invocation) - 343: 88(ptr) AccessChain 49(data) 51 51 - 344: 17(ivec4) Load 343 - 345: 181(ivec3) VectorShuffle 344 344 0 1 2 - 346: 181(ivec3) GroupNonUniformBroadcastFirst 38 345 - 347: 88(ptr) AccessChain 49(data) 342 51 - 348: 17(ivec4) Load 347 - 349: 17(ivec4) VectorShuffle 348 346 4 5 6 3 - Store 347 349 - 350: 6(int) Load 8(invocation) - 351: 88(ptr) AccessChain 49(data) 124 51 - 352: 17(ivec4) Load 351 - 353: 17(ivec4) GroupNonUniformBroadcastFirst 38 352 - 354: 88(ptr) AccessChain 49(data) 350 51 - Store 354 353 - 355: 6(int) Load 8(invocation) - 356: 197(ptr) AccessChain 49(data) 61 124 54 - 357:44(float64_t) Load 356 - 358:44(float64_t) GroupNonUniformBroadcastFirst 38 357 - 359: 197(ptr) AccessChain 49(data) 355 124 54 - Store 359 358 - 360: 6(int) Load 8(invocation) - 361: 205(ptr) AccessChain 49(data) 60 124 - 362: 45(f64vec4) Load 361 - 363:204(f64vec2) VectorShuffle 362 362 0 1 - 364:204(f64vec2) GroupNonUniformBroadcastFirst 38 363 - 365: 205(ptr) AccessChain 49(data) 360 124 - 366: 45(f64vec4) Load 365 - 367: 45(f64vec4) VectorShuffle 366 364 4 5 2 3 - Store 365 367 + 256: Label + 257: 6(int) Load 8(invocation) + 258: 96(ptr) AccessChain 49(data) 61 61 54 + 259: 40(float) Load 258 + 260: 40(float) GroupNonUniformBroadcastFirst 38 259 + 261: 96(ptr) AccessChain 49(data) 257 61 54 + Store 261 260 + 262: 6(int) Load 8(invocation) + 263: 103(ptr) AccessChain 49(data) 60 61 + 264: 41(fvec4) Load 263 + 265: 102(fvec2) VectorShuffle 264 264 0 1 + 266: 102(fvec2) GroupNonUniformBroadcastFirst 38 265 + 267: 103(ptr) AccessChain 49(data) 262 61 + 268: 41(fvec4) Load 267 + 269: 41(fvec4) VectorShuffle 268 266 4 5 2 3 + Store 267 269 + 270: 6(int) Load 8(invocation) + 271: 103(ptr) AccessChain 49(data) 51 61 + 272: 41(fvec4) Load 271 + 273: 112(fvec3) VectorShuffle 272 272 0 1 2 + 274: 112(fvec3) GroupNonUniformBroadcastFirst 38 273 + 275: 103(ptr) AccessChain 49(data) 270 61 + 276: 41(fvec4) Load 275 + 277: 41(fvec4) VectorShuffle 276 274 4 5 6 3 + Store 275 277 + 278: 6(int) Load 8(invocation) + 279: 103(ptr) AccessChain 49(data) 121 61 + 280: 41(fvec4) Load 279 + 281: 41(fvec4) GroupNonUniformBroadcastFirst 38 280 + 282: 103(ptr) AccessChain 49(data) 278 61 + Store 282 281 + 283: 6(int) Load 8(invocation) + 284: 127(ptr) AccessChain 49(data) 61 60 54 + 285: 42(int) Load 284 + 286: 42(int) GroupNonUniformBroadcastFirst 38 285 + 287: 127(ptr) AccessChain 49(data) 283 60 54 + Store 287 286 + 288: 6(int) Load 8(invocation) + 289: 134(ptr) AccessChain 49(data) 60 60 + 290: 43(ivec4) Load 289 + 291: 133(ivec2) VectorShuffle 290 290 0 1 + 292: 133(ivec2) GroupNonUniformBroadcastFirst 38 291 + 293: 134(ptr) AccessChain 49(data) 288 60 + 294: 43(ivec4) Load 293 + 295: 43(ivec4) VectorShuffle 294 292 4 5 2 3 + Store 293 295 + 296: 6(int) Load 8(invocation) + 297: 134(ptr) AccessChain 49(data) 51 60 + 298: 43(ivec4) Load 297 + 299: 143(ivec3) VectorShuffle 298 298 0 1 2 + 300: 143(ivec3) GroupNonUniformBroadcastFirst 38 299 + 301: 134(ptr) AccessChain 49(data) 296 60 + 302: 43(ivec4) Load 301 + 303: 43(ivec4) VectorShuffle 302 300 4 5 6 3 + Store 301 303 + 304: 6(int) Load 8(invocation) + 305: 134(ptr) AccessChain 49(data) 121 60 + 306: 43(ivec4) Load 305 + 307: 43(ivec4) GroupNonUniformBroadcastFirst 38 306 + 308: 134(ptr) AccessChain 49(data) 304 60 + Store 308 307 + 309: 6(int) Load 8(invocation) + 310: 55(ptr) AccessChain 49(data) 61 51 54 + 311: 6(int) Load 310 + 312: 6(int) GroupNonUniformBroadcastFirst 38 311 + 313: 55(ptr) AccessChain 49(data) 309 51 54 + Store 313 312 + 314: 6(int) Load 8(invocation) + 315: 88(ptr) AccessChain 49(data) 60 51 + 316: 17(ivec4) Load 315 + 317: 162(ivec2) VectorShuffle 316 316 0 1 + 318: 162(ivec2) GroupNonUniformBroadcastFirst 38 317 + 319: 88(ptr) AccessChain 49(data) 314 51 + 320: 17(ivec4) Load 319 + 321: 17(ivec4) VectorShuffle 320 318 4 5 2 3 + Store 319 321 + 322: 6(int) Load 8(invocation) + 323: 88(ptr) AccessChain 49(data) 51 51 + 324: 17(ivec4) Load 323 + 325: 171(ivec3) VectorShuffle 324 324 0 1 2 + 326: 171(ivec3) GroupNonUniformBroadcastFirst 38 325 + 327: 88(ptr) AccessChain 49(data) 322 51 + 328: 17(ivec4) Load 327 + 329: 17(ivec4) VectorShuffle 328 326 4 5 6 3 + Store 327 329 + 330: 6(int) Load 8(invocation) + 331: 88(ptr) AccessChain 49(data) 121 51 + 332: 17(ivec4) Load 331 + 333: 17(ivec4) GroupNonUniformBroadcastFirst 38 332 + 334: 88(ptr) AccessChain 49(data) 330 51 + Store 334 333 + 335: 6(int) Load 8(invocation) + 336: 185(ptr) AccessChain 49(data) 61 121 54 + 337:44(float64_t) Load 336 + 338:44(float64_t) GroupNonUniformBroadcastFirst 38 337 + 339: 185(ptr) AccessChain 49(data) 335 121 54 + Store 339 338 + 340: 6(int) Load 8(invocation) + 341: 192(ptr) AccessChain 49(data) 60 121 + 342: 45(f64vec4) Load 341 + 343:191(f64vec2) VectorShuffle 342 342 0 1 + 344:191(f64vec2) GroupNonUniformBroadcastFirst 38 343 + 345: 192(ptr) AccessChain 49(data) 340 121 + 346: 45(f64vec4) Load 345 + 347: 45(f64vec4) VectorShuffle 346 344 4 5 2 3 + Store 345 347 + 348: 6(int) Load 8(invocation) + 349: 192(ptr) AccessChain 49(data) 51 121 + 350: 45(f64vec4) Load 349 + 351:201(f64vec3) VectorShuffle 350 350 0 1 2 + 352:201(f64vec3) GroupNonUniformBroadcastFirst 38 351 + 353: 192(ptr) AccessChain 49(data) 348 121 + 354: 45(f64vec4) Load 353 + 355: 45(f64vec4) VectorShuffle 354 352 4 5 6 3 + Store 353 355 + 356: 6(int) Load 8(invocation) + 357: 192(ptr) AccessChain 49(data) 121 121 + 358: 45(f64vec4) Load 357 + 359: 45(f64vec4) GroupNonUniformBroadcastFirst 38 358 + 360: 192(ptr) AccessChain 49(data) 356 121 + Store 360 359 + 361: 6(int) Load 8(invocation) + 362: 127(ptr) AccessChain 49(data) 61 60 54 + 363: 42(int) Load 362 + 364: 36(bool) SLessThan 363 61 + 365: 36(bool) GroupNonUniformBroadcastFirst 38 364 + 366: 42(int) Select 365 60 61 + 367: 127(ptr) AccessChain 49(data) 361 60 54 + Store 367 366 368: 6(int) Load 8(invocation) - 369: 205(ptr) AccessChain 49(data) 51 124 - 370: 45(f64vec4) Load 369 - 371:215(f64vec3) VectorShuffle 370 370 0 1 2 - 372:215(f64vec3) GroupNonUniformBroadcastFirst 38 371 - 373: 205(ptr) AccessChain 49(data) 368 124 - 374: 45(f64vec4) Load 373 - 375: 45(f64vec4) VectorShuffle 374 372 4 5 6 3 - Store 373 375 - 376: 6(int) Load 8(invocation) - 377: 205(ptr) AccessChain 49(data) 124 124 - 378: 45(f64vec4) Load 377 - 379: 45(f64vec4) GroupNonUniformBroadcastFirst 38 378 - 380: 205(ptr) AccessChain 49(data) 376 124 - Store 380 379 - 381: 6(int) Load 8(invocation) - 382: 131(ptr) AccessChain 49(data) 61 60 54 - 383: 42(int) Load 382 - 384: 36(bool) SLessThan 383 61 - 385: 36(bool) GroupNonUniformBroadcastFirst 38 384 - 386: 42(int) Select 385 60 61 - 387: 131(ptr) AccessChain 49(data) 381 60 54 - Store 387 386 + 369: 134(ptr) AccessChain 49(data) 60 60 + 370: 43(ivec4) Load 369 + 371: 133(ivec2) VectorShuffle 370 370 0 1 + 372: 226(bvec2) SLessThan 371 225 + 373: 226(bvec2) GroupNonUniformBroadcastFirst 38 372 + 374: 133(ivec2) Select 373 229 225 + 375: 134(ptr) AccessChain 49(data) 368 60 + 376: 43(ivec4) Load 375 + 377: 43(ivec4) VectorShuffle 376 374 4 5 2 3 + Store 375 377 + 378: 6(int) Load 8(invocation) + 379: 134(ptr) AccessChain 49(data) 60 60 + 380: 43(ivec4) Load 379 + 381: 143(ivec3) VectorShuffle 380 380 0 1 2 + 382: 239(bvec3) SLessThan 381 238 + 383: 239(bvec3) GroupNonUniformBroadcastFirst 38 382 + 384: 143(ivec3) Select 383 242 238 + 385: 134(ptr) AccessChain 49(data) 378 60 + 386: 43(ivec4) Load 385 + 387: 43(ivec4) VectorShuffle 386 384 4 5 6 3 + Store 385 387 388: 6(int) Load 8(invocation) - 389: 139(ptr) AccessChain 49(data) 60 60 + 389: 134(ptr) AccessChain 49(data) 60 60 390: 43(ivec4) Load 389 - 391: 138(ivec2) VectorShuffle 390 390 0 1 - 392: 243(bvec2) SLessThan 391 242 - 393: 243(bvec2) GroupNonUniformBroadcastFirst 38 392 - 394: 138(ivec2) Select 393 247 242 - 395: 139(ptr) AccessChain 49(data) 388 60 - 396: 43(ivec4) Load 395 - 397: 43(ivec4) VectorShuffle 396 394 4 5 2 3 - Store 395 397 - 398: 6(int) Load 8(invocation) - 399: 139(ptr) AccessChain 49(data) 60 60 - 400: 43(ivec4) Load 399 - 401: 149(ivec3) VectorShuffle 400 400 0 1 2 - 402: 257(bvec3) SLessThan 401 256 - 403: 257(bvec3) GroupNonUniformBroadcastFirst 38 402 - 404: 149(ivec3) Select 403 261 256 - 405: 139(ptr) AccessChain 49(data) 398 60 - 406: 43(ivec4) Load 405 - 407: 43(ivec4) VectorShuffle 406 404 4 5 6 3 - Store 405 407 - 408: 6(int) Load 8(invocation) - 409: 139(ptr) AccessChain 49(data) 60 60 - 410: 43(ivec4) Load 409 - 411: 83(bvec4) SLessThan 410 269 - 412: 83(bvec4) GroupNonUniformBroadcastFirst 38 411 - 413: 43(ivec4) Select 412 273 269 - 414: 139(ptr) AccessChain 49(data) 408 60 - Store 414 413 + 391: 83(bvec4) SLessThan 390 250 + 392: 83(bvec4) GroupNonUniformBroadcastFirst 38 391 + 393: 43(ivec4) Select 392 253 250 + 394: 134(ptr) AccessChain 49(data) 388 60 + Store 394 393 Branch 94 94: Label Return diff --git a/Test/baseResults/spv.subgroupBallotNeg.comp.out b/Test/baseResults/spv.subgroupBallotNeg.comp.out new file mode 100755 index 00000000..49b6b540 --- /dev/null +++ b/Test/baseResults/spv.subgroupBallotNeg.comp.out @@ -0,0 +1,6 @@ +spv.subgroupBallotNeg.comp +ERROR: 0:32: 'id' : argument must be compile-time constant +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/spv.subgroupBallot.comp b/Test/spv.subgroupBallot.comp old mode 100644 new mode 100755 index 2875468c..bb9dc3e4 --- a/Test/spv.subgroupBallot.comp +++ b/Test/spv.subgroupBallot.comp @@ -31,30 +31,30 @@ void main() if ((relMask == result) && subgroupInverseBallot(data[0].u4)) { - data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, invocation); - data[invocation].f4.xy = subgroupBroadcast(data[1].f4.xy, invocation); - data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz, invocation); - data[invocation].f4 = subgroupBroadcast(data[3].f4, invocation); + data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, 3); + data[invocation].f4.xy = subgroupBroadcast(data[1].f4.xy, 3); + data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz, 3); + data[invocation].f4 = subgroupBroadcast(data[3].f4, 3); - data[invocation].i4.x = subgroupBroadcast(data[0].i4.x, invocation); - data[invocation].i4.xy = subgroupBroadcast(data[1].i4.xy, invocation); - data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz, invocation); - data[invocation].i4 = subgroupBroadcast(data[3].i4, invocation); + data[invocation].i4.x = subgroupBroadcast(data[0].i4.x, 2); + data[invocation].i4.xy = subgroupBroadcast(data[1].i4.xy, 2); + data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz, 2); + data[invocation].i4 = subgroupBroadcast(data[3].i4, 2); - data[invocation].u4.x = subgroupBroadcast(data[0].u4.x, invocation); - data[invocation].u4.xy = subgroupBroadcast(data[1].u4.xy, invocation); - data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz, invocation); - data[invocation].u4 = subgroupBroadcast(data[3].u4, invocation); + data[invocation].u4.x = subgroupBroadcast(data[0].u4.x, 1); + data[invocation].u4.xy = subgroupBroadcast(data[1].u4.xy, 1); + data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz, 1); + data[invocation].u4 = subgroupBroadcast(data[3].u4, 1); - data[invocation].d4.x = subgroupBroadcast(data[0].d4.x, invocation); - data[invocation].d4.xy = subgroupBroadcast(data[1].d4.xy, invocation); - data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz, invocation); - data[invocation].d4 = subgroupBroadcast(data[3].d4, invocation); + data[invocation].d4.x = subgroupBroadcast(data[0].d4.x, 0); + data[invocation].d4.xy = subgroupBroadcast(data[1].d4.xy, 0); + data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz, 0); + data[invocation].d4 = subgroupBroadcast(data[3].d4, 0); - data[invocation].i4.x = int(subgroupBroadcast(data[0].i4.x < 0, invocation)); - data[invocation].i4.xy = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), invocation)); - data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), invocation)); - data[invocation].i4 = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), invocation)); + data[invocation].i4.x = int(subgroupBroadcast(data[0].i4.x < 0, 1)); + data[invocation].i4.xy = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1)); + data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1)); + data[invocation].i4 = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), 1)); } else { diff --git a/Test/spv.subgroupBallotNeg.comp b/Test/spv.subgroupBallotNeg.comp new file mode 100755 index 00000000..4020adf1 --- /dev/null +++ b/Test/spv.subgroupBallotNeg.comp @@ -0,0 +1,33 @@ +#version 450 + +#extension GL_KHR_shader_subgroup_ballot: enable + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in; + +layout(binding = 0) buffer Buffers +{ + vec4 f4; + ivec4 i4; + uvec4 u4; + dvec4 d4; +} data[4]; + +void main() +{ + uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4; + + uvec4 relMask = gl_SubgroupEqMask + + gl_SubgroupGeMask + + gl_SubgroupGtMask + + gl_SubgroupLeMask + + gl_SubgroupLtMask; + + uvec4 result = subgroupBallot(true); + + data[invocation].u4.x = subgroupBallotBitCount(result); + data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0; + data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result); + data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result); + + data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, invocation); // ERROR: not constant +} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index c894f5cf..5d1ff9e8 100755 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1998,6 +1998,10 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpSubgroupClusteredAnd: case EOpSubgroupClusteredOr: case EOpSubgroupClusteredXor: + // The as used in the subgroupClustered() operations must be: + // - An integral constant expression. + // - At least 1. + // - A power of 2. if ((*argp)[1]->getAsConstantUnion() == nullptr) error(loc, "argument must be compile-time constant", "cluster size", ""); else { @@ -2009,6 +2013,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } break; + case EOpSubgroupBroadcast: + // must be an integral constant expression. + if ((*argp)[1]->getAsConstantUnion() == nullptr) + error(loc, "argument must be compile-time constant", "id", ""); + break; + case EOpBarrier: case EOpMemoryBarrier: if (argp->size() > 0) { diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp old mode 100644 new mode 100755 index 410f8ed0..f686afdf --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -388,6 +388,7 @@ INSTANTIATE_TEST_CASE_P( "spv.subgroupArithmetic.comp", "spv.subgroupBasic.comp", "spv.subgroupBallot.comp", + "spv.subgroupBallotNeg.comp", "spv.subgroupClustered.comp", "spv.subgroupClusteredNeg.comp", "spv.subgroupPartitioned.comp",