@@ -7461,6 +7461,28 @@ static void STDMETHODCALLTYPE d3d12_command_list_Dispatch(d3d12_command_list_ifa
74617461 d3d12_command_list_check_compute_barrier(list);
74627462}
74637463
7464+ static void d3d12_command_list_full_transfer_barrier(struct d3d12_command_list *list)
7465+ {
7466+ const struct vkd3d_vk_device_procs *vk_procs = &list->device->vk_procs;
7467+ VkMemoryBarrier2 vk_barrier;
7468+ VkDependencyInfo dep_info;
7469+
7470+ memset(&vk_barrier, 0, sizeof(vk_barrier));
7471+ memset(&dep_info, 0, sizeof(dep_info));
7472+ vk_barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2;
7473+
7474+ dep_info.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO;
7475+ dep_info.memoryBarrierCount = 1;
7476+ dep_info.pMemoryBarriers = &vk_barrier;
7477+ vk_barrier.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT;
7478+ vk_barrier.srcAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT;
7479+ vk_barrier.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT;
7480+ vk_barrier.dstAccessMask = VK_ACCESS_2_MEMORY_WRITE_BIT | VK_ACCESS_2_MEMORY_READ_BIT;
7481+
7482+ VK_CALL(vkCmdPipelineBarrier2(list->cmd.vk_command_buffer, &dep_info));
7483+ d3d12_command_list_debug_mark_barrier(list, &dep_info);
7484+ }
7485+
74647486static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(d3d12_command_list_iface *iface,
74657487 ID3D12Resource *dst, UINT64 dst_offset, ID3D12Resource *src, UINT64 src_offset, UINT64 byte_count)
74667488{
@@ -7515,6 +7537,12 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyBufferRegion(d3d12_command_
75157537 d3d12_command_list_debug_mark_execution(list, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT);
75167538 VK_CALL(vkCmdCopyBuffer2(list->cmd.vk_command_buffer, ©_info));
75177539
7540+ if (vkd3d_config_flags & VKD3D_CONFIG_FLAG_COPY_BUFFER_SYNC)
7541+ {
7542+ list->tracked_copy_buffer_count = 0;
7543+ d3d12_command_list_full_transfer_barrier(list);
7544+ }
7545+
75187546 VKD3D_BREADCRUMB_COMMAND(COPY);
75197547}
75207548
@@ -8428,6 +8456,12 @@ static void STDMETHODCALLTYPE d3d12_command_list_CopyResource(d3d12_command_list
84288456 !!(dst_resource->flags & VKD3D_RESOURCE_RESERVED));
84298457 d3d12_command_list_debug_mark_execution(list, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT);
84308458 VK_CALL(vkCmdCopyBuffer2(list->cmd.vk_command_buffer, ©_info));
8459+
8460+ if (vkd3d_config_flags & VKD3D_CONFIG_FLAG_COPY_BUFFER_SYNC)
8461+ {
8462+ list->tracked_copy_buffer_count = 0;
8463+ d3d12_command_list_full_transfer_barrier(list);
8464+ }
84318465 }
84328466 else
84338467 {
0 commit comments