Vector Cndxx
This commit is contained in:
parent
ff373a83a4
commit
b1e56ee4e5
|
@ -526,6 +526,30 @@ void SpirvShaderTranslator::ProcessVectorAluInstruction(
|
||||||
sources[1]);
|
sources[1]);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case AluVectorOpcode::kCndEq: {
|
||||||
|
// dest = src0 == 0.0 ? src1 : src2;
|
||||||
|
auto c = b.createBinOp(spv::Op::OpFOrdEqual, vec4_bool_type_, sources[0],
|
||||||
|
b.makeFloatConstant(0.f));
|
||||||
|
dest = b.createTriOp(spv::Op::OpSelect, vec4_float_type_, c, sources[1],
|
||||||
|
sources[2]);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case AluVectorOpcode::kCndGe: {
|
||||||
|
// dest = src0 == 0.0 ? src1 : src2;
|
||||||
|
auto c = b.createBinOp(spv::Op::OpFOrdGreaterThanEqual, vec4_bool_type_,
|
||||||
|
sources[0], b.makeFloatConstant(0.f));
|
||||||
|
dest = b.createTriOp(spv::Op::OpSelect, vec4_float_type_, c, sources[1],
|
||||||
|
sources[2]);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case AluVectorOpcode::kCndGt: {
|
||||||
|
// dest = src0 == 0.0 ? src1 : src2;
|
||||||
|
auto c = b.createBinOp(spv::Op::OpFOrdGreaterThan, vec4_bool_type_,
|
||||||
|
sources[0], b.makeFloatConstant(0.f));
|
||||||
|
dest = b.createTriOp(spv::Op::OpSelect, vec4_float_type_, c, sources[1],
|
||||||
|
sources[2]);
|
||||||
|
} break;
|
||||||
|
|
||||||
case AluVectorOpcode::kCube: {
|
case AluVectorOpcode::kCube: {
|
||||||
// TODO:
|
// TODO:
|
||||||
} break;
|
} break;
|
||||||
|
@ -1130,7 +1154,6 @@ void SpirvShaderTranslator::StoreToResult(Id source_value_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
// swizzle
|
// swizzle
|
||||||
// TODO: 0.0 and 1.0 swizzles
|
|
||||||
if (!result.is_standard_swizzle()) {
|
if (!result.is_standard_swizzle()) {
|
||||||
std::vector<uint32_t> operands;
|
std::vector<uint32_t> operands;
|
||||||
operands.push_back(source_value_id);
|
operands.push_back(source_value_id);
|
||||||
|
|
Loading…
Reference in New Issue