mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 15:58:05 +02:00
i965/fs: Fix compute-to-mrf VGRF region coverage condition.
Compute-to-mrf was checking whether the destination of scan_inst is
more than one component (making assumptions about the instruction data
type) in order to find out whether the result is being fully copied
into the MRF destination, which is rather inaccurate in cases where a
single-component instruction is only partially contained in the source
region, or when the execution size of the copy and scan_inst
instructions differ. Instead check whether the destination region of
the instruction is really contained within the bounds of the source
region of the copy.
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
(cherry picked from commit 4b0ec9f475)
This commit is contained in:
parent
a6011c6fc6
commit
dd96daa55e
1 changed files with 6 additions and 3 deletions
|
|
@ -2816,10 +2816,13 @@ fs_visitor::compute_to_mrf()
|
|||
if (scan_inst->is_partial_write())
|
||||
break;
|
||||
|
||||
/* Things returning more than one register would need us to
|
||||
* understand coalescing out more than one MOV at a time.
|
||||
/* Handling things not fully contained in the source of the copy
|
||||
* would need us to understand coalescing out more than one MOV at
|
||||
* a time.
|
||||
*/
|
||||
if (scan_inst->regs_written > scan_inst->exec_size / 8)
|
||||
if (scan_inst->dst.reg_offset < inst->src[0].reg_offset ||
|
||||
scan_inst->dst.reg_offset + scan_inst->regs_written >
|
||||
inst->src[0].reg_offset + inst->regs_read(0))
|
||||
break;
|
||||
|
||||
/* SEND instructions can't have MRF as a destination. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue