From 4840cdaf8c62f76a0f119ec041f73a30ba1dc8e4 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 22 Jun 2021 07:00:49 +0200 Subject: [PATCH] [dxvk] Add slice alignment to copyBufferToImage --- src/d3d11/d3d11_context.cpp | 2 +- src/d3d11/d3d11_context_def.cpp | 2 +- src/d3d11/d3d11_context_imm.cpp | 2 +- src/d3d9/d3d9_device.cpp | 6 +++--- src/dxvk/dxvk_context.cpp | 5 +++-- src/dxvk/dxvk_context.h | 4 +++- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index bc11fe69..e7ffd7d6 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -1243,7 +1243,7 @@ namespace dxvk { ctx->copyBufferToImage(cDstImage, cDstLayers, cDstOffset, cDstExtent, cStagingSlice.buffer(), - cStagingSlice.offset(), 0); + cStagingSlice.offset(), 0, 0); } else { ctx->copyPackedBufferToDepthStencilImage(cDstImage, cDstLayers, VkOffset2D { cDstOffset.x, cDstOffset.y }, diff --git a/src/d3d11/d3d11_context_def.cpp b/src/d3d11/d3d11_context_def.cpp index e7174f23..ff2b440f 100644 --- a/src/d3d11/d3d11_context_def.cpp +++ b/src/d3d11/d3d11_context_def.cpp @@ -363,7 +363,7 @@ namespace dxvk { ctx->copyBufferToImage(cDstImage, dstLayers, dstOffset, dstExtent, cStagingSlice.buffer(), - cStagingSlice.offset(), 0); + cStagingSlice.offset(), 0, 0); } else { ctx->copyPackedBufferToDepthStencilImage( cDstImage, dstLayers, diff --git a/src/d3d11/d3d11_context_imm.cpp b/src/d3d11/d3d11_context_imm.cpp index 51d30786..43517c53 100644 --- a/src/d3d11/d3d11_context_imm.cpp +++ b/src/d3d11/d3d11_context_imm.cpp @@ -523,7 +523,7 @@ namespace dxvk { if (cPackedFormat == VK_FORMAT_UNDEFINED) { ctx->copyBufferToImage(cDstImage, cDstLayers, VkOffset3D { 0, 0, 0 }, cDstLevelExtent, - cSrcBuffer, 0, 0); + cSrcBuffer, 0, 0, 0); } else { ctx->copyPackedBufferToDepthStencilImage( cDstImage, cDstLayers, diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 13b5dbaf..83c005bf 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -707,7 +707,7 @@ namespace dxvk { ] (DxvkContext* ctx) { ctx->copyBufferToImage( cDstImage, cDstLayers, cDstOffset, cCopyExtent, - cSrcSlice.buffer(), cSrcSlice.offset(), 0); + cSrcSlice.buffer(), cSrcSlice.offset(), 0, 0); }); dstTextureInfo->SetWrittenByGPU(dst->GetSubresource(), true); @@ -800,7 +800,7 @@ namespace dxvk { ctx->copyBufferToImage( cDstImage, cDstLayers, cOffset, cExtent, - cSrcSlice.buffer(), cSrcSlice.offset(), 0); + cSrcSlice.buffer(), cSrcSlice.offset(), 0, 0); }); dstTexInfo->SetWrittenByGPU(dstTexInfo->CalcSubresource(a, m), true); @@ -4359,7 +4359,7 @@ namespace dxvk { ctx->copyBufferToImage( cDstImage, cDstLayers, cOffset, cDstLevelExtent, - cSrcSlice.buffer(), cSrcSlice.offset(), 0); + cSrcSlice.buffer(), cSrcSlice.offset(), 0, 0); }); } else { diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 1fe2d216..9cc8b748 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -726,7 +726,8 @@ namespace dxvk { VkExtent3D dstExtent, const Rc& srcBuffer, VkDeviceSize srcOffset, - VkDeviceSize rowAlignment) { + VkDeviceSize rowAlignment, + VkDeviceSize sliceAlignment) { this->spillRenderPass(true); this->prepareImage(m_execBarriers, dstImage, vk::makeSubresourceRange(dstSubresource)); @@ -763,7 +764,7 @@ namespace dxvk { m_execAcquires.recordCommands(m_cmd); this->copyImageBufferData(DxvkCmdBuffer::ExecBuffer, dstImage, dstSubresource, - dstOffset, dstExtent, dstImageLayoutTransfer, srcSlice, rowAlignment, 0); + dstOffset, dstExtent, dstImageLayoutTransfer, srcSlice, rowAlignment, sliceAlignment); m_execBarriers.accessImage( dstImage, dstSubresourceRange, diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 61dc8fd0..268c6cbb 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -349,6 +349,7 @@ namespace dxvk { * \param [in] srcBuffer Source buffer * \param [in] srcOffset Source offset, in bytes * \param [in] rowAlignment Row alignment, in bytes + * \param [in] sliceAlignment Slice alignment, in bytes */ void copyBufferToImage( const Rc& dstImage, @@ -357,7 +358,8 @@ namespace dxvk { VkExtent3D dstExtent, const Rc& srcBuffer, VkDeviceSize srcOffset, - VkDeviceSize rowAlignment); + VkDeviceSize rowAlignment, + VkDeviceSize sliceAlignment); /** * \brief Copies data from one image to another