From ba4938e20173bbf3a89e4d81a4797be412ce0e63 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 22 Jun 2021 07:03:52 +0200 Subject: [PATCH] [dxvk] Add slice alignment to copyImageToBuffer --- src/d3d11/d3d11_context.cpp | 2 +- src/d3d9/d3d9_device.cpp | 4 ++-- src/d3d9/d3d9_swapchain.cpp | 2 +- src/dxvk/dxvk_context.cpp | 3 ++- src/dxvk/dxvk_context.h | 3 +++ 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index e7ffd7d6..77a855db 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -4052,7 +4052,7 @@ namespace dxvk { cPackedFormat = packedFormat ] (DxvkContext* ctx) { if (cSubresources.aspectMask != (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { - ctx->copyImageToBuffer(cImageBuffer, 0, 0, + ctx->copyImageToBuffer(cImageBuffer, 0, 0, 0, cImage, cSubresources, VkOffset3D { 0, 0, 0 }, cLevelExtent); } else { diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 83c005bf..72da14b0 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -866,7 +866,7 @@ namespace dxvk { cLevelExtent = srcExtent, cDstExtent = dstExtent ] (DxvkContext* ctx) { - ctx->copyImageToBuffer(cBuffer, 0, 4, + ctx->copyImageToBuffer(cBuffer, 0, 4, 0, cImage, cSubresources, VkOffset3D { 0, 0, 0 }, cLevelExtent); }); @@ -4166,7 +4166,7 @@ namespace dxvk { cPackedFormat = packedFormat ] (DxvkContext* ctx) { if (cSubresources.aspectMask != (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { - ctx->copyImageToBuffer(cImageBuffer, 0, 0, + ctx->copyImageToBuffer(cImageBuffer, 0, 0, 0, cImage, cSubresources, VkOffset3D { 0, 0, 0 }, cLevelExtent); } else { diff --git a/src/d3d9/d3d9_swapchain.cpp b/src/d3d9/d3d9_swapchain.cpp index 35a522bd..eaf4885f 100644 --- a/src/d3d9/d3d9_swapchain.cpp +++ b/src/d3d9/d3d9_swapchain.cpp @@ -456,7 +456,7 @@ namespace dxvk { cSubresources = srcSubresourceLayers, cLevelExtent = srcExtent ] (DxvkContext* ctx) { - ctx->copyImageToBuffer(cBuffer, 0, 0, + ctx->copyImageToBuffer(cBuffer, 0, 0, 0, cImage, cSubresources, VkOffset3D { 0, 0, 0 }, cLevelExtent); }); diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 9cc8b748..ec186e49 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -894,6 +894,7 @@ namespace dxvk { const Rc& dstBuffer, VkDeviceSize dstOffset, VkDeviceSize rowAlignment, + VkDeviceSize sliceAlignment, const Rc& srcImage, VkImageSubresourceLayers srcSubresource, VkOffset3D srcOffset, @@ -928,7 +929,7 @@ namespace dxvk { m_execAcquires.recordCommands(m_cmd); this->copyImageBufferData(DxvkCmdBuffer::ExecBuffer, srcImage, srcSubresource, - srcOffset, srcExtent, srcImageLayoutTransfer, dstSlice, rowAlignment, 0); + srcOffset, srcExtent, srcImageLayoutTransfer, dstSlice, rowAlignment, sliceAlignment); m_execBarriers.accessImage( srcImage, srcSubresourceRange, diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 268c6cbb..21456ae1 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -403,6 +403,8 @@ namespace dxvk { * \param [in] dstBuffer Destination buffer * \param [in] dstOffset Destination offset, in bytes * \param [in] dstExtent Destination data extent + * \param [in] rowAlignment Row alignment, in bytes + * \param [in] sliceAlignment Slice alignment, in bytes * \param [in] srcImage Source image * \param [in] srcSubresource Source subresource * \param [in] srcOffset Source area offset @@ -412,6 +414,7 @@ namespace dxvk { const Rc& dstBuffer, VkDeviceSize dstOffset, VkDeviceSize rowAlignment, + VkDeviceSize sliceAlignment, const Rc& srcImage, VkImageSubresourceLayers srcSubresource, VkOffset3D srcOffset,