From 70bd4fe621df70bff7dde390a4914d2b9be1e4ba Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 11 Feb 2025 12:47:40 +0100 Subject: [PATCH] radv/meta: pass the buffer addr to SDMA image buffer copy operations Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/meta/radv_meta_copy.c | 8 ++++---- src/amd/vulkan/radv_sdma.c | 7 +++---- src/amd/vulkan/radv_sdma.h | 3 +-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/amd/vulkan/meta/radv_meta_copy.c b/src/amd/vulkan/meta/radv_meta_copy.c index 810f2bdd6e6..196b4a7202f 100644 --- a/src/amd/vulkan/meta/radv_meta_copy.c +++ b/src/amd/vulkan/meta/radv_meta_copy.c @@ -75,14 +75,14 @@ alloc_transfer_temp_bo(struct radv_cmd_buffer *cmd_buffer) } static void -transfer_copy_buffer_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buffer, struct radv_image *image, +transfer_copy_buffer_image(struct radv_cmd_buffer *cmd_buffer, uint64_t buffer_va, struct radv_image *image, const VkBufferImageCopy2 *region, bool to_image) { const struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); struct radeon_cmdbuf *cs = cmd_buffer->cs; const VkImageAspectFlags aspect_mask = region->imageSubresource.aspectMask; - struct radv_sdma_surf buf = radv_sdma_get_buf_surf(buffer, image, region, aspect_mask); + struct radv_sdma_surf buf = radv_sdma_get_buf_surf(buffer_va, image, region, aspect_mask); const struct radv_sdma_surf img = radv_sdma_get_surf(device, image, region->imageSubresource, region->imageOffset, aspect_mask); const VkExtent3D extent = radv_sdma_get_copy_extent(image, region->imageSubresource, region->imageExtent); @@ -103,7 +103,7 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf VkImageLayout layout, const VkBufferImageCopy2 *region) { if (cmd_buffer->qf == RADV_QUEUE_TRANSFER) { - transfer_copy_buffer_image(cmd_buffer, buffer, image, region, true); + transfer_copy_buffer_image(cmd_buffer, buffer->addr, image, region, true); return; } @@ -265,7 +265,7 @@ copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf { struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); if (cmd_buffer->qf == RADV_QUEUE_TRANSFER) { - transfer_copy_buffer_image(cmd_buffer, buffer, image, region, false); + transfer_copy_buffer_image(cmd_buffer, buffer->addr, image, region, false); return; } diff --git a/src/amd/vulkan/radv_sdma.c b/src/amd/vulkan/radv_sdma.c index de1bc0e4410..1f9a2e5627e 100644 --- a/src/amd/vulkan/radv_sdma.c +++ b/src/amd/vulkan/radv_sdma.c @@ -10,7 +10,6 @@ #include "radv_sdma.h" #include "util/macros.h" #include "util/u_memory.h" -#include "radv_buffer.h" #include "radv_cs.h" #include "radv_formats.h" @@ -165,8 +164,8 @@ radv_sdma_get_bpe(const struct radv_image *const image, VkImageAspectFlags aspec } struct radv_sdma_surf -radv_sdma_get_buf_surf(const struct radv_buffer *const buffer, const struct radv_image *const image, - const VkBufferImageCopy2 *const region, const VkImageAspectFlags aspect_mask) +radv_sdma_get_buf_surf(uint64_t buffer_va, const struct radv_image *const image, const VkBufferImageCopy2 *const region, + const VkImageAspectFlags aspect_mask) { assert(util_bitcount(aspect_mask) == 1); @@ -179,7 +178,7 @@ radv_sdma_get_buf_surf(const struct radv_buffer *const buffer, const struct radv const uint32_t bpe = radv_sdma_get_bpe(image, region->imageSubresource.aspectMask); const struct radv_sdma_surf info = { - .va = buffer->addr + region->bufferOffset, + .va = buffer_va + region->bufferOffset, .pitch = pitch, .slice_pitch = slice_pitch, .bpp = bpe, diff --git a/src/amd/vulkan/radv_sdma.h b/src/amd/vulkan/radv_sdma.h index b845019ab5e..a60202f44ab 100644 --- a/src/amd/vulkan/radv_sdma.h +++ b/src/amd/vulkan/radv_sdma.h @@ -51,8 +51,7 @@ radv_sdma_get_copy_extent(const struct radv_image *const image, const VkImageSub return extent; } -struct radv_sdma_surf radv_sdma_get_buf_surf(const struct radv_buffer *const buffer, - const struct radv_image *const image, +struct radv_sdma_surf radv_sdma_get_buf_surf(uint64_t buffer_va, const struct radv_image *const image, const VkBufferImageCopy2 *const region, const VkImageAspectFlags aspect_mask); struct radv_sdma_surf radv_sdma_get_surf(const struct radv_device *const device, const struct radv_image *const image,