pan/bi: Handle vectorized load_const
In preparation for 16-bit vectors. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5307>
This commit is contained in:
parent
1b09c6993d
commit
0e73d879e3
|
@ -466,20 +466,29 @@ static void
|
|||
emit_load_const(bi_context *ctx, nir_load_const_instr *instr)
|
||||
{
|
||||
/* Make sure we've been lowered */
|
||||
assert(instr->def.num_components == 1);
|
||||
assert(instr->def.num_components <= (32 / instr->def.bit_size));
|
||||
|
||||
/* Accumulate all the channels of the constant, as if we did an
|
||||
* implicit SEL over them */
|
||||
uint32_t acc = 0;
|
||||
|
||||
for (unsigned i = 0; i < instr->def.num_components; ++i) {
|
||||
unsigned v = nir_const_value_as_uint(instr->value[i], instr->def.bit_size);
|
||||
acc |= (v << (i * instr->def.bit_size));
|
||||
}
|
||||
|
||||
bi_instruction move = {
|
||||
.type = BI_MOV,
|
||||
.dest = pan_ssa_index(&instr->def),
|
||||
.dest_type = instr->def.bit_size | nir_type_uint,
|
||||
.dest_type = nir_type_uint32,
|
||||
.src = {
|
||||
BIR_INDEX_CONSTANT
|
||||
},
|
||||
.src_types = {
|
||||
instr->def.bit_size | nir_type_uint,
|
||||
nir_type_uint32,
|
||||
},
|
||||
.constant = {
|
||||
.u64 = nir_const_value_as_uint(instr->value[0], instr->def.bit_size)
|
||||
.u32 = acc
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue