radv: destroy the base object if VkCreateQueryPool() failed
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5868>
This commit is contained in:
parent
25baceafd3
commit
0eec81d019
|
@ -1269,6 +1269,17 @@ radv_query_pool_needs_gds(struct radv_device *device,
|
||||||
(pool->pipeline_stats_mask & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT);
|
(pool->pipeline_stats_mask & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
radv_destroy_query_pool(struct radv_device *device,
|
||||||
|
const VkAllocationCallbacks *pAllocator,
|
||||||
|
struct radv_query_pool *pool)
|
||||||
|
{
|
||||||
|
if (pool->bo)
|
||||||
|
device->ws->buffer_destroy(pool->bo);
|
||||||
|
vk_object_base_finish(&pool->base);
|
||||||
|
vk_free2(&device->vk.alloc, pAllocator, pool);
|
||||||
|
}
|
||||||
|
|
||||||
VkResult radv_CreateQueryPool(
|
VkResult radv_CreateQueryPool(
|
||||||
VkDevice _device,
|
VkDevice _device,
|
||||||
const VkQueryPoolCreateInfo* pCreateInfo,
|
const VkQueryPoolCreateInfo* pCreateInfo,
|
||||||
|
@ -1313,17 +1324,14 @@ VkResult radv_CreateQueryPool(
|
||||||
pool->bo = device->ws->buffer_create(device->ws, pool->size,
|
pool->bo = device->ws->buffer_create(device->ws, pool->size,
|
||||||
64, RADEON_DOMAIN_GTT, RADEON_FLAG_NO_INTERPROCESS_SHARING,
|
64, RADEON_DOMAIN_GTT, RADEON_FLAG_NO_INTERPROCESS_SHARING,
|
||||||
RADV_BO_PRIORITY_QUERY_POOL);
|
RADV_BO_PRIORITY_QUERY_POOL);
|
||||||
|
|
||||||
if (!pool->bo) {
|
if (!pool->bo) {
|
||||||
vk_free2(&device->vk.alloc, pAllocator, pool);
|
radv_destroy_query_pool(device, pAllocator, pool);
|
||||||
return vk_error(device->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY);
|
return vk_error(device->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
pool->ptr = device->ws->buffer_map(pool->bo);
|
pool->ptr = device->ws->buffer_map(pool->bo);
|
||||||
|
|
||||||
if (!pool->ptr) {
|
if (!pool->ptr) {
|
||||||
device->ws->buffer_destroy(pool->bo);
|
radv_destroy_query_pool(device, pAllocator, pool);
|
||||||
vk_free2(&device->vk.alloc, pAllocator, pool);
|
|
||||||
return vk_error(device->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY);
|
return vk_error(device->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1342,10 +1350,7 @@ void radv_DestroyQueryPool(
|
||||||
if (!pool)
|
if (!pool)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
device->ws->buffer_destroy(pool->bo);
|
radv_destroy_query_pool(device, pAllocator, pool);
|
||||||
|
|
||||||
vk_object_base_finish(&pool->base);
|
|
||||||
vk_free2(&device->vk.alloc, pAllocator, pool);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult radv_GetQueryPoolResults(
|
VkResult radv_GetQueryPoolResults(
|
||||||
|
|
Loading…
Reference in New Issue