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 <basni@google.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Bas Nieuwenhuizen
2016-12-16 23:10:31 +01:00
parent 6493b4f4dd
commit b2b4f7248b

View File

@@ -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;
}