Wait for deferred operations before obtaining RT pipeline handle
authorRicardo Garcia <rgarcia@igalia.com>
Tue, 29 Mar 2022 14:51:18 +0000 (16:51 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 7 Apr 2022 17:47:54 +0000 (17:47 +0000)
The ray tracing utils, when creating ray tracing pipelines and using
deferred operations, were using the VkPipeline pointer and handler
before the deferred operation had completed, which is against the spec.

Affected tests:
dEQP-VK.ray_tracing_pipeline.pipeline_library.configurations.multithreaded_compilation_dho.*
dEQP-VK.ray_tracing_pipeline.large_shader_set.cpu_ht*

Components: Vulkan
VK-GL-CTS issue: 3588

Change-Id: Ied8f443c01e99878180130963b8988852171b8a0

external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp

index 041fd89..e4b1df7 100644 (file)
@@ -2365,7 +2365,6 @@ Move<VkPipeline> RayTracingPipeline::createPipelineKHR (const DeviceInterface&
        };
        VkPipeline                                                                                      object                                                  = DE_NULL;
        VkResult                                                                                        result                                                  = vk.createRayTracingPipelinesKHR(device, deferredOperation.get(), DE_NULL, 1u, &pipelineCreateInfo, DE_NULL, &object);
-       Move<VkPipeline>                                                                        pipeline                                                (check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, DE_NULL));
 
        if (m_deferredOperation)
        {
@@ -2374,6 +2373,7 @@ Move<VkPipeline> RayTracingPipeline::createPipelineKHR (const DeviceInterface&
                finishDeferredOperation(vk, device, deferredOperation.get(), m_workerThreadCount, result == VK_OPERATION_NOT_DEFERRED_KHR);
        }
 
+       Move<VkPipeline> pipeline (check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, DE_NULL));
        return pipeline;
 }