From 5561db68c35ab634c73cd47f5e1e291143d68420 Mon Sep 17 00:00:00 2001 From: Sagar Ghuge Date: Wed, 9 Oct 2024 06:55:05 -0700 Subject: [PATCH] anv: Add helper to copy data from src to dest anv_address Signed-off-by: Sagar Ghuge Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/vulkan/anv_blorp.c | 36 ++++++++++++++++++++++++++++++++++ src/intel/vulkan/anv_private.h | 5 +++++ 2 files changed, 41 insertions(+) diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c index 4c78658c77c..f815838c748 100644 --- a/src/intel/vulkan/anv_blorp.c +++ b/src/intel/vulkan/anv_blorp.c @@ -1069,6 +1069,42 @@ copy_buffer(struct anv_device *device, blorp_buffer_copy(batch, src, dst, region->size); } +void +anv_cmd_copy_addr(struct anv_cmd_buffer *cmd_buffer, + struct anv_address src_addr, + struct anv_address dst_addr, + uint64_t size) +{ + struct anv_device *device = cmd_buffer->device; + + struct blorp_batch batch; + anv_blorp_batch_init(cmd_buffer, &batch, + cmd_buffer->state.current_pipeline == + cmd_buffer->device->physical->gpgpu_pipeline_value ? + BLORP_BATCH_USE_COMPUTE : 0); + + struct blorp_address src = { + .buffer = src_addr.bo, + .offset = src_addr.offset, + .mocs = anv_mocs(device, src_addr.bo, + blorp_batch_isl_copy_usage(&batch, false /* is_dest */, + false)), + }; + + struct blorp_address dst = { + .buffer = dst_addr.bo, + .offset = dst_addr.offset, + .mocs = anv_mocs(device, dst_addr.bo, + blorp_batch_isl_copy_usage(&batch, true /* is_dest */, + false)), + }; + + blorp_buffer_copy(&batch, src, dst, size); + + anv_add_buffer_write_pending_bits(cmd_buffer, "after copy buffer"); + anv_blorp_batch_finish(&batch); +} + void anv_CmdCopyBuffer2( VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 4b78fd2e61a..d931684e877 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -5902,6 +5902,11 @@ anv_image_choose_isl_surf_usage(struct anv_physical_device *device, VkImageCompressionFlagsEXT comp_flags); void +anv_cmd_copy_addr(struct anv_cmd_buffer *cmd_buffer, + struct anv_address src_addr, + struct anv_address dst_addr, + uint64_t size); +void anv_cmd_buffer_fill_area(struct anv_cmd_buffer *cmd_buffer, struct anv_address address, VkDeviceSize size,