summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJose Maria Casanova Crespo <[email protected]>2018-06-28 15:36:12 +0200
committerJose Maria Casanova Crespo <[email protected]>2018-06-29 21:49:31 +0200
commita99c9e63a07477634ab73945e5da5b9f580e5828 (patch)
treeb144a3bfba18487fa7aef386278c1c43aa9cb3ac
parentea8b55b49f2a2dd155fc0acb2fdd92795d5c548f (diff)
anv: finish the binding_table_pool on destroyDevice when use_softpin
Running VK-CTS in batch execution mode was raising the VK_ERROR_INITIALIZATION_FAILED error in multiple tests. But when the same failing tests were run isolated they always passed. createDevice and destroyDevice were called before and after every tests. Because the binding_table_pool was never closed, we reached the maximum number of open file descriptors (ulimit -n) and when that happened every call to createDevice implied a VK_ERROR_INITIALIZATION_FAILED error. Fixes: c7db0ed4e94dce563d722e1b098684fbd7315d51 ("anv: Use a separate pool for binding tables when soft pinning") Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/intel/vulkan/anv_device.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index b3d30675b1e..cc319f09018 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -1771,6 +1771,7 @@ void anv_DestroyDevice(
const VkAllocationCallbacks* pAllocator)
{
ANV_FROM_HANDLE(anv_device, device, _device);
+ struct anv_physical_device *physical_device = &device->instance->physicalDevice;
if (!device)
return;
@@ -1797,6 +1798,8 @@ void anv_DestroyDevice(
if (device->info.gen >= 10)
anv_gem_close(device, device->hiz_clear_bo.gem_handle);
+ if (physical_device->use_softpin)
+ anv_state_pool_finish(&device->binding_table_pool);
anv_state_pool_finish(&device->surface_state_pool);
anv_state_pool_finish(&device->instruction_state_pool);
anv_state_pool_finish(&device->dynamic_state_pool);