diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 954071e79..a07ba5e24 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -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); } diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index cef4bdd93..abbb6f32a 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -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 = ©Region; + + m_cmd->cmdCopyBuffer(cmdBuffer, ©Info); 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, ©Region); + VkCopyBufferInfo2 copyInfo = { VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 }; + copyInfo.srcBuffer = srcBufferSlice.handle; + copyInfo.dstBuffer = tmpBufferSlice.handle; + copyInfo.regionCount = 1; + copyInfo.pRegions = ©Region; + + m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer, ©Info); 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, ®ion); + VkCopyBufferInfo2 copyInfo = { VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 }; + copyInfo.srcBuffer = stagingHandle.handle; + copyInfo.dstBuffer = bufferSlice.handle; + copyInfo.regionCount = 1; + copyInfo.pRegions = ©Region; + + m_cmd->cmdCopyBuffer(DxvkCmdBuffer::SdmaBuffer, ©Info); m_sdmaBarriers.releaseBuffer( m_initBarriers, bufferSlice,