1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-20 19:54:19 +01:00

[dxvk] Use copy_commands2 functions for buffer copies

This commit is contained in:
Philip Rebohle 2022-07-19 14:19:41 +02:00
parent f39d49772d
commit dc1d82deff
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 32 additions and 23 deletions

View File

@ -381,15 +381,10 @@ namespace dxvk {
void cmdCopyBuffer(
DxvkCmdBuffer cmdBuffer,
VkBuffer srcBuffer,
VkBuffer dstBuffer,
uint32_t regionCount,
const VkBufferCopy* pRegions) {
const VkCopyBufferInfo2* copyInfo) {
m_cmdBuffersUsed.set(cmdBuffer);
m_vkd->vkCmdCopyBuffer(getCmdBuffer(cmdBuffer),
srcBuffer, dstBuffer,
regionCount, pRegions);
m_vkd->vkCmdCopyBuffer2(getCmdBuffer(cmdBuffer), copyInfo);
}

View File

@ -468,13 +468,18 @@ namespace dxvk {
? DxvkCmdBuffer::InitBuffer
: DxvkCmdBuffer::ExecBuffer;
VkBufferCopy bufferRegion;
bufferRegion.srcOffset = srcSlice.offset;
bufferRegion.dstOffset = dstSlice.offset;
bufferRegion.size = dstSlice.length;
VkBufferCopy2 copyRegion = { VK_STRUCTURE_TYPE_BUFFER_COPY_2 };
copyRegion.srcOffset = srcSlice.offset;
copyRegion.dstOffset = dstSlice.offset;
copyRegion.size = dstSlice.length;
m_cmd->cmdCopyBuffer(cmdBuffer,
srcSlice.handle, dstSlice.handle, 1, &bufferRegion);
VkCopyBufferInfo2 copyInfo = { VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 };
copyInfo.srcBuffer = srcSlice.handle;
copyInfo.dstBuffer = dstSlice.handle;
copyInfo.regionCount = 1;
copyInfo.pRegions = &copyRegion;
m_cmd->cmdCopyBuffer(cmdBuffer, &copyInfo);
auto& barriers = replaceBuffer
? m_initBarriers
@ -941,14 +946,18 @@ namespace dxvk {
auto tmpBufferSlice = tmpBuffer->getSliceHandle();
VkBufferCopy copyRegion;
VkBufferCopy2 copyRegion = { VK_STRUCTURE_TYPE_BUFFER_COPY_2 };
copyRegion.srcOffset = srcBufferSlice.offset;
copyRegion.dstOffset = tmpBufferSlice.offset;
copyRegion.size = tmpBufferSlice.length;
m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer,
srcBufferSlice.handle, tmpBufferSlice.handle,
1, &copyRegion);
VkCopyBufferInfo2 copyInfo = { VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 };
copyInfo.srcBuffer = srcBufferSlice.handle;
copyInfo.dstBuffer = tmpBufferSlice.handle;
copyInfo.regionCount = 1;
copyInfo.pRegions = &copyRegion;
m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer, &copyInfo);
emitMemoryBarrier(
VK_PIPELINE_STAGE_TRANSFER_BIT,
@ -2222,13 +2231,18 @@ namespace dxvk {
auto stagingHandle = stagingSlice.getSliceHandle();
std::memcpy(stagingHandle.mapPtr, data, bufferSlice.length);
VkBufferCopy region;
region.srcOffset = stagingHandle.offset;
region.dstOffset = bufferSlice.offset;
region.size = bufferSlice.length;
VkBufferCopy2 copyRegion = { VK_STRUCTURE_TYPE_BUFFER_COPY_2 };
copyRegion.srcOffset = stagingHandle.offset;
copyRegion.dstOffset = bufferSlice.offset;
copyRegion.size = bufferSlice.length;
m_cmd->cmdCopyBuffer(DxvkCmdBuffer::SdmaBuffer,
stagingHandle.handle, bufferSlice.handle, 1, &region);
VkCopyBufferInfo2 copyInfo = { VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 };
copyInfo.srcBuffer = stagingHandle.handle;
copyInfo.dstBuffer = bufferSlice.handle;
copyInfo.regionCount = 1;
copyInfo.pRegions = &copyRegion;
m_cmd->cmdCopyBuffer(DxvkCmdBuffer::SdmaBuffer, &copyInfo);
m_sdmaBarriers.releaseBuffer(
m_initBarriers, bufferSlice,