nir/spirv: Handle boolean uniforms correctly

This commit is contained in:
Jason Ekstrand 2015-05-06 12:54:02 -07:00
parent b6562bbc30
commit ca51d926fd
1 changed files with 10 additions and 1 deletions

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;
}