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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user