From 5df943629df3314d1c8d9ade8db5596105b0915f Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 27 Jun 2025 14:29:41 +0200 Subject: [PATCH] radv: add support for capture&replay with descriptor heap Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_image.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 4e01ab6f4dd..1fcc8e080a9 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1517,6 +1517,15 @@ radv_image_create(VkDevice _device, const struct radv_image_create_info *create_ replay_address = *((const uint64_t *)opaque_info->opaqueCaptureDescriptorData); } + if (image->vk.create_flags & VK_IMAGE_CREATE_DESCRIPTOR_HEAP_CAPTURE_REPLAY_BIT_EXT) { + flags |= RADEON_FLAG_REPLAYABLE; + + const VkOpaqueCaptureDataCreateInfoEXT *opaque_info = + vk_find_struct_const(create_info->vk_info->pNext, OPAQUE_CAPTURE_DATA_CREATE_INFO_EXT); + if (opaque_info && opaque_info->pData) + replay_address = *((const uint64_t *)opaque_info->pData->address); + } + image->alignment = MAX2(image->alignment, 4096); image->size = align64(image->size, image->alignment); @@ -1997,3 +2006,16 @@ radv_GetImageOpaqueCaptureDescriptorDataEXT(VkDevice device, const VkImageCaptur *(uint64_t *)pData = image->bindings[0].addr; return VK_SUCCESS; } + +VKAPI_ATTR VkResult VKAPI_CALL +radv_GetImageOpaqueCaptureDataEXT(VkDevice device, uint32_t imageCount, const VkImage *pImages, + VkHostAddressRangeEXT *pDatas) +{ + for (uint32_t i = 0; i < imageCount; i++) { + VK_FROM_HANDLE(radv_image, image, pImages[i]); + + *(uint64_t *)pDatas[i].address = image->bindings[0].addr; + } + + return VK_SUCCESS; +}