mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-13 21:50:31 +01:00
nir: don't use nir_build_alu() with incomplete sources
Ideally we'd have a version that takes nir_scalar arguments. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37195>
This commit is contained in:
parent
ef9ecc4058
commit
3180656bbc
2 changed files with 13 additions and 17 deletions
|
|
@ -69,18 +69,17 @@ make_sources_canonical(nir_builder *b, nir_alu_instr *alu, uint32_t start_idx)
|
|||
if (nir_src_bit_size(alu->src[i].src) != bit_size) {
|
||||
b->cursor = nir_before_instr(&alu->instr);
|
||||
nir_op convert_op = get_bool_convert_opcode(bit_size);
|
||||
nir_def *new_src =
|
||||
nir_build_alu(b, convert_op, alu->src[i].src.ssa, NULL, NULL, NULL);
|
||||
nir_alu_instr *conv_instr = nir_alu_instr_create(b->shader, convert_op);
|
||||
conv_instr->src[0].src = nir_src_for_ssa(alu->src[i].src.ssa);
|
||||
/* Retain the write mask and swizzle of the original instruction so
|
||||
* that we don’t unnecessarily create a vectorized instruction.
|
||||
*/
|
||||
nir_alu_instr *conv_instr =
|
||||
nir_instr_as_alu(nir_builder_last_instr(b));
|
||||
conv_instr->def.num_components =
|
||||
alu->def.num_components;
|
||||
memcpy(conv_instr->src[0].swizzle,
|
||||
alu->src[i].swizzle,
|
||||
sizeof(conv_instr->src[0].swizzle));
|
||||
|
||||
nir_def *new_src = nir_builder_alu_instr_finish_and_insert(b, conv_instr);
|
||||
|
||||
nir_src_rewrite(&alu->src[i].src, new_src);
|
||||
/* The swizzle will have been handled by the conversion instruction
|
||||
* so we can reset it back to the default
|
||||
|
|
|
|||
|
|
@ -2248,15 +2248,15 @@ clone_ssa_impl(struct linkage_info *linkage, nir_builder *b, nir_def *ssa)
|
|||
return get_stored_value_for_load(linkage, &alu->instr);
|
||||
}
|
||||
|
||||
nir_def *src[4] = { 0 };
|
||||
unsigned num_srcs = nir_op_infos[alu->op].num_inputs;
|
||||
assert(num_srcs <= ARRAY_SIZE(src));
|
||||
nir_alu_instr *alu_clone = nir_alu_instr_create(b->shader, alu->op);
|
||||
|
||||
for (unsigned i = 0; i < num_srcs; i++)
|
||||
src[i] = clone_ssa_impl(linkage, b, alu->src[i].src.ssa);
|
||||
|
||||
clone = nir_build_alu(b, alu->op, src[0], src[1], src[2], src[3]);
|
||||
nir_alu_instr *alu_clone = nir_def_as_alu(clone);
|
||||
for (unsigned i = 0; i < num_srcs; i++) {
|
||||
nir_def *src = clone_ssa_impl(linkage, b, alu->src[i].src.ssa);
|
||||
alu_clone->src[i].src = nir_src_for_ssa(src);
|
||||
memcpy(alu_clone->src[i].swizzle, alu->src[i].swizzle,
|
||||
NIR_MAX_VEC_COMPONENTS);
|
||||
}
|
||||
|
||||
alu_clone->exact = alu->exact;
|
||||
alu_clone->no_signed_wrap = alu->no_signed_wrap;
|
||||
|
|
@ -2264,10 +2264,7 @@ clone_ssa_impl(struct linkage_info *linkage, nir_builder *b, nir_def *ssa)
|
|||
alu_clone->def.num_components = alu->def.num_components;
|
||||
alu_clone->def.bit_size = alu->def.bit_size;
|
||||
|
||||
for (unsigned i = 0; i < num_srcs; i++) {
|
||||
memcpy(alu_clone->src[i].swizzle, alu->src[i].swizzle,
|
||||
NIR_MAX_VEC_COMPONENTS);
|
||||
}
|
||||
clone = nir_builder_alu_instr_finish_and_insert(b, alu_clone);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue