radv/meta: pass the buffer addr to SDMA image buffer copy operations

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33526>
This commit is contained in:
Samuel Pitoiset
2025-02-11 12:47:40 +01:00
parent 6e2da49e92
commit 70bd4fe621
3 changed files with 8 additions and 10 deletions

View File

@@ -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;
}

View File

@@ -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,

View File

@@ -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,