SPV GLSL.std.450: Add needed smear operations for min, max, clamp, mix, step, and smoothstep.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 78e9e6d..e1babc1 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -2871,6 +2871,7 @@
libCall = spv::GLSLstd450UMin;
else
libCall = spv::GLSLstd450SMin;
+ builder.promoteScalar(precision, operands.front(), operands.back());
break;
case glslang::EOpModf:
libCall = spv::GLSLstd450Modf;
@@ -2882,6 +2883,7 @@
libCall = spv::GLSLstd450UMax;
else
libCall = spv::GLSLstd450SMax;
+ builder.promoteScalar(precision, operands.front(), operands.back());
break;
case glslang::EOpPow:
libCall = spv::GLSLstd450Pow;
@@ -2900,18 +2902,24 @@
libCall = spv::GLSLstd450UClamp;
else
libCall = spv::GLSLstd450SClamp;
+ builder.promoteScalar(precision, operands.front(), operands[1]);
+ builder.promoteScalar(precision, operands.front(), operands[2]);
break;
case glslang::EOpMix:
if (isFloat)
libCall = spv::GLSLstd450FMix;
else
libCall = spv::GLSLstd450IMix;
+ builder.promoteScalar(precision, operands.front(), operands.back());
break;
case glslang::EOpStep:
libCall = spv::GLSLstd450Step;
+ builder.promoteScalar(precision, operands.front(), operands.back());
break;
case glslang::EOpSmoothStep:
libCall = spv::GLSLstd450SmoothStep;
+ builder.promoteScalar(precision, operands[0], operands[2]);
+ builder.promoteScalar(precision, operands[1], operands[2]);
break;
case glslang::EOpDistance:
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index 3685b73..16b0013 100755
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -7,12 +7,12 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 503
+// Id's are bound by 507
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 479
+ EntryPoint Fragment 4 "main" 483
ExecutionMode 4 OriginLowerLeft
Source GLSL 450
Name 4 "main"
@@ -22,15 +22,15 @@
Name 22 "ui"
Name 181 "ub41"
Name 188 "f"
- Name 211 "uf"
- Name 281 "u"
- Name 284 "uui"
- Name 301 "b"
- Name 338 "ub42"
- Name 479 "FragColor"
- Name 497 "uiv4"
- Name 499 "ub"
- Name 502 "uuv4"
+ Name 212 "uf"
+ Name 285 "u"
+ Name 288 "uui"
+ Name 305 "b"
+ Name 342 "ub42"
+ Name 483 "FragColor"
+ Name 501 "uiv4"
+ Name 503 "ub"
+ Name 506 "uuv4"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -49,38 +49,38 @@
179: TypeVector 178(bool) 4
180: TypePointer UniformConstant 179(bvec4)
181(ub41): 180(ptr) Variable UniformConstant
- 210: TypePointer UniformConstant 6(float)
- 211(uf): 210(ptr) Variable UniformConstant
- 280: TypePointer Function 141(int)
- 283: TypePointer UniformConstant 141(int)
- 284(uui): 283(ptr) Variable UniformConstant
- 300: TypePointer Function 178(bool)
- 338(ub42): 180(ptr) Variable UniformConstant
- 392: 18(int) Constant 2
- 399: 18(int) Constant 1
- 429: TypeVector 6(float) 3
- 448: 6(float) Constant 1073741824
- 455: 6(float) Constant 1065353216
- 460: 18(int) Constant 66
- 466: 18(int) Constant 17
- 478: TypePointer Output 7(fvec4)
- 479(FragColor): 478(ptr) Variable Output
- 495: TypeVector 18(int) 4
- 496: TypePointer UniformConstant 495(ivec4)
- 497(uiv4): 496(ptr) Variable UniformConstant
- 498: TypePointer UniformConstant 178(bool)
- 499(ub): 498(ptr) Variable UniformConstant
- 500: TypeVector 141(int) 4
- 501: TypePointer UniformConstant 500(ivec4)
- 502(uuv4): 501(ptr) Variable UniformConstant
+ 211: TypePointer UniformConstant 6(float)
+ 212(uf): 211(ptr) Variable UniformConstant
+ 284: TypePointer Function 141(int)
+ 287: TypePointer UniformConstant 141(int)
+ 288(uui): 287(ptr) Variable UniformConstant
+ 304: TypePointer Function 178(bool)
+ 342(ub42): 180(ptr) Variable UniformConstant
+ 396: 18(int) Constant 2
+ 403: 18(int) Constant 1
+ 433: TypeVector 6(float) 3
+ 452: 6(float) Constant 1073741824
+ 459: 6(float) Constant 1065353216
+ 464: 18(int) Constant 66
+ 470: 18(int) Constant 17
+ 482: TypePointer Output 7(fvec4)
+ 483(FragColor): 482(ptr) Variable Output
+ 499: TypeVector 18(int) 4
+ 500: TypePointer UniformConstant 499(ivec4)
+ 501(uiv4): 500(ptr) Variable UniformConstant
+ 502: TypePointer UniformConstant 178(bool)
+ 503(ub): 502(ptr) Variable UniformConstant
+ 504: TypeVector 141(int) 4
+ 505: TypePointer UniformConstant 504(ivec4)
+ 506(uuv4): 505(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(v): 8(ptr) Variable Function
20(i): 19(ptr) Variable Function
188(f): 143(ptr) Variable Function
- 281(u): 280(ptr) Variable Function
- 301(b): 300(ptr) Variable Function
- 480: 8(ptr) Variable Function
+ 285(u): 284(ptr) Variable Function
+ 305(b): 304(ptr) Variable Function
+ 484: 8(ptr) Variable Function
12: 7(fvec4) Load 11(uv4)
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
Store 9(v) 13
@@ -284,378 +284,382 @@
186: 7(fvec4) Load 9(v)
187: 7(fvec4) Load 9(v)
189: 6(float) Load 188(f)
- 190: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 189
- 191: 7(fvec4) Load 9(v)
- 192: 7(fvec4) FAdd 191 190
- Store 9(v) 192
- 193: 7(fvec4) Load 9(v)
- 194: 7(fvec4) Load 11(uv4)
- 195: 7(fvec4) Load 9(v)
- 196: 7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 193 194 195
- 197: 7(fvec4) Load 9(v)
- 198: 7(fvec4) FAdd 197 196
- Store 9(v) 198
- 199: 7(fvec4) Load 9(v)
+ 190: 7(fvec4) CompositeConstruct 189 189 189 189
+ 191: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 190
+ 192: 7(fvec4) Load 9(v)
+ 193: 7(fvec4) FAdd 192 191
+ Store 9(v) 193
+ 194: 7(fvec4) Load 9(v)
+ 195: 7(fvec4) Load 11(uv4)
+ 196: 7(fvec4) Load 9(v)
+ 197: 7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196
+ 198: 7(fvec4) Load 9(v)
+ 199: 7(fvec4) FAdd 198 197
+ Store 9(v) 199
200: 7(fvec4) Load 9(v)
- 201: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 199 200
- 202: 7(fvec4) Load 9(v)
- 203: 7(fvec4) FAdd 202 201
- Store 9(v) 203
- 204: 7(fvec4) Load 9(v)
+ 201: 7(fvec4) Load 9(v)
+ 202: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200 201
+ 203: 7(fvec4) Load 9(v)
+ 204: 7(fvec4) FAdd 203 202
+ Store 9(v) 204
205: 7(fvec4) Load 9(v)
206: 7(fvec4) Load 9(v)
- 207: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 204 205 206
- 208: 7(fvec4) Load 9(v)
- 209: 7(fvec4) FAdd 208 207
- Store 9(v) 209
- 212: 6(float) Load 211(uf)
- 213: 7(fvec4) Load 9(v)
- 214: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 212 213
- 215: 7(fvec4) Load 9(v)
- 216: 7(fvec4) FAdd 215 214
- Store 9(v) 216
- 217: 6(float) Load 211(uf)
- 218: 6(float) Load 211(uf)
- 219: 7(fvec4) Load 9(v)
- 220: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 217 218 219
+ 207: 7(fvec4) Load 9(v)
+ 208: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207
+ 209: 7(fvec4) Load 9(v)
+ 210: 7(fvec4) FAdd 209 208
+ Store 9(v) 210
+ 213: 6(float) Load 212(uf)
+ 214: 7(fvec4) Load 9(v)
+ 215: 7(fvec4) CompositeConstruct 213 213 213 213
+ 216: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 215 214
+ 217: 7(fvec4) Load 9(v)
+ 218: 7(fvec4) FAdd 217 216
+ Store 9(v) 218
+ 219: 6(float) Load 212(uf)
+ 220: 6(float) Load 212(uf)
221: 7(fvec4) Load 9(v)
- 222: 7(fvec4) FAdd 221 220
- Store 9(v) 222
- 223: 7(fvec4) Load 9(v)
- 224: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 223
+ 222: 7(fvec4) CompositeConstruct 219 219 219 219
+ 223: 7(fvec4) CompositeConstruct 220 220 220 220
+ 224: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221
225: 7(fvec4) Load 9(v)
226: 7(fvec4) FAdd 225 224
Store 9(v) 226
227: 7(fvec4) Load 9(v)
- 228: 7(fvec4) Load 9(v)
+ 228: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227
229: 7(fvec4) Load 9(v)
- 230: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 227 228 229
+ 230: 7(fvec4) FAdd 229 228
+ Store 9(v) 230
231: 7(fvec4) Load 9(v)
- 232: 7(fvec4) FAdd 231 230
- Store 9(v) 232
+ 232: 7(fvec4) Load 9(v)
233: 7(fvec4) Load 9(v)
- 234: 7(fvec4) Load 9(v)
- 235: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 233 234
- 236: 7(fvec4) Load 9(v)
- 237: 7(fvec4) FAdd 236 235
- Store 9(v) 237
+ 234: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 231 232 233
+ 235: 7(fvec4) Load 9(v)
+ 236: 7(fvec4) FAdd 235 234
+ Store 9(v) 236
+ 237: 7(fvec4) Load 9(v)
238: 7(fvec4) Load 9(v)
- 239: 7(fvec4) Load 9(v)
- 240: 6(float) Load 211(uf)
- 241: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 238 239 240
+ 239: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238
+ 240: 7(fvec4) Load 9(v)
+ 241: 7(fvec4) FAdd 240 239
+ Store 9(v) 241
242: 7(fvec4) Load 9(v)
- 243: 7(fvec4) FAdd 242 241
- Store 9(v) 243
- 244: 7(fvec4) Load 9(v)
- 245: 7(fvec4) DPdx 244
+ 243: 7(fvec4) Load 9(v)
+ 244: 6(float) Load 212(uf)
+ 245: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244
246: 7(fvec4) Load 9(v)
247: 7(fvec4) FAdd 246 245
Store 9(v) 247
248: 7(fvec4) Load 9(v)
- 249: 7(fvec4) DPdy 248
+ 249: 7(fvec4) DPdx 248
250: 7(fvec4) Load 9(v)
251: 7(fvec4) FAdd 250 249
Store 9(v) 251
252: 7(fvec4) Load 9(v)
- 253: 7(fvec4) Fwidth 252
+ 253: 7(fvec4) DPdy 252
254: 7(fvec4) Load 9(v)
255: 7(fvec4) FAdd 254 253
Store 9(v) 255
- 256: 18(int) Load 22(ui)
- 257: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 256
- 258: 18(int) Load 20(i)
- 259: 18(int) IAdd 258 257
- Store 20(i) 259
- 260: 18(int) Load 20(i)
- 261: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 260
+ 256: 7(fvec4) Load 9(v)
+ 257: 7(fvec4) Fwidth 256
+ 258: 7(fvec4) Load 9(v)
+ 259: 7(fvec4) FAdd 258 257
+ Store 9(v) 259
+ 260: 18(int) Load 22(ui)
+ 261: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260
262: 18(int) Load 20(i)
263: 18(int) IAdd 262 261
Store 20(i) 263
264: 18(int) Load 20(i)
- 265: 18(int) Load 22(ui)
- 266: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 264 265
- 267: 18(int) Load 20(i)
- 268: 18(int) IAdd 267 266
- Store 20(i) 268
- 269: 18(int) Load 20(i)
- 270: 18(int) Load 22(ui)
- 271: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 269 270
- 272: 18(int) Load 20(i)
- 273: 18(int) IAdd 272 271
- Store 20(i) 273
- 274: 18(int) Load 20(i)
- 275: 18(int) Load 22(ui)
- 276: 18(int) Load 22(ui)
- 277: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 274 275 276
+ 265: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264
+ 266: 18(int) Load 20(i)
+ 267: 18(int) IAdd 266 265
+ Store 20(i) 267
+ 268: 18(int) Load 20(i)
+ 269: 18(int) Load 22(ui)
+ 270: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269
+ 271: 18(int) Load 20(i)
+ 272: 18(int) IAdd 271 270
+ Store 20(i) 272
+ 273: 18(int) Load 20(i)
+ 274: 18(int) Load 22(ui)
+ 275: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274
+ 276: 18(int) Load 20(i)
+ 277: 18(int) IAdd 276 275
+ Store 20(i) 277
278: 18(int) Load 20(i)
- 279: 18(int) IAdd 278 277
- Store 20(i) 279
- 282: 141(int) Load 281(u)
- 285: 141(int) Load 284(uui)
- 286: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 282 285
- 287: 141(int) Load 281(u)
- 288: 141(int) IAdd 287 286
- Store 281(u) 288
- 289: 141(int) Load 281(u)
- 290: 141(int) Load 284(uui)
- 291: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 289 290
- 292: 141(int) Load 281(u)
- 293: 141(int) IAdd 292 291
- Store 281(u) 293
- 294: 141(int) Load 281(u)
- 295: 141(int) Load 284(uui)
- 296: 141(int) Load 284(uui)
- 297: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 294 295 296
- 298: 141(int) Load 281(u)
- 299: 141(int) IAdd 298 297
- Store 281(u) 299
- 302: 6(float) Load 211(uf)
- 303: 178(bool) IsNan 302
- Store 301(b) 303
- 304: 6(float) Load 188(f)
- 305: 178(bool) IsInf 304
- Store 301(b) 305
- 306: 7(fvec4) Load 9(v)
- 307: 7(fvec4) Load 11(uv4)
- 308: 179(bvec4) FOrdLessThan 306 307
- 309: 178(bool) Any 308
- Store 301(b) 309
- 310: 178(bool) Load 301(b)
- SelectionMerge 312 None
- BranchConditional 310 311 312
- 311: Label
- 313: 7(fvec4) Load 9(v)
- 314: 7(fvec4) Load 11(uv4)
- 315: 179(bvec4) FOrdLessThanEqual 313 314
- 316: 178(bool) Any 315
- Branch 312
- 312: Label
- 317: 178(bool) Phi 310 5 316 311
- Store 301(b) 317
- 318: 178(bool) Load 301(b)
- SelectionMerge 320 None
- BranchConditional 318 319 320
- 319: Label
- 321: 7(fvec4) Load 9(v)
- 322: 7(fvec4) Load 11(uv4)
- 323: 179(bvec4) FOrdGreaterThan 321 322
- 324: 178(bool) Any 323
- Branch 320
- 320: Label
- 325: 178(bool) Phi 318 312 324 319
- Store 301(b) 325
- 326: 178(bool) Load 301(b)
- SelectionMerge 328 None
- BranchConditional 326 327 328
- 327: Label
- 329: 7(fvec4) Load 9(v)
- 330: 7(fvec4) Load 11(uv4)
- 331: 179(bvec4) FOrdGreaterThanEqual 329 330
- 332: 178(bool) Any 331
- Branch 328
- 328: Label
- 333: 178(bool) Phi 326 320 332 327
- Store 301(b) 333
- 334: 178(bool) Load 301(b)
- SelectionMerge 336 None
- BranchConditional 334 335 336
- 335: Label
- 337: 179(bvec4) Load 181(ub41)
- 339: 179(bvec4) Load 338(ub42)
- 340: 179(bvec4) IEqual 337 339
- 341: 178(bool) Any 340
- Branch 336
- 336: Label
- 342: 178(bool) Phi 334 328 341 335
- Store 301(b) 342
- 343: 178(bool) Load 301(b)
- SelectionMerge 345 None
- BranchConditional 343 344 345
- 344: Label
- 346: 179(bvec4) Load 181(ub41)
- 347: 179(bvec4) Load 338(ub42)
- 348: 179(bvec4) INotEqual 346 347
- 349: 178(bool) Any 348
- Branch 345
- 345: Label
- 350: 178(bool) Phi 343 336 349 344
- Store 301(b) 350
- 351: 178(bool) Load 301(b)
- 352: 179(bvec4) Load 181(ub41)
- 353: 178(bool) Any 352
- 354: 178(bool) LogicalAnd 351 353
- Store 301(b) 354
- 355: 178(bool) Load 301(b)
+ 279: 18(int) Load 22(ui)
+ 280: 18(int) Load 22(ui)
+ 281: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280
+ 282: 18(int) Load 20(i)
+ 283: 18(int) IAdd 282 281
+ Store 20(i) 283
+ 286: 141(int) Load 285(u)
+ 289: 141(int) Load 288(uui)
+ 290: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289
+ 291: 141(int) Load 285(u)
+ 292: 141(int) IAdd 291 290
+ Store 285(u) 292
+ 293: 141(int) Load 285(u)
+ 294: 141(int) Load 288(uui)
+ 295: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294
+ 296: 141(int) Load 285(u)
+ 297: 141(int) IAdd 296 295
+ Store 285(u) 297
+ 298: 141(int) Load 285(u)
+ 299: 141(int) Load 288(uui)
+ 300: 141(int) Load 288(uui)
+ 301: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300
+ 302: 141(int) Load 285(u)
+ 303: 141(int) IAdd 302 301
+ Store 285(u) 303
+ 306: 6(float) Load 212(uf)
+ 307: 178(bool) IsNan 306
+ Store 305(b) 307
+ 308: 6(float) Load 188(f)
+ 309: 178(bool) IsInf 308
+ Store 305(b) 309
+ 310: 7(fvec4) Load 9(v)
+ 311: 7(fvec4) Load 11(uv4)
+ 312: 179(bvec4) FOrdLessThan 310 311
+ 313: 178(bool) Any 312
+ Store 305(b) 313
+ 314: 178(bool) Load 305(b)
+ SelectionMerge 316 None
+ BranchConditional 314 315 316
+ 315: Label
+ 317: 7(fvec4) Load 9(v)
+ 318: 7(fvec4) Load 11(uv4)
+ 319: 179(bvec4) FOrdLessThanEqual 317 318
+ 320: 178(bool) Any 319
+ Branch 316
+ 316: Label
+ 321: 178(bool) Phi 314 5 320 315
+ Store 305(b) 321
+ 322: 178(bool) Load 305(b)
+ SelectionMerge 324 None
+ BranchConditional 322 323 324
+ 323: Label
+ 325: 7(fvec4) Load 9(v)
+ 326: 7(fvec4) Load 11(uv4)
+ 327: 179(bvec4) FOrdGreaterThan 325 326
+ 328: 178(bool) Any 327
+ Branch 324
+ 324: Label
+ 329: 178(bool) Phi 322 316 328 323
+ Store 305(b) 329
+ 330: 178(bool) Load 305(b)
+ SelectionMerge 332 None
+ BranchConditional 330 331 332
+ 331: Label
+ 333: 7(fvec4) Load 9(v)
+ 334: 7(fvec4) Load 11(uv4)
+ 335: 179(bvec4) FOrdGreaterThanEqual 333 334
+ 336: 178(bool) Any 335
+ Branch 332
+ 332: Label
+ 337: 178(bool) Phi 330 324 336 331
+ Store 305(b) 337
+ 338: 178(bool) Load 305(b)
+ SelectionMerge 340 None
+ BranchConditional 338 339 340
+ 339: Label
+ 341: 179(bvec4) Load 181(ub41)
+ 343: 179(bvec4) Load 342(ub42)
+ 344: 179(bvec4) IEqual 341 343
+ 345: 178(bool) Any 344
+ Branch 340
+ 340: Label
+ 346: 178(bool) Phi 338 332 345 339
+ Store 305(b) 346
+ 347: 178(bool) Load 305(b)
+ SelectionMerge 349 None
+ BranchConditional 347 348 349
+ 348: Label
+ 350: 179(bvec4) Load 181(ub41)
+ 351: 179(bvec4) Load 342(ub42)
+ 352: 179(bvec4) INotEqual 350 351
+ 353: 178(bool) Any 352
+ Branch 349
+ 349: Label
+ 354: 178(bool) Phi 347 340 353 348
+ Store 305(b) 354
+ 355: 178(bool) Load 305(b)
356: 179(bvec4) Load 181(ub41)
- 357: 178(bool) All 356
+ 357: 178(bool) Any 356
358: 178(bool) LogicalAnd 355 357
- Store 301(b) 358
- 359: 178(bool) Load 301(b)
- SelectionMerge 361 None
- BranchConditional 359 360 361
- 360: Label
- 362: 179(bvec4) Load 181(ub41)
- 363: 179(bvec4) LogicalNot 362
- 364: 178(bool) Any 363
- Branch 361
- 361: Label
- 365: 178(bool) Phi 359 345 364 360
- Store 301(b) 365
- 366: 18(int) Load 20(i)
- 367: 18(int) Load 22(ui)
- 368: 18(int) IAdd 366 367
- 369: 18(int) Load 20(i)
- 370: 18(int) IMul 368 369
+ Store 305(b) 358
+ 359: 178(bool) Load 305(b)
+ 360: 179(bvec4) Load 181(ub41)
+ 361: 178(bool) All 360
+ 362: 178(bool) LogicalAnd 359 361
+ Store 305(b) 362
+ 363: 178(bool) Load 305(b)
+ SelectionMerge 365 None
+ BranchConditional 363 364 365
+ 364: Label
+ 366: 179(bvec4) Load 181(ub41)
+ 367: 179(bvec4) LogicalNot 366
+ 368: 178(bool) Any 367
+ Branch 365
+ 365: Label
+ 369: 178(bool) Phi 363 349 368 364
+ Store 305(b) 369
+ 370: 18(int) Load 20(i)
371: 18(int) Load 22(ui)
- 372: 18(int) ISub 370 371
+ 372: 18(int) IAdd 370 371
373: 18(int) Load 20(i)
- 374: 18(int) SDiv 372 373
- Store 20(i) 374
- 375: 18(int) Load 20(i)
- 376: 18(int) Load 22(ui)
- 377: 18(int) SMod 375 376
- Store 20(i) 377
- 378: 18(int) Load 20(i)
- 379: 18(int) Load 22(ui)
- 380: 178(bool) IEqual 378 379
- 381: 178(bool) LogicalNot 380
- SelectionMerge 383 None
- BranchConditional 381 382 383
- 382: Label
- 384: 18(int) Load 20(i)
- 385: 18(int) Load 22(ui)
- 386: 178(bool) INotEqual 384 385
- 387: 18(int) Load 20(i)
- 388: 18(int) Load 22(ui)
- 389: 178(bool) IEqual 387 388
- 390: 178(bool) LogicalAnd 386 389
+ 374: 18(int) IMul 372 373
+ 375: 18(int) Load 22(ui)
+ 376: 18(int) ISub 374 375
+ 377: 18(int) Load 20(i)
+ 378: 18(int) SDiv 376 377
+ Store 20(i) 378
+ 379: 18(int) Load 20(i)
+ 380: 18(int) Load 22(ui)
+ 381: 18(int) SMod 379 380
+ Store 20(i) 381
+ 382: 18(int) Load 20(i)
+ 383: 18(int) Load 22(ui)
+ 384: 178(bool) IEqual 382 383
+ 385: 178(bool) LogicalNot 384
+ SelectionMerge 387 None
+ BranchConditional 385 386 387
+ 386: Label
+ 388: 18(int) Load 20(i)
+ 389: 18(int) Load 22(ui)
+ 390: 178(bool) INotEqual 388 389
391: 18(int) Load 20(i)
- 393: 178(bool) INotEqual 391 392
- 394: 178(bool) LogicalNotEqual 390 393
- Branch 383
- 383: Label
- 395: 178(bool) Phi 380 361 394 382
- SelectionMerge 397 None
- BranchConditional 395 396 397
- 396: Label
- 398: 18(int) Load 20(i)
- 400: 18(int) IAdd 398 399
- Store 20(i) 400
- Branch 397
- 397: Label
- 401: 6(float) Load 211(uf)
- 402: 6(float) Load 211(uf)
- 403: 6(float) FAdd 401 402
- 404: 6(float) Load 211(uf)
- 405: 6(float) FMul 403 404
- 406: 6(float) Load 211(uf)
- 407: 6(float) FSub 405 406
- 408: 6(float) Load 211(uf)
- 409: 6(float) FDiv 407 408
- Store 188(f) 409
- 410: 7(fvec4) Load 9(v)
- 411: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 410
- 412: 6(float) Load 188(f)
- 413: 6(float) FAdd 412 411
+ 392: 18(int) Load 22(ui)
+ 393: 178(bool) IEqual 391 392
+ 394: 178(bool) LogicalAnd 390 393
+ 395: 18(int) Load 20(i)
+ 397: 178(bool) INotEqual 395 396
+ 398: 178(bool) LogicalNotEqual 394 397
+ Branch 387
+ 387: Label
+ 399: 178(bool) Phi 384 365 398 386
+ SelectionMerge 401 None
+ BranchConditional 399 400 401
+ 400: Label
+ 402: 18(int) Load 20(i)
+ 404: 18(int) IAdd 402 403
+ Store 20(i) 404
+ Branch 401
+ 401: Label
+ 405: 6(float) Load 212(uf)
+ 406: 6(float) Load 212(uf)
+ 407: 6(float) FAdd 405 406
+ 408: 6(float) Load 212(uf)
+ 409: 6(float) FMul 407 408
+ 410: 6(float) Load 212(uf)
+ 411: 6(float) FSub 409 410
+ 412: 6(float) Load 212(uf)
+ 413: 6(float) FDiv 411 412
Store 188(f) 413
414: 7(fvec4) Load 9(v)
- 415: 7(fvec4) Load 9(v)
- 416: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 414 415
- 417: 6(float) Load 188(f)
- 418: 6(float) FAdd 417 416
- Store 188(f) 418
+ 415: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 414
+ 416: 6(float) Load 188(f)
+ 417: 6(float) FAdd 416 415
+ Store 188(f) 417
+ 418: 7(fvec4) Load 9(v)
419: 7(fvec4) Load 9(v)
- 420: 7(fvec4) Load 9(v)
- 421: 6(float) Dot 419 420
- 422: 6(float) Load 188(f)
- 423: 6(float) FAdd 422 421
- Store 188(f) 423
- 424: 6(float) Load 188(f)
- 425: 6(float) Load 211(uf)
- 426: 6(float) FMul 424 425
- 427: 6(float) Load 188(f)
- 428: 6(float) FAdd 427 426
- Store 188(f) 428
- 430: 7(fvec4) Load 9(v)
- 431: 429(fvec3) VectorShuffle 430 430 0 1 2
- 432: 7(fvec4) Load 9(v)
- 433: 429(fvec3) VectorShuffle 432 432 0 1 2
- 434: 429(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 431 433
- 435: 6(float) CompositeExtract 434 0
- 436: 6(float) Load 188(f)
- 437: 6(float) FAdd 436 435
- Store 188(f) 437
- 438: 6(float) Load 188(f)
- 439: 6(float) Load 211(uf)
- 440: 178(bool) FOrdEqual 438 439
- 441: 178(bool) LogicalNot 440
- SelectionMerge 443 None
- BranchConditional 441 442 443
- 442: Label
- 444: 6(float) Load 188(f)
- 445: 6(float) Load 211(uf)
- 446: 178(bool) FOrdNotEqual 444 445
- 447: 6(float) Load 188(f)
- 449: 178(bool) FOrdNotEqual 447 448
- 450: 178(bool) LogicalAnd 446 449
- Branch 443
- 443: Label
- 451: 178(bool) Phi 440 397 450 442
- SelectionMerge 453 None
- BranchConditional 451 452 453
- 452: Label
- 454: 6(float) Load 188(f)
- 456: 6(float) FAdd 454 455
- Store 188(f) 456
- Branch 453
- 453: Label
- 457: 18(int) Load 22(ui)
- 458: 18(int) Load 20(i)
- 459: 18(int) BitwiseAnd 458 457
- Store 20(i) 459
- 461: 18(int) Load 20(i)
- 462: 18(int) BitwiseOr 461 460
- Store 20(i) 462
- 463: 18(int) Load 22(ui)
- 464: 18(int) Load 20(i)
- 465: 18(int) BitwiseXor 464 463
- Store 20(i) 465
- 467: 18(int) Load 20(i)
- 468: 18(int) SMod 467 466
- Store 20(i) 468
- 469: 18(int) Load 20(i)
- 470: 18(int) ShiftRightArithmetic 469 392
- Store 20(i) 470
- 471: 18(int) Load 22(ui)
- 472: 18(int) Load 20(i)
- 473: 18(int) ShiftLeftLogical 472 471
- Store 20(i) 473
- 474: 18(int) Load 20(i)
- 475: 18(int) Not 474
- Store 20(i) 475
- 476: 178(bool) Load 301(b)
- 477: 178(bool) LogicalNot 476
- Store 301(b) 477
- 481: 178(bool) Load 301(b)
- SelectionMerge 483 None
- BranchConditional 481 482 492
- 482: Label
- 484: 18(int) Load 20(i)
- 485: 6(float) ConvertSToF 484
- 486: 7(fvec4) CompositeConstruct 485 485 485 485
- 487: 6(float) Load 188(f)
- 488: 7(fvec4) CompositeConstruct 487 487 487 487
- 489: 7(fvec4) FAdd 486 488
- 490: 7(fvec4) Load 9(v)
- 491: 7(fvec4) FAdd 489 490
- Store 480 491
- Branch 483
- 492: Label
- 493: 7(fvec4) Load 9(v)
- Store 480 493
- Branch 483
- 483: Label
- 494: 7(fvec4) Load 480
- Store 479(FragColor) 494
+ 420: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 418 419
+ 421: 6(float) Load 188(f)
+ 422: 6(float) FAdd 421 420
+ Store 188(f) 422
+ 423: 7(fvec4) Load 9(v)
+ 424: 7(fvec4) Load 9(v)
+ 425: 6(float) Dot 423 424
+ 426: 6(float) Load 188(f)
+ 427: 6(float) FAdd 426 425
+ Store 188(f) 427
+ 428: 6(float) Load 188(f)
+ 429: 6(float) Load 212(uf)
+ 430: 6(float) FMul 428 429
+ 431: 6(float) Load 188(f)
+ 432: 6(float) FAdd 431 430
+ Store 188(f) 432
+ 434: 7(fvec4) Load 9(v)
+ 435: 433(fvec3) VectorShuffle 434 434 0 1 2
+ 436: 7(fvec4) Load 9(v)
+ 437: 433(fvec3) VectorShuffle 436 436 0 1 2
+ 438: 433(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 435 437
+ 439: 6(float) CompositeExtract 438 0
+ 440: 6(float) Load 188(f)
+ 441: 6(float) FAdd 440 439
+ Store 188(f) 441
+ 442: 6(float) Load 188(f)
+ 443: 6(float) Load 212(uf)
+ 444: 178(bool) FOrdEqual 442 443
+ 445: 178(bool) LogicalNot 444
+ SelectionMerge 447 None
+ BranchConditional 445 446 447
+ 446: Label
+ 448: 6(float) Load 188(f)
+ 449: 6(float) Load 212(uf)
+ 450: 178(bool) FOrdNotEqual 448 449
+ 451: 6(float) Load 188(f)
+ 453: 178(bool) FOrdNotEqual 451 452
+ 454: 178(bool) LogicalAnd 450 453
+ Branch 447
+ 447: Label
+ 455: 178(bool) Phi 444 401 454 446
+ SelectionMerge 457 None
+ BranchConditional 455 456 457
+ 456: Label
+ 458: 6(float) Load 188(f)
+ 460: 6(float) FAdd 458 459
+ Store 188(f) 460
+ Branch 457
+ 457: Label
+ 461: 18(int) Load 22(ui)
+ 462: 18(int) Load 20(i)
+ 463: 18(int) BitwiseAnd 462 461
+ Store 20(i) 463
+ 465: 18(int) Load 20(i)
+ 466: 18(int) BitwiseOr 465 464
+ Store 20(i) 466
+ 467: 18(int) Load 22(ui)
+ 468: 18(int) Load 20(i)
+ 469: 18(int) BitwiseXor 468 467
+ Store 20(i) 469
+ 471: 18(int) Load 20(i)
+ 472: 18(int) SMod 471 470
+ Store 20(i) 472
+ 473: 18(int) Load 20(i)
+ 474: 18(int) ShiftRightArithmetic 473 396
+ Store 20(i) 474
+ 475: 18(int) Load 22(ui)
+ 476: 18(int) Load 20(i)
+ 477: 18(int) ShiftLeftLogical 476 475
+ Store 20(i) 477
+ 478: 18(int) Load 20(i)
+ 479: 18(int) Not 478
+ Store 20(i) 479
+ 480: 178(bool) Load 305(b)
+ 481: 178(bool) LogicalNot 480
+ Store 305(b) 481
+ 485: 178(bool) Load 305(b)
+ SelectionMerge 487 None
+ BranchConditional 485 486 496
+ 486: Label
+ 488: 18(int) Load 20(i)
+ 489: 6(float) ConvertSToF 488
+ 490: 7(fvec4) CompositeConstruct 489 489 489 489
+ 491: 6(float) Load 188(f)
+ 492: 7(fvec4) CompositeConstruct 491 491 491 491
+ 493: 7(fvec4) FAdd 490 492
+ 494: 7(fvec4) Load 9(v)
+ 495: 7(fvec4) FAdd 493 494
+ Store 484 495
+ Branch 487
+ 496: Label
+ 497: 7(fvec4) Load 9(v)
+ Store 484 497
+ Branch 487
+ 487: Label
+ 498: 7(fvec4) Load 484
+ Store 483(FragColor) 498
Return
FunctionEnd
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index 8bed807..94e1eac 100755
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -7,7 +7,7 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 55
+// Id's are bound by 56
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -82,7 +82,8 @@
51: 6(float) Load 50(blend)
52: 6(float) Load 8(blendscale)
53: 6(float) FMul 51 52
- 54: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 45 48 53
- Store 44(gl_FragColor) 54
+ 54: 10(fvec4) CompositeConstruct 53 53 53 53
+ 55: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 45 48 54
+ Store 44(gl_FragColor) 55
Return
FunctionEnd
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index cbbd0c4..b47200e 100755
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -8,12 +8,12 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 290
+// Id's are bound by 291
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 289 47
+ EntryPoint Fragment 4 "main" 290 47
ExecutionMode 4 OriginLowerLeft
Source GLSL 130
Name 4 "main"
@@ -39,8 +39,8 @@
Name 276 "gl_FragColor"
Name 279 "u"
Name 282 "blend"
- Name 288 "scale"
- Name 289 "t"
+ Name 289 "scale"
+ Name 290 "t"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -103,9 +103,9 @@
279(u): 278(ptr) Variable UniformConstant
281: TypePointer UniformConstant 6(float)
282(blend): 281(ptr) Variable UniformConstant
- 287: TypePointer UniformConstant 45(fvec2)
- 288(scale): 287(ptr) Variable UniformConstant
- 289(t): 46(ptr) Variable Input
+ 288: TypePointer UniformConstant 45(fvec2)
+ 289(scale): 288(ptr) Variable UniformConstant
+ 290(t): 46(ptr) Variable Input
4(main): 2 Function None 3
5: Label
8(blendscale): 7(ptr) Variable Function
@@ -370,7 +370,8 @@
283: 6(float) Load 282(blend)
284: 6(float) Load 8(blendscale)
285: 6(float) FMul 283 284
- 286: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 277 280 285
- Store 276(gl_FragColor) 286
+ 286: 22(fvec4) CompositeConstruct 285 285 285 285
+ 287: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 277 280 286
+ Store 276(gl_FragColor) 287
Return
FunctionEnd
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index ccef7b9..542f8f3 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
-#define GLSLANG_REVISION "SPIRV99.844"
+#define GLSLANG_REVISION "SPIRV99.845"
#define GLSLANG_DATE "13-Dec-2015"