tu: Handle non-overlapping WaW hazard with buffer copy/fill/update
What does this MR do and why?
Copies/fills/updates for buffers are happening through CCU but need
additional synchronization when write range is not aligned to 64 bytes.
Because dst buffer access uses either R8_UNORM
or R32_UINT
and they are not
coherent between each other in CCU since format seem to be a part of a
cache key.
See: https://gitlab.khronos.org/vulkan/vulkan/-/issues/3306
The synchronization with writes from UCHE (e.g. with SSBO stores) are solved by the fact that UCHE has byte level dirtiness tracking and that CCU flush would happen always before UCHE flush for such case (e.g. both renderpass and dispatch would flush pending CCU write).
Additionally see: https://gitlab.khronos.org/vulkan/vulkan/-/issues/3398#note_400111
Fixes geometry corruption and potentially hangs in Resident Evil 3.