Module: Mesa Branch: main Commit: 11cad58125bbdb3f8e4d52696a04b3bb88e8002c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=11cad58125bbdb3f8e4d52696a04b3bb88e8002c
Author: Jesse Natalie <[email protected]> Date: Fri Apr 21 08:43:52 2023 -0700 dzn: Use unrestricted copy alignments when available Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22639> --- src/microsoft/vulkan/dzn_cmd_buffer.c | 8 ++++++-- src/microsoft/vulkan/dzn_device.c | 5 ++++- src/microsoft/vulkan/dzn_private.h | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/microsoft/vulkan/dzn_cmd_buffer.c b/src/microsoft/vulkan/dzn_cmd_buffer.c index 283cb28b372..794f2111bf6 100644 --- a/src/microsoft/vulkan/dzn_cmd_buffer.c +++ b/src/microsoft/vulkan/dzn_cmd_buffer.c @@ -2390,6 +2390,8 @@ dzn_cmd_buffer_copy_buf2img_region(struct dzn_cmd_buffer *cmdbuf, { VK_FROM_HANDLE(dzn_buffer, src_buffer, info->srcBuffer); VK_FROM_HANDLE(dzn_image, dst_image, info->dstImage); + struct dzn_physical_device *pdev = + container_of(cmdbuf->vk.base.device->physical, struct dzn_physical_device, vk); ID3D12GraphicsCommandList1 *cmdlist = cmdbuf->cmdlist; @@ -2409,7 +2411,7 @@ dzn_cmd_buffer_copy_buf2img_region(struct dzn_cmd_buffer *cmdbuf, D3D12_TEXTURE_COPY_LOCATION src_buf_loc = dzn_buffer_get_copy_loc(src_buffer, dst_image->vk.format, ®ion, aspect, l); - if (dzn_buffer_supports_region_copy(&src_buf_loc)) { + if (dzn_buffer_supports_region_copy(pdev, &src_buf_loc)) { /* RowPitch and Offset are properly aligned, we can copy * the whole thing in one call. */ @@ -2469,6 +2471,8 @@ dzn_cmd_buffer_copy_img2buf_region(struct dzn_cmd_buffer *cmdbuf, { VK_FROM_HANDLE(dzn_image, src_image, info->srcImage); VK_FROM_HANDLE(dzn_buffer, dst_buffer, info->dstBuffer); + struct dzn_physical_device *pdev = + container_of(cmdbuf->vk.base.device->physical, struct dzn_physical_device, vk); ID3D12GraphicsCommandList1 *cmdlist = cmdbuf->cmdlist; @@ -2488,7 +2492,7 @@ dzn_cmd_buffer_copy_img2buf_region(struct dzn_cmd_buffer *cmdbuf, D3D12_TEXTURE_COPY_LOCATION dst_buf_loc = dzn_buffer_get_copy_loc(dst_buffer, src_image->vk.format, ®ion, aspect, l); - if (dzn_buffer_supports_region_copy(&dst_buf_loc)) { + if (dzn_buffer_supports_region_copy(pdev, &dst_buf_loc)) { /* RowPitch and Offset are properly aligned on 256 bytes, we can copy * the whole thing in one call. */ diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c index a22385845c3..d988d50d220 100644 --- a/src/microsoft/vulkan/dzn_device.c +++ b/src/microsoft/vulkan/dzn_device.c @@ -2954,8 +2954,11 @@ dzn_buffer_get_line_copy_loc(const struct dzn_buffer *buf, VkFormat format, } bool -dzn_buffer_supports_region_copy(const D3D12_TEXTURE_COPY_LOCATION *loc) +dzn_buffer_supports_region_copy(struct dzn_physical_device *pdev, + const D3D12_TEXTURE_COPY_LOCATION *loc) { + if (pdev->options13.UnrestrictedBufferTextureCopyPitchSupported) + return true; return !(loc->PlacedFootprint.Offset & (D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT - 1)) && !(loc->PlacedFootprint.Footprint.RowPitch & (D3D12_TEXTURE_DATA_PITCH_ALIGNMENT - 1)); } diff --git a/src/microsoft/vulkan/dzn_private.h b/src/microsoft/vulkan/dzn_private.h index 56f09709845..946bf2735ac 100644 --- a/src/microsoft/vulkan/dzn_private.h +++ b/src/microsoft/vulkan/dzn_private.h @@ -1164,7 +1164,8 @@ dzn_buffer_get_line_copy_loc(const struct dzn_buffer *buf, VkFormat format, uint32_t y, uint32_t z, uint32_t *start_x); bool -dzn_buffer_supports_region_copy(const D3D12_TEXTURE_COPY_LOCATION *loc); +dzn_buffer_supports_region_copy(struct dzn_physical_device *pdev, + const D3D12_TEXTURE_COPY_LOCATION *loc); struct dzn_buffer_view { struct vk_object_base base;
