mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
radv/rt: properly destroy radv_ray_tracing_lib_pipeline on error
Also return the correct error code.
Fixes: 4dafb69d61 ('radv/rt: defer library_pipeline allocation')
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22684>
This commit is contained in:
parent
74a8f118a2
commit
2795cf7422
1 changed files with 19 additions and 14 deletions
|
|
@ -329,6 +329,7 @@ radv_rt_pipeline_library_create(VkDevice _device, VkPipelineCache _cache,
|
|||
{
|
||||
RADV_FROM_HANDLE(radv_device, device, _device);
|
||||
struct radv_ray_tracing_lib_pipeline *pipeline;
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
||||
VkRayTracingPipelineCreateInfoKHR local_create_info =
|
||||
radv_create_merged_rt_create_info(pCreateInfo);
|
||||
|
|
@ -339,22 +340,26 @@ radv_rt_pipeline_library_create(VkDevice _device, VkPipelineCache _cache,
|
|||
sizeof(*pipeline) + local_create_info.groupCount * sizeof(struct radv_ray_tracing_module);
|
||||
pipeline = vk_zalloc2(&device->vk.alloc, pAllocator, pipeline_size, 8,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
if (pipeline == NULL)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
if (!pipeline) {
|
||||
result = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
radv_pipeline_init(device, &pipeline->base, RADV_PIPELINE_RAY_TRACING_LIB);
|
||||
|
||||
pipeline->ctx = ralloc_context(NULL);
|
||||
|
||||
VkResult result = radv_create_group_handles(device, &local_create_info, pipeline->groups);
|
||||
result = radv_create_group_handles(device, &local_create_info, pipeline->groups);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail;
|
||||
goto pipeline_fail;
|
||||
|
||||
if (local_create_info.stageCount) {
|
||||
pipeline->stages = radv_copy_shader_stage_create_info(
|
||||
device, local_create_info.stageCount, local_create_info.pStages, pipeline->ctx);
|
||||
if (!pipeline->stages)
|
||||
goto fail;
|
||||
if (!pipeline->stages) {
|
||||
result = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto pipeline_fail;
|
||||
}
|
||||
|
||||
pipeline->stage_count = local_create_info.stageCount;
|
||||
}
|
||||
|
|
@ -363,22 +368,22 @@ radv_rt_pipeline_library_create(VkDevice _device, VkPipelineCache _cache,
|
|||
size_t size = sizeof(VkRayTracingShaderGroupCreateInfoKHR) * local_create_info.groupCount;
|
||||
pipeline->group_count = local_create_info.groupCount;
|
||||
pipeline->group_infos = ralloc_size(pipeline->ctx, size);
|
||||
if (!pipeline->group_infos)
|
||||
goto fail;
|
||||
if (!pipeline->group_infos) {
|
||||
result = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto pipeline_fail;
|
||||
}
|
||||
memcpy(pipeline->group_infos, local_create_info.pGroups, size);
|
||||
}
|
||||
|
||||
*pPipeline = radv_pipeline_to_handle(&pipeline->base);
|
||||
|
||||
free((void *)local_create_info.pGroups);
|
||||
free((void *)local_create_info.pStages);
|
||||
return VK_SUCCESS;
|
||||
pipeline_fail:
|
||||
if (result != VK_SUCCESS)
|
||||
radv_pipeline_destroy(device, &pipeline->base, pAllocator);
|
||||
fail:
|
||||
free(pipeline->group_infos);
|
||||
ralloc_free(pipeline->ctx);
|
||||
free((void *)local_create_info.pGroups);
|
||||
free((void *)local_create_info.pStages);
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue