anv: Set fence/semaphore types to NONE in impl_cleanup

There were some places that were calling anv_semaphore_impl_cleanup and
neither deleting the semaphore nor setting the type back to NONE.  Just
set it to NONE in impl_cleanup to avoid these issues.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106643
Fixes: 031f57eba "anv: Add a basic implementation of VK_KHX_external..."
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
Jason Ekstrand
2018-05-26 12:08:22 -07:00
parent 3ba16d640e
commit 237c5ac4f9

View File

@@ -314,18 +314,21 @@ anv_fence_impl_cleanup(struct anv_device *device,
switch (impl->type) { switch (impl->type) {
case ANV_FENCE_TYPE_NONE: case ANV_FENCE_TYPE_NONE:
/* Dummy. Nothing to do */ /* Dummy. Nothing to do */
return; break;
case ANV_FENCE_TYPE_BO: case ANV_FENCE_TYPE_BO:
anv_bo_pool_free(&device->batch_bo_pool, &impl->bo.bo); anv_bo_pool_free(&device->batch_bo_pool, &impl->bo.bo);
return; break;
case ANV_FENCE_TYPE_SYNCOBJ: case ANV_FENCE_TYPE_SYNCOBJ:
anv_gem_syncobj_destroy(device, impl->syncobj); anv_gem_syncobj_destroy(device, impl->syncobj);
return; break;
default:
unreachable("Invalid fence type");
} }
unreachable("Invalid fence type"); impl->type = ANV_FENCE_TYPE_NONE;
} }
void anv_DestroyFence( void anv_DestroyFence(
@@ -362,10 +365,8 @@ VkResult anv_ResetFences(
* first restored. The remaining operations described therefore * first restored. The remaining operations described therefore
* operate on the restored payload. * operate on the restored payload.
*/ */
if (fence->temporary.type != ANV_FENCE_TYPE_NONE) { if (fence->temporary.type != ANV_FENCE_TYPE_NONE)
anv_fence_impl_cleanup(device, &fence->temporary); anv_fence_impl_cleanup(device, &fence->temporary);
fence->temporary.type = ANV_FENCE_TYPE_NONE;
}
struct anv_fence_impl *impl = &fence->permanent; struct anv_fence_impl *impl = &fence->permanent;
@@ -918,22 +919,25 @@ anv_semaphore_impl_cleanup(struct anv_device *device,
case ANV_SEMAPHORE_TYPE_NONE: case ANV_SEMAPHORE_TYPE_NONE:
case ANV_SEMAPHORE_TYPE_DUMMY: case ANV_SEMAPHORE_TYPE_DUMMY:
/* Dummy. Nothing to do */ /* Dummy. Nothing to do */
return; break;
case ANV_SEMAPHORE_TYPE_BO: case ANV_SEMAPHORE_TYPE_BO:
anv_bo_cache_release(device, &device->bo_cache, impl->bo); anv_bo_cache_release(device, &device->bo_cache, impl->bo);
return; break;
case ANV_SEMAPHORE_TYPE_SYNC_FILE: case ANV_SEMAPHORE_TYPE_SYNC_FILE:
close(impl->fd); close(impl->fd);
return; break;
case ANV_SEMAPHORE_TYPE_DRM_SYNCOBJ: case ANV_SEMAPHORE_TYPE_DRM_SYNCOBJ:
anv_gem_syncobj_destroy(device, impl->syncobj); anv_gem_syncobj_destroy(device, impl->syncobj);
return; break;
default:
unreachable("Invalid semaphore type");
} }
unreachable("Invalid semaphore type"); impl->type = ANV_SEMAPHORE_TYPE_NONE;
} }
void void
@@ -944,7 +948,6 @@ anv_semaphore_reset_temporary(struct anv_device *device,
return; return;
anv_semaphore_impl_cleanup(device, &semaphore->temporary); anv_semaphore_impl_cleanup(device, &semaphore->temporary);
semaphore->temporary.type = ANV_SEMAPHORE_TYPE_NONE;
} }
void anv_DestroySemaphore( void anv_DestroySemaphore(