SPV: Implement boolean selection for mix().
Use OpSelect to implement boolean selection of mix(). FMix is applicable
to linear blending of mix().
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 8c1c84f..9b03b9a 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -3435,11 +3435,12 @@
builder.promoteScalar(precision, operands.front(), operands[2]);
break;
case glslang::EOpMix:
- if (isFloat)
+ if (! builder.isBoolType(builder.getScalarTypeId(builder.getTypeId(operands.back())))) {
+ assert(isFloat);
libCall = spv::GLSLstd450FMix;
- else {
+ } else {
opCode = spv::OpSelect;
- spv::MissingFunctionality("translating integer mix to OpSelect");
+ std::swap(operands.front(), operands.back());
}
builder.promoteScalar(precision, operands.front(), operands.back());
break;