mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 02:40:11 +01:00
i965/fs: Set exec_all on unspills.
This makes sure that unspills restore the exact contents of the variable in scratch space into the GRF without applying channel masking, which is incorrect under control flow for things like message headers or vectors of heterogeneous types that don't properly respect channel boundaries. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
07e67cc266
commit
bb67c467a4
1 changed files with 10 additions and 2 deletions
|
|
@ -944,8 +944,16 @@ fs_visitor::spill_reg(int spill_reg)
|
|||
|
||||
const unsigned width =
|
||||
dispatch_width == 16 && regs_read % 2 == 0 ? 16 : 8;
|
||||
emit_unspill(ibld.group(width, 0), unspill_dst,
|
||||
subset_spill_offset, regs_read);
|
||||
|
||||
/* Set exec_all() on unspill messages under the (rather
|
||||
* pessimistic) assumption that there is no one-to-one
|
||||
* correspondence between channels of the spilled variable in
|
||||
* scratch space and the scratch read message, which operates on
|
||||
* 32 bit channels. It shouldn't hurt in any case because the
|
||||
* unspill destination is a block-local temporary.
|
||||
*/
|
||||
emit_unspill(ibld.exec_all().group(width, 0),
|
||||
unspill_dst, subset_spill_offset, regs_read);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue