1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-02 04:29:14 +01:00

[dxvk] Explicitly specify the command buffer for copy commands

This commit is contained in:
Philip Rebohle 2019-06-28 03:19:14 +02:00
parent be24ca6099
commit f85b9088d4
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 32 additions and 27 deletions

View File

@ -379,36 +379,45 @@ namespace dxvk {
void cmdCopyBuffer( void cmdCopyBuffer(
DxvkCmdBuffer cmdBuffer,
VkBuffer srcBuffer, VkBuffer srcBuffer,
VkBuffer dstBuffer, VkBuffer dstBuffer,
uint32_t regionCount, uint32_t regionCount,
const VkBufferCopy* pRegions) { const VkBufferCopy* pRegions) {
m_vkd->vkCmdCopyBuffer(m_execBuffer, m_cmdBuffersUsed.set(cmdBuffer);
m_vkd->vkCmdCopyBuffer(getCmdBuffer(cmdBuffer),
srcBuffer, dstBuffer, srcBuffer, dstBuffer,
regionCount, pRegions); regionCount, pRegions);
} }
void cmdCopyBufferToImage( void cmdCopyBufferToImage(
DxvkCmdBuffer cmdBuffer,
VkBuffer srcBuffer, VkBuffer srcBuffer,
VkImage dstImage, VkImage dstImage,
VkImageLayout dstImageLayout, VkImageLayout dstImageLayout,
uint32_t regionCount, uint32_t regionCount,
const VkBufferImageCopy* pRegions) { const VkBufferImageCopy* pRegions) {
m_vkd->vkCmdCopyBufferToImage(m_execBuffer, m_cmdBuffersUsed.set(cmdBuffer);
m_vkd->vkCmdCopyBufferToImage(getCmdBuffer(cmdBuffer),
srcBuffer, dstImage, dstImageLayout, srcBuffer, dstImage, dstImageLayout,
regionCount, pRegions); regionCount, pRegions);
} }
void cmdCopyImage( void cmdCopyImage(
DxvkCmdBuffer cmdBuffer,
VkImage srcImage, VkImage srcImage,
VkImageLayout srcImageLayout, VkImageLayout srcImageLayout,
VkImage dstImage, VkImage dstImage,
VkImageLayout dstImageLayout, VkImageLayout dstImageLayout,
uint32_t regionCount, uint32_t regionCount,
const VkImageCopy* pRegions) { const VkImageCopy* pRegions) {
m_vkd->vkCmdCopyImage(m_execBuffer, m_cmdBuffersUsed.set(cmdBuffer);
m_vkd->vkCmdCopyImage(getCmdBuffer(cmdBuffer),
srcImage, srcImageLayout, srcImage, srcImageLayout,
dstImage, dstImageLayout, dstImage, dstImageLayout,
regionCount, pRegions); regionCount, pRegions);
@ -416,12 +425,15 @@ namespace dxvk {
void cmdCopyImageToBuffer( void cmdCopyImageToBuffer(
DxvkCmdBuffer cmdBuffer,
VkImage srcImage, VkImage srcImage,
VkImageLayout srcImageLayout, VkImageLayout srcImageLayout,
VkBuffer dstBuffer, VkBuffer dstBuffer,
uint32_t regionCount, uint32_t regionCount,
const VkBufferImageCopy* pRegions) { const VkBufferImageCopy* pRegions) {
m_vkd->vkCmdCopyImageToBuffer(m_execBuffer, m_cmdBuffersUsed.set(cmdBuffer);
m_vkd->vkCmdCopyImageToBuffer(getCmdBuffer(cmdBuffer),
srcImage, srcImageLayout, dstBuffer, srcImage, srcImageLayout, dstBuffer,
regionCount, pRegions); regionCount, pRegions);
} }

View File

@ -623,7 +623,7 @@ namespace dxvk {
region.imageOffset = offset; region.imageOffset = offset;
region.imageExtent = extent; region.imageExtent = extent;
m_cmd->cmdCopyBufferToImage( m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer,
stagingHandle.handle, image->handle(), stagingHandle.handle, image->handle(),
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
1, &region); 1, &region);
@ -837,10 +837,8 @@ namespace dxvk {
bufferRegion.dstOffset = dstSlice.offset; bufferRegion.dstOffset = dstSlice.offset;
bufferRegion.size = dstSlice.length; bufferRegion.size = dstSlice.length;
m_cmd->cmdCopyBuffer( m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer,
srcSlice.handle, srcSlice.handle, dstSlice.handle, 1, &bufferRegion);
dstSlice.handle,
1, &bufferRegion);
m_execBarriers.accessBuffer(srcSlice, m_execBarriers.accessBuffer(srcSlice,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
@ -936,11 +934,9 @@ namespace dxvk {
copyRegion.imageOffset = dstOffset; copyRegion.imageOffset = dstOffset;
copyRegion.imageExtent = dstExtent; copyRegion.imageExtent = dstExtent;
m_cmd->cmdCopyBufferToImage( m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer,
srcSlice.handle, srcSlice.handle, dstImage->handle(),
dstImage->handle(), dstImageLayoutTransfer, 1, &copyRegion);
dstImageLayoutTransfer,
1, &copyRegion);
m_execBarriers.accessImage( m_execBarriers.accessImage(
dstImage, dstSubresourceRange, dstImage, dstSubresourceRange,
@ -1095,11 +1091,9 @@ namespace dxvk {
copyRegion.imageOffset = srcOffset; copyRegion.imageOffset = srcOffset;
copyRegion.imageExtent = srcExtent; copyRegion.imageExtent = srcExtent;
m_cmd->cmdCopyImageToBuffer( m_cmd->cmdCopyImageToBuffer(DxvkCmdBuffer::ExecBuffer,
srcImage->handle(), srcImage->handle(), srcImageLayoutTransfer,
srcImageLayoutTransfer, dstSlice.handle, 1, &copyRegion);
dstSlice.handle,
1, &copyRegion);
m_execBarriers.accessImage( m_execBarriers.accessImage(
srcImage, srcSubresourceRange, srcImage, srcSubresourceRange,
@ -1382,7 +1376,7 @@ namespace dxvk {
{ tmpBufferViewS->info().rangeOffset, 0, 0, dstSubresourceS, dstOffset3D, dstExtent3D }, { tmpBufferViewS->info().rangeOffset, 0, 0, dstSubresourceS, dstOffset3D, dstExtent3D },
}}; }};
m_cmd->cmdCopyBufferToImage( m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer,
tmpBuffer->getSliceHandle().handle, tmpBuffer->getSliceHandle().handle,
dstImage->handle(), dstImage->handle(),
dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
@ -1916,10 +1910,8 @@ namespace dxvk {
region.dstOffset = bufferSlice.offset; region.dstOffset = bufferSlice.offset;
region.size = size; region.size = size;
m_cmd->cmdCopyBuffer( m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer,
stagingHandle.handle, stagingHandle.handle, bufferSlice.handle, 1, &region);
bufferSlice.handle,
1, &region);
m_cmd->trackResource(stagingSlice.buffer()); m_cmd->trackResource(stagingSlice.buffer());
} }
@ -2005,8 +1997,9 @@ namespace dxvk {
region.imageOffset = imageOffset; region.imageOffset = imageOffset;
region.imageExtent = imageExtent; region.imageExtent = imageExtent;
m_cmd->cmdCopyBufferToImage(stagingHandle.handle, m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::ExecBuffer,
image->handle(), imageLayoutTransfer, 1, &region); stagingHandle.handle, image->handle(),
imageLayoutTransfer, 1, &region);
// Transition image back into its optimal layout // Transition image back into its optimal layout
m_execBarriers.accessImage( m_execBarriers.accessImage(
@ -2544,7 +2537,7 @@ namespace dxvk {
imageRegion.dstOffset = dstOffset; imageRegion.dstOffset = dstOffset;
imageRegion.extent = extent; imageRegion.extent = extent;
m_cmd->cmdCopyImage( m_cmd->cmdCopyImage(DxvkCmdBuffer::ExecBuffer,
srcImage->handle(), srcImageLayout, srcImage->handle(), srcImageLayout,
dstImage->handle(), dstImageLayout, dstImage->handle(), dstImageLayout,
1, &imageRegion); 1, &imageRegion);