@@ -7451,6 +7451,28 @@ static void STDMETHODCALLTYPE d3d12_command_list_Dispatch(d3d12_command_list_ifa
74517451 d3d12_command_list_check_compute_barrier(list);
74527452}
74537453
7454+ static void d3d12_command_list_full_transfer_barrier(struct d3d12_command_list *list)
7455+ {
7456+ const struct vkd3d_vk_device_procs *vk_procs = &list->device->vk_procs;
7457+ VkMemoryBarrier2 vk_barrier;
7458+ VkDependencyInfo dep_info;
7459+
7460+ memset(&vk_barrier, 0, sizeof(vk_barrier));
7461+ memset(&dep_info, 0, sizeof(dep_info));
7462+ vk_barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2;
7463+
7464+ dep_info.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO;
7465+ dep_info.memoryBarrierCount = 1;
7466+ dep_info.pMemoryBarriers = &vk_barrier;
7467+ vk_barrier.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT;
7468+ vk_barrier.srcAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT;
7469+ vk_barrier.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT;
7470+ vk_barrier.dstAccessMask = VK_ACCESS_2_MEMORY_WRITE_BIT | VK_ACCESS_2_MEMORY_READ_BIT;
7471+
7472+ VK_CALL(vkCmdPipelineBarrier2(list->cmd.vk_command_buffer, &dep_info));
7473+ d3d12_command_list_debug_mark_barrier(list, &dep_info);
7474+ }
7475+
74547476static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(d3d12_command_list_iface *iface,
74557477 ID3D12Resource *dst, UINT64 dst_offset, ID3D12Resource *src, UINT64 src_offset, UINT64 byte_count)
74567478{
@@ -7505,6 +7527,12 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(d3d12_command_
75057527 d3d12_command_list_debug_mark_execution(list, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT);
75067528 VK_CALL(vkCmdCopyBuffer2(list->cmd.vk_command_buffer, ©_info));
75077529
7530+ if (vkd3d_config_flags & VKD3D_CONFIG_FLAG_COPY_BUFFER_SYNC)
7531+ {
7532+ list->tracked_copy_buffer_count = 0;
7533+ d3d12_command_list_full_transfer_barrier(list);
7534+ }
7535+
75087536 VKD3D_BREADCRUMB_COMMAND(COPY);
75097537}
75107538
@@ -8418,6 +8446,12 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyResource(d3d12_command_list
84188446 !!(dst_resource->flags & VKD3D_RESOURCE_RESERVED));
84198447 d3d12_command_list_debug_mark_execution(list, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT);
84208448 VK_CALL(vkCmdCopyBuffer2(list->cmd.vk_command_buffer, ©_info));
8449+
8450+ if (vkd3d_config_flags & VKD3D_CONFIG_FLAG_COPY_BUFFER_SYNC)
8451+ {
8452+ list->tracked_copy_buffer_count = 0;
8453+ d3d12_command_list_full_transfer_barrier(list);
8454+ }
84218455 }
84228456 else
84238457 {
0 commit comments