From b2b4f7248bee0121d6099f8b641a034eed13a15e Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Fri, 16 Dec 2016 23:10:31 +0100 Subject: radv: Don't bail out on pipeline create failure. The spec says we have to try to create all, and only set failed pipelines to VK_NULL_HANDLE. If one of them fails, we have to return an error, but as far as I can see, the spec does not care which of the suberrors. Fixes dEQP-VK.api.object_management.alloc_callback_fail_multiple.compute_pipeline dEQP-VK.api.object_management.alloc_callback_fail_multiple.graphics_pipeline Signed-off-by: Bas Nieuwenhuizen Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_pipeline.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) (limited to 'src/amd') diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index f7e60c988c8..f14e5dfdfb5 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -1461,20 +1461,18 @@ VkResult radv_CreateGraphicsPipelines( unsigned i = 0; for (; i < count; i++) { - result = radv_graphics_pipeline_create(_device, - pipelineCache, - &pCreateInfos[i], - NULL, pAllocator, &pPipelines[i]); - if (result != VK_SUCCESS) { - for (unsigned j = 0; j < i; j++) { - radv_DestroyPipeline(_device, pPipelines[j], pAllocator); - } - - return result; + VkResult r; + r = radv_graphics_pipeline_create(_device, + pipelineCache, + &pCreateInfos[i], + NULL, pAllocator, &pPipelines[i]); + if (r != VK_SUCCESS) { + result = r; + pPipelines[i] = VK_NULL_HANDLE; } } - return VK_SUCCESS; + return result; } static VkResult radv_compute_pipeline_create( @@ -1525,17 +1523,15 @@ VkResult radv_CreateComputePipelines( unsigned i = 0; for (; i < count; i++) { - result = radv_compute_pipeline_create(_device, pipelineCache, - &pCreateInfos[i], - pAllocator, &pPipelines[i]); - if (result != VK_SUCCESS) { - for (unsigned j = 0; j < i; j++) { - radv_DestroyPipeline(_device, pPipelines[j], pAllocator); - } - - return result; + VkResult r; + r = radv_compute_pipeline_create(_device, pipelineCache, + &pCreateInfos[i], + pAllocator, &pPipelines[i]); + if (r != VK_SUCCESS) { + result = r; + pPipelines[i] = VK_NULL_HANDLE; } } - return VK_SUCCESS; + return result; } -- cgit v1.2.3