tu: Add capture/replay for sparse buffers and descriptor buffer.
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

This matches the behavior of radv for these two.

Fixes:
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency_and_usage

Fixes: 8feed47fce ("tu: Initial support for sparse binding")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38148>
This commit is contained in:
Emma Anholt 2025-10-29 10:58:59 -07:00 committed by Marge Bot
parent 917058a4c5
commit 7372c7c9e2
5 changed files with 24 additions and 9 deletions

View file

@ -262,11 +262,8 @@ nobin-dEQP-VK.transform_feedback.simple_optimized_gpl.draw_indirect_multiview_co
nobin-dEQP-VK.transform_feedback.simple_optimized_gpl.draw_indirect_multiview_counter_offset_244,Fail
# New failures with VKCTS 1.4.4.0
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency_and_usage,Fail
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency,Fail
dEQP-VK.pipeline.monolithic.misc.identically_defined_layout,Fail
dEQP-VK.tessellation.misc_draw.tess_factor_barrier_bug,Crash
gmem-dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency_and_usage,Fail
gmem-dEQP-VK.transform_feedback.simple.draw_indirect_counter_offset_16,Fail
gmem-dEQP-VK.transform_feedback.simple.draw_indirect_multiview_counter_offset_508,Fail
gmem-dEQP-VK.transform_feedback.simple_fast_gpl.draw_indirect_counter_offset_244,Fail

View file

@ -40,8 +40,6 @@ gmem-dEQP-VK.transform_feedback.simple.draw_indirect_multiview_counter_offset_24
nobin-dEQP-VK.transform_feedback.simple.draw_indirect_multiview_counter_offset_16,Fail
# New failures with VKCTS 1.4.4.0
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency_and_usage,Fail
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency,Fail
dEQP-VK.pipeline.monolithic.misc.identically_defined_layout,Fail
dEQP-VK.tessellation.misc_draw.tess_factor_barrier_bug,Crash
gmem-dEQP-VK.transform_feedback.simple.draw_indirect_counter_offset_16,Fail

View file

@ -28,10 +28,7 @@ dynamic-dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_s
dynamic-dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_testing_stencil,Fail
# New failures with VKCTS 1.4.4.0
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency_and_usage,Fail
dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency,Fail
dEQP-VK.pipeline.monolithic.misc.identically_defined_layout,Fail
gmem-dEQP-VK.binding_model.descriptor_buffer.traditional_buffer.capture_replay.sparse_buffer_descriptor_data_consistency_and_usage,Fail
# New failures when updating kernel from msm-next at 6.16 to 6.19.5
# https://gitlab.freedesktop.org/drm/msm/-/issues/93

View file

@ -38,6 +38,8 @@ tu_CreateBuffer(VkDevice _device,
flags |= TU_SPARSE_VMA_MAP_ZERO;
if (pCreateInfo->flags & VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)
flags |= TU_SPARSE_VMA_REPLAYABLE;
if (pCreateInfo->flags & VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)
flags |= TU_SPARSE_VMA_REPLAYABLE;
const VkBufferOpaqueCaptureAddressCreateInfo *replay_info =
vk_find_struct_const(pCreateInfo->pNext,
@ -47,6 +49,13 @@ tu_CreateBuffer(VkDevice _device,
flags |= TU_SPARSE_VMA_REPLAYABLE;
}
const VkOpaqueCaptureDescriptorDataCreateInfoEXT *descriptor_replay_info =
vk_find_struct_const(pCreateInfo->pNext, OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT);
if (descriptor_replay_info && descriptor_replay_info->opaqueCaptureDescriptorData) {
client_address = *(const uint64_t *) descriptor_replay_info->opaqueCaptureDescriptorData;
flags |= TU_SPARSE_VMA_REPLAYABLE;
}
VkResult result =
tu_sparse_vma_init(device, &buffer->vk.base, &buffer->vma,
&buffer->vk.device_address, flags,
@ -231,3 +240,17 @@ uint64_t tu_GetBufferOpaqueCaptureAddress(
return 0;
}
VkResult VKAPI_CALL
tu_GetBufferOpaqueCaptureDescriptorDataEXT(VkDevice device,
const VkBufferCaptureDescriptorDataInfoEXT *pInfo,
void *pData)
{
VK_FROM_HANDLE(tu_buffer, buffer, pInfo->buffer);
/* Save the buffer iova so that when replaying sparse buffers have a
* consistent iova and therefore consistent descriptor contents.
*/
*(uint64_t *)pData = buffer->vk.device_address;
return VK_SUCCESS;
}

View file

@ -1398,7 +1398,7 @@ tu_get_properties(struct tu_physical_device *pdevice,
props->maxSamplerDescriptorBufferBindings = pdevice->usable_sets;
props->maxEmbeddedImmutableSamplerBindings = pdevice->usable_sets;
props->maxEmbeddedImmutableSamplers = max_descriptor_set_size;
props->bufferCaptureReplayDescriptorDataSize = 0;
props->bufferCaptureReplayDescriptorDataSize = sizeof(uint64_t);
props->imageCaptureReplayDescriptorDataSize = sizeof(uint64_t);
props->imageViewCaptureReplayDescriptorDataSize = 0;
props->samplerCaptureReplayDescriptorDataSize = 0;