anv: finish the binding_table_pool on destroyDevice when use_softpin
authorJose Maria Casanova Crespo <jmcasanova@igalia.com>
Thu, 28 Jun 2018 13:36:12 +0000 (15:36 +0200)
committerJose Maria Casanova Crespo <jmcasanova@igalia.com>
Fri, 29 Jun 2018 19:49:31 +0000 (21:49 +0200)
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 <jason@jlekstrand.net>
src/intel/vulkan/anv_device.c

index b3d30675b1e83364f1e8bd60da46c6f195c9e44c..cc319f0901879145f831d45e5b8bd8fa261691d7 100644 (file)
@@ -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);