mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 22:20:14 +01: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>
This commit is contained in:
parent
bb61e24787
commit
4b0ec9f475
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