nir/spirv: handle OpConstantComposites with OpUndef members
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Signed-off-by: Karol Herbst <kherbst@redhat.com>
This commit is contained in:
@@ -1494,8 +1494,19 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
|
||||
spirv_op_to_string(opcode), elem_count, val->type->length);
|
||||
|
||||
nir_constant **elems = ralloc_array(b, nir_constant *, elem_count);
|
||||
for (unsigned i = 0; i < elem_count; i++)
|
||||
elems[i] = vtn_value(b, w[i + 3], vtn_value_type_constant)->constant;
|
||||
for (unsigned i = 0; i < elem_count; i++) {
|
||||
struct vtn_value *val = vtn_untyped_value(b, w[i + 3]);
|
||||
|
||||
if (val->value_type == vtn_value_type_constant) {
|
||||
elems[i] = val->constant;
|
||||
} else {
|
||||
vtn_fail_if(val->value_type != vtn_value_type_undef,
|
||||
"only constants or undefs allowed for "
|
||||
"SpvOpConstantComposite");
|
||||
/* to make it easier, just insert a NULL constant for now */
|
||||
elems[i] = vtn_null_constant(b, val->type->type);
|
||||
}
|
||||
}
|
||||
|
||||
switch (val->type->base_type) {
|
||||
case vtn_base_type_vector: {
|
||||
|
Reference in New Issue
Block a user