mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 15:20:10 +01:00
aco: use Info::definition_size instead of definition's regclass
16-bit abs/neg creates v_xor_b32/v_and_b32 with v2b definitions. These instructions never do partial writes without SDWA. No shader-db changes. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5040>
This commit is contained in:
parent
207c35cbe8
commit
edf863d1d2
2 changed files with 5 additions and 4 deletions
|
|
@ -411,7 +411,7 @@ std::pair<unsigned, unsigned> get_subdword_definition_info(Program *program, con
|
|||
else if (instr->format == Format::PSEUDO)
|
||||
return std::make_pair(4, rc.size() * 4u);
|
||||
|
||||
bool can_do_partial = chip >= GFX10;
|
||||
unsigned bytes_written = chip >= GFX10 ? rc.bytes() : 4u;
|
||||
switch (instr->opcode) {
|
||||
case aco_opcode::v_mad_f16:
|
||||
case aco_opcode::v_mad_u16:
|
||||
|
|
@ -419,11 +419,12 @@ std::pair<unsigned, unsigned> get_subdword_definition_info(Program *program, con
|
|||
case aco_opcode::v_fma_f16:
|
||||
case aco_opcode::v_div_fixup_f16:
|
||||
case aco_opcode::v_interp_p2_f16:
|
||||
can_do_partial = chip >= GFX9;
|
||||
bytes_written = chip >= GFX9 ? rc.bytes() : 4u;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
bytes_written = MAX2(bytes_written, instr_info.definition_size[(int)instr->opcode] / 8u);
|
||||
|
||||
if (can_use_SDWA(chip, instr)) {
|
||||
return std::make_pair(rc.bytes(), rc.bytes());
|
||||
|
|
@ -450,7 +451,7 @@ std::pair<unsigned, unsigned> get_subdword_definition_info(Program *program, con
|
|||
break;
|
||||
}
|
||||
|
||||
return std::make_pair(4u, can_do_partial ? rc.bytes() : 4u);
|
||||
return std::make_pair(4u, bytes_written);
|
||||
}
|
||||
|
||||
void add_subdword_definition(Program *program, aco_ptr<Instruction>& instr, unsigned idx, PhysReg reg, bool is_partial)
|
||||
|
|
|
|||
|
|
@ -568,7 +568,7 @@ unsigned get_subdword_bytes_written(Program *program, const aco_ptr<Instruction>
|
|||
break;
|
||||
}
|
||||
|
||||
return chip >= GFX10 ? def.bytes() : 4;
|
||||
return MAX2(chip >= GFX10 ? def.bytes() : 4, instr_info.definition_size[(int)instr->opcode] / 8u);
|
||||
}
|
||||
|
||||
} /* end namespace */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue