mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
intel/fs: Handle flag read/write aliasing in needs_src_copy
In order to implement the ballot intrinsic, we do a MOV from flag register to some GRF. If that GRF is used in a SEL, cmod propagation helpfully changes it into a MOV from the flag register with a cmod. This is perfectly valid but when lower_simd_width comes along, it simply splits into two instructions which both have conditional modifiers. This is a problem since we're reading the flag register. This commit makes us check whether or not flags_written() overlaps with the flag values that we are reading via the instruction source and, if we have any interference, will force us to emit a copy of the source. Reviewed-by: Matt Turner <mattst88@gmail.com> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
a6d38f476b
commit
fa6e74e33e
1 changed files with 3 additions and 1 deletions
|
|
@ -5013,7 +5013,9 @@ needs_src_copy(const fs_builder &lbld, const fs_inst *inst, unsigned i)
|
|||
{
|
||||
return !(is_periodic(inst->src[i], lbld.dispatch_width()) ||
|
||||
(inst->components_read(i) == 1 &&
|
||||
lbld.dispatch_width() <= inst->exec_size));
|
||||
lbld.dispatch_width() <= inst->exec_size)) ||
|
||||
(inst->flags_written() &
|
||||
flag_mask(inst->src[i], type_sz(inst->src[i].type)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue