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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user