nir/spirv: Wrap borrow/carry ops in b2i

NIR specifies them as booleans but SPIR-V wants ints.
This commit is contained in:
Jason Ekstrand
2016-01-06 17:13:04 -08:00
parent 000eb00862
commit 195c60deb4

View File

@@ -2718,13 +2718,15 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
case SpvOpIAddCarry:
assert(glsl_type_is_struct(val->ssa->type));
val->ssa->elems[0]->def = nir_iadd(&b->nb, src[0], src[1]);
val->ssa->elems[1]->def = nir_uadd_carry(&b->nb, src[0], src[1]);
val->ssa->elems[1]->def =
nir_b2i(&b->nb, nir_uadd_carry(&b->nb, src[0], src[1]));
return;
case SpvOpISubBorrow:
assert(glsl_type_is_struct(val->ssa->type));
val->ssa->elems[0]->def = nir_isub(&b->nb, src[0], src[1]);
val->ssa->elems[1]->def = nir_usub_borrow(&b->nb, src[0], src[1]);
val->ssa->elems[1]->def =
nir_b2i(&b->nb, nir_usub_borrow(&b->nb, src[0], src[1]));
return;
case SpvOpUMulExtended: