|
|
@@ -1007,9 +1007,23 @@ emit_load_const(struct ntv_context *ctx, nir_load_const_instr *load_const) |
|
|
|
for (int i = 0; i < load_const->def.num_components; ++i) |
|
|
|
values[i] = load_const->value[i].u32; |
|
|
|
|
|
|
|
SpvId constant = get_uvec_constant(ctx, load_const->def.bit_size, |
|
|
|
load_const->def.num_components, |
|
|
|
values); |
|
|
|
unsigned bit_size = load_const->def.bit_size; |
|
|
|
unsigned num_components = load_const->def.num_components; |
|
|
|
|
|
|
|
SpvId constant; |
|
|
|
if (num_components > 1) { |
|
|
|
SpvId components[num_components]; |
|
|
|
for (int i = 0; i < num_components; i++) |
|
|
|
components[i] = emit_uint_const(ctx, bit_size, values[i]); |
|
|
|
|
|
|
|
SpvId type = get_uvec_type(ctx, bit_size, num_components); |
|
|
|
constant = spirv_builder_const_composite(&ctx->builder, type, |
|
|
|
components, num_components); |
|
|
|
} else { |
|
|
|
assert(num_components == 1); |
|
|
|
constant = emit_uint_const(ctx, bit_size, values[0]); |
|
|
|
} |
|
|
|
|
|
|
|
store_ssa_def_uint(ctx, &load_const->def, constant); |
|
|
|
} |
|
|
|
|