diff --git a/src/freedreno/ci/freedreno-a618-fails.txt b/src/freedreno/ci/freedreno-a618-fails.txt index efa5f6ae74b..94e1562df4f 100644 --- a/src/freedreno/ci/freedreno-a618-fails.txt +++ b/src/freedreno/ci/freedreno-a618-fails.txt @@ -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 diff --git a/src/freedreno/ci/freedreno-a660-fails.txt b/src/freedreno/ci/freedreno-a660-fails.txt index eb7e5b27e15..163cec421d8 100644 --- a/src/freedreno/ci/freedreno-a660-fails.txt +++ b/src/freedreno/ci/freedreno-a660-fails.txt @@ -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 diff --git a/src/freedreno/ci/freedreno-a750-fails.txt b/src/freedreno/ci/freedreno-a750-fails.txt index b2a62d33b7a..72bd9c06a98 100644 --- a/src/freedreno/ci/freedreno-a750-fails.txt +++ b/src/freedreno/ci/freedreno-a750-fails.txt @@ -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 diff --git a/src/freedreno/vulkan/tu_buffer.cc b/src/freedreno/vulkan/tu_buffer.cc index 429e8f28309..e7f6a549d56 100644 --- a/src/freedreno/vulkan/tu_buffer.cc +++ b/src/freedreno/vulkan/tu_buffer.cc @@ -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; +} diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 67468e5aa64..297c366d04f 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -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;