aco: don't move memory accesses to before control barriers
Fixes random failures of dEQP-VK.image.qualifiers.volatile.cube_array.r32i
and similar tests on Vega.
fossil-db (Navi):
Totals from 6 (0.00% of 135946) affected shaders:
VMEM: 1218 -> 1110 (-8.87%); split: +2.46%, -11.33%
SMEM: 174 -> 189 (+8.62%)
Copies: 84 -> 87 (+3.57%)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Fixes: cd392a10d0
('radv/aco,aco: use scoped barriers')
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6174>
This commit is contained in:
parent
e4c6204d65
commit
7b4c24eb67
|
@ -495,6 +495,12 @@ HazardResult perform_hazard_query(hazard_query *query, Instruction *instr, bool
|
|||
if (first->bar_classes && second->bar_classes)
|
||||
return hazard_fail_barrier;
|
||||
|
||||
/* Don't move memory accesses to before control barriers. I don't think
|
||||
* this is necessary for the Vulkan memory model, but it might be for GLSL450. */
|
||||
unsigned control_classes = storage_buffer | storage_atomic_counter | storage_image | storage_shared;
|
||||
if (first->has_control_barrier && ((second->access_atomic | second->access_relaxed) & control_classes))
|
||||
return hazard_fail_barrier;
|
||||
|
||||
/* don't move memory loads/stores past potentially aliasing loads/stores */
|
||||
unsigned aliasing_storage = instr->format == Format::SMEM ?
|
||||
query->aliasing_storage_smem :
|
||||
|
|
Loading…
Reference in New Issue