nir/spirv: Make vtn_ssa_value handle constants as well as ssa values

This commit is contained in:
Jason Ekstrand 2015-05-06 12:35:30 -07:00
parent b0d1854efc
commit 7b9c29e440

View file

@ -31,7 +31,26 @@
nir_ssa_def *
vtn_ssa_value(struct vtn_builder *b, uint32_t value_id)
{
return vtn_value(b, value_id, vtn_value_type_ssa)->ssa;
struct vtn_value *val = vtn_untyped_value(b, value_id);
switch (val->value_type) {
case vtn_value_type_constant: {
assert(glsl_type_is_vector_or_scalar(val->type));
unsigned num_components = glsl_get_vector_elements(val->type);
nir_load_const_instr *load =
nir_load_const_instr_create(b->shader, num_components);
for (unsigned i = 0; i < num_components; i++)
load->value.u[0] = val->constant->value.u[0];
nir_builder_instr_insert(&b->nb, &load->instr);
return &load->def;
}
case vtn_value_type_ssa:
return val->ssa;
default:
unreachable("Invalid type for an SSA value");
}
}
static char *