mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 11:20:11 +01:00
radv: only sync CP DMA for transfer operations or bottom pipe
CP DMA can only be busy when the driver copies buffers. The only affected Vulkan commands are vkCmdCopyBuffer() and vkCmdUpdateBuffer() (because we fallback to a copy depending on a threshold). Clear operations are currently not concerned because the driver always syncs after the last DMA operation. Per the spec, these two operations have to be externally synchronized with VK_PIPELINE_STAGE_TRANSFER_BIT. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
457ac6ce1e
commit
4b9bc4791b
1 changed files with 6 additions and 2 deletions
|
|
@ -4496,7 +4496,9 @@ radv_barrier(struct radv_cmd_buffer *cmd_buffer,
|
||||||
/* Make sure CP DMA is idle because the driver might have performed a
|
/* Make sure CP DMA is idle because the driver might have performed a
|
||||||
* DMA operation for copying or filling buffers/images.
|
* DMA operation for copying or filling buffers/images.
|
||||||
*/
|
*/
|
||||||
si_cp_dma_wait_for_idle(cmd_buffer);
|
if (info->srcStageMask & (VK_PIPELINE_STAGE_TRANSFER_BIT |
|
||||||
|
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT))
|
||||||
|
si_cp_dma_wait_for_idle(cmd_buffer);
|
||||||
|
|
||||||
cmd_buffer->state.flush_bits |= dst_flush_bits;
|
cmd_buffer->state.flush_bits |= dst_flush_bits;
|
||||||
}
|
}
|
||||||
|
|
@ -4553,7 +4555,9 @@ static void write_event(struct radv_cmd_buffer *cmd_buffer,
|
||||||
/* Make sure CP DMA is idle because the driver might have performed a
|
/* Make sure CP DMA is idle because the driver might have performed a
|
||||||
* DMA operation for copying or filling buffers/images.
|
* DMA operation for copying or filling buffers/images.
|
||||||
*/
|
*/
|
||||||
si_cp_dma_wait_for_idle(cmd_buffer);
|
if (stageMask & (VK_PIPELINE_STAGE_TRANSFER_BIT |
|
||||||
|
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT))
|
||||||
|
si_cp_dma_wait_for_idle(cmd_buffer);
|
||||||
|
|
||||||
/* TODO: Emit EOS events for syncing PS/CS stages. */
|
/* TODO: Emit EOS events for syncing PS/CS stages. */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue