From: Jason Ekstrand Date: Wed, 6 May 2015 19:35:30 +0000 (-0700) Subject: nir/spirv: Make vtn_ssa_value handle constants as well as ssa values X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7b9c29e440d2ef3d2bd476ebd9ff06586f396da5;p=mesa.git nir/spirv: Make vtn_ssa_value handle constants as well as ssa values --- diff --git a/src/glsl/nir/spirv_to_nir.c b/src/glsl/nir/spirv_to_nir.c index f1c63ebff13..62d377ed243 100644 --- a/src/glsl/nir/spirv_to_nir.c +++ b/src/glsl/nir/spirv_to_nir.c @@ -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 *