radv: add capture/replay for sparse buffers and descriptor buffer

Shouldn't be super useful in practice because the normal capture/replay
BDA path should also work.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35366>
This commit is contained in:
Samuel Pitoiset
2025-06-05 12:53:58 +02:00
committed by Marge Bot
parent 643e1c4395
commit 3b326abf7b
2 changed files with 22 additions and 3 deletions
+19
View File
@@ -76,6 +76,15 @@ radv_create_buffer(struct radv_device *device, const VkBufferCreateInfo *pCreate
replay_address = opaque_addr_info->opaqueCaptureAddress;
}
if (buffer->vk.create_flags & VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT) {
flags |= RADEON_FLAG_REPLAYABLE;
const VkOpaqueCaptureDescriptorDataCreateInfoEXT *opaque_info =
vk_find_struct_const(pCreateInfo->pNext, OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT);
if (opaque_info)
replay_address = *((const uint64_t *)opaque_info->opaqueCaptureDescriptorData);
}
if (buffer->vk.usage &
(VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT | VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT))
flags |= RADEON_FLAG_32BIT;
@@ -240,6 +249,16 @@ radv_GetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressI
return buffer->vk.device_address;
}
VKAPI_ATTR VkResult VKAPI_CALL
radv_GetBufferOpaqueCaptureDescriptorDataEXT(VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT *pInfo,
void *pData)
{
VK_FROM_HANDLE(radv_buffer, buffer, pInfo->buffer);
*((uint64_t *)pData) = buffer->vk.device_address;
return VK_SUCCESS;
}
VkResult
radv_bo_create(struct radv_device *device, struct vk_object_base *object, uint64_t size, unsigned alignment,
enum radeon_bo_domain domain, enum radeon_bo_flag flags, unsigned priority, uint64_t address,
+3 -3
View File
@@ -1868,10 +1868,10 @@ radv_get_physical_device_properties(struct radv_physical_device *pdev)
.maxSamplerDescriptorBufferBindings = MAX_SETS,
.maxEmbeddedImmutableSamplerBindings = MAX_SETS,
.maxEmbeddedImmutableSamplers = radv_max_descriptor_set_size(),
/* No data required for capture/replay (except for sparse images) but these values need to be
* non-zero.
/* No data required for capture/replay (except for sparse buffers/images) but these values
* need to be non-zero.
*/
.bufferCaptureReplayDescriptorDataSize = 1,
.bufferCaptureReplayDescriptorDataSize = 8,
.imageCaptureReplayDescriptorDataSize = 8,
.imageViewCaptureReplayDescriptorDataSize = 1,
.samplerCaptureReplayDescriptorDataSize = 1,