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:
parent
be24ca6099
commit
f85b9088d4
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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, ®ion);
|
1, ®ion);
|
||||||
@ -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, ©Region);
|
||||||
dstImageLayoutTransfer,
|
|
||||||
1, ©Region);
|
|
||||||
|
|
||||||
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, ©Region);
|
||||||
dstSlice.handle,
|
|
||||||
1, ©Region);
|
|
||||||
|
|
||||||
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, ®ion);
|
||||||
bufferSlice.handle,
|
|
||||||
1, ®ion);
|
|
||||||
|
|
||||||
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, ®ion);
|
stagingHandle.handle, image->handle(),
|
||||||
|
imageLayoutTransfer, 1, ®ion);
|
||||||
|
|
||||||
// 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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user