nir/spirv: Handle boolean uniforms correctly

This commit is contained in:
Jason Ekstrand 2015-05-06 12:54:02 -07:00
parent 64bc58a88e
commit 56f533b3a0

View file

@ -573,7 +573,16 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
nir_builder_instr_insert(&b->nb, &load->instr);
val->type = src_type;
val->ssa = &load->dest.ssa;
if (src->var->data.mode == nir_var_uniform &&
glsl_get_base_type(src_type) == GLSL_TYPE_BOOL) {
/* Uniform boolean loads need to be fixed up since they're defined
* to be zero/nonzero rather than NIR_FALSE/NIR_TRUE.
*/
val->ssa = nir_ine(&b->nb, &load->dest.ssa, nir_imm_int(&b->nb, 0));
} else {
val->ssa = &load->dest.ssa;
}
break;
}