diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 4403d1acd..71d99fcb1 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -379,36 +379,45 @@ namespace dxvk { void cmdCopyBuffer( + DxvkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) { - m_vkd->vkCmdCopyBuffer(m_execBuffer, + m_cmdBuffersUsed.set(cmdBuffer); + + m_vkd->vkCmdCopyBuffer(getCmdBuffer(cmdBuffer), srcBuffer, dstBuffer, regionCount, pRegions); } void cmdCopyBufferToImage( + DxvkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) { - m_vkd->vkCmdCopyBufferToImage(m_execBuffer, + m_cmdBuffersUsed.set(cmdBuffer); + + m_vkd->vkCmdCopyBufferToImage(getCmdBuffer(cmdBuffer), srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); } void cmdCopyImage( + DxvkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) { - m_vkd->vkCmdCopyImage(m_execBuffer, + m_cmdBuffersUsed.set(cmdBuffer); + + m_vkd->vkCmdCopyImage(getCmdBuffer(cmdBuffer), srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); @@ -416,12 +425,15 @@ namespace dxvk { void cmdCopyImageToBuffer( + DxvkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) { - m_vkd->vkCmdCopyImageToBuffer(m_execBuffer, + m_cmdBuffersUsed.set(cmdBuffer); + + m_vkd->vkCmdCopyImageToBuffer(getCmdBuffer(cmdBuffer), srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); } diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 760595f24..8a9d5c0a5 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -623,7 +623,7 @@ namespace dxvk { region.imageOffset = offset; region.imageExtent = extent; - m_cmd->cmdCopyBufferToImage( + m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer, stagingHandle.handle, image->handle(), image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), 1, ®ion); @@ -837,10 +837,8 @@ namespace dxvk { bufferRegion.dstOffset = dstSlice.offset; bufferRegion.size = dstSlice.length; - m_cmd->cmdCopyBuffer( - srcSlice.handle, - dstSlice.handle, - 1, &bufferRegion); + m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer, + srcSlice.handle, dstSlice.handle, 1, &bufferRegion); m_execBarriers.accessBuffer(srcSlice, VK_PIPELINE_STAGE_TRANSFER_BIT, @@ -936,11 +934,9 @@ namespace dxvk { copyRegion.imageOffset = dstOffset; copyRegion.imageExtent = dstExtent; - m_cmd->cmdCopyBufferToImage( - srcSlice.handle, - dstImage->handle(), - dstImageLayoutTransfer, - 1, ©Region); + m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer, + srcSlice.handle, dstImage->handle(), + dstImageLayoutTransfer, 1, ©Region); m_execBarriers.accessImage( dstImage, dstSubresourceRange, @@ -1095,11 +1091,9 @@ namespace dxvk { copyRegion.imageOffset = srcOffset; copyRegion.imageExtent = srcExtent; - m_cmd->cmdCopyImageToBuffer( - srcImage->handle(), - srcImageLayoutTransfer, - dstSlice.handle, - 1, ©Region); + m_cmd->cmdCopyImageToBuffer(DxvkCmdBuffer::ExecBuffer, + srcImage->handle(), srcImageLayoutTransfer, + dstSlice.handle, 1, ©Region); m_execBarriers.accessImage( srcImage, srcSubresourceRange, @@ -1382,7 +1376,7 @@ namespace dxvk { { tmpBufferViewS->info().rangeOffset, 0, 0, dstSubresourceS, dstOffset3D, dstExtent3D }, }}; - m_cmd->cmdCopyBufferToImage( + m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer, tmpBuffer->getSliceHandle().handle, dstImage->handle(), dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), @@ -1916,10 +1910,8 @@ namespace dxvk { region.dstOffset = bufferSlice.offset; region.size = size; - m_cmd->cmdCopyBuffer( - stagingHandle.handle, - bufferSlice.handle, - 1, ®ion); + m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer, + stagingHandle.handle, bufferSlice.handle, 1, ®ion); m_cmd->trackResource(stagingSlice.buffer()); } @@ -2005,8 +1997,9 @@ namespace dxvk { region.imageOffset = imageOffset; region.imageExtent = imageExtent; - m_cmd->cmdCopyBufferToImage(stagingHandle.handle, - image->handle(), imageLayoutTransfer, 1, ®ion); + m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer, + stagingHandle.handle, image->handle(), + imageLayoutTransfer, 1, ®ion); // Transition image back into its optimal layout m_execBarriers.accessImage( @@ -2544,7 +2537,7 @@ namespace dxvk { imageRegion.dstOffset = dstOffset; imageRegion.extent = extent; - m_cmd->cmdCopyImage( + m_cmd->cmdCopyImage(DxvkCmdBuffer::ExecBuffer, srcImage->handle(), srcImageLayout, dstImage->handle(), dstImageLayout, 1, &imageRegion);