mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-17 04:10:24 +01:00
intel/fs: work around gen12 lower-precision source modifier limitation
GEN:BUG:1604601757 prevents source modifiers for multiplication of lower precision integers. lower_mul_dword_inst() splits 32x32 multiplication into 32x16, and needs to eliminate source modifiers in this case. Closes: #3329 Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
parent
ee06e47c5b
commit
cf52b40fb0
1 changed files with 14 additions and 1 deletions
|
|
@ -3930,7 +3930,20 @@ fs_visitor::lower_mul_dword_inst(fs_inst *inst, bblock_t *block)
|
|||
high.offset = inst->dst.offset % REG_SIZE;
|
||||
|
||||
if (devinfo->gen >= 7) {
|
||||
if (inst->src[1].abs)
|
||||
/* From GEN:BUG:1604601757:
|
||||
*
|
||||
* "When multiplying a DW and any lower precision integer, source modifier
|
||||
* is not supported."
|
||||
*
|
||||
* An unsupported negate modifier on src[1] would ordinarily be
|
||||
* lowered by the subsequent lower_regioning pass. In this case that
|
||||
* pass would spawn another dword multiply. Instead, lower the
|
||||
* modifier first.
|
||||
*/
|
||||
const bool source_mods_unsupported = (devinfo->gen >= 12);
|
||||
|
||||
if (inst->src[1].abs || (inst->src[1].negate &&
|
||||
source_mods_unsupported))
|
||||
lower_src_modifiers(this, block, inst, 1);
|
||||
|
||||
if (inst->src[1].file == IMM) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue