diff options
author | Bas Nieuwenhuizen <[email protected]> | 2016-12-16 23:10:31 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2016-12-17 11:41:53 +0100 |
commit | b2b4f7248bee0121d6099f8b641a034eed13a15e (patch) | |
tree | 25de845533b398b85a2594ac29e08e5c68920730 | |
parent | 6493b4f4dded6e622630d22f6bc2c779fb73d467 (diff) |
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 <[email protected]>
Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_pipeline.c | 38 |
1 files changed, 17 insertions, 21 deletions
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; } |