SPV: Implement boolean selection for mix().

Use OpSelect to implement boolean selection of mix(). FMix is applicable
to linear blending of mix().
This commit is contained in:
Rex Xu 2016-03-15 12:08:31 +08:00
parent 6cc7674b6d
commit d715adc0f2
3 changed files with 9 additions and 8 deletions

View file

@ -3435,11 +3435,12 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
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;