From: Jason Ekstrand Date: Sun, 6 Mar 2016 22:16:51 +0000 (-0800) Subject: anv: Create fences from the batch BO pool X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=23de78768b69d5600233df022431b8f26a0907fc;p=mesa.git anv: Create fences from the batch BO pool Applications may create a *lot* of fences, perhaps as much as one per vkQueueSubmit. Really, they're supposed to use ResetFence, but it's easy enough for us to make them crazy-cheap so we might as well. --- diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index c68280fe8d7..8aa1e61acad 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1387,8 +1387,6 @@ VkResult anv_CreateFence( struct anv_batch batch; VkResult result; - const uint32_t fence_size = 128; - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO); fence = anv_alloc2(&device->alloc, pAllocator, sizeof(*fence), 8, @@ -1396,12 +1394,10 @@ VkResult anv_CreateFence( if (fence == NULL) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); - result = anv_bo_init_new(&fence->bo, device, fence_size); + result = anv_bo_pool_alloc(&device->batch_bo_pool, &fence->bo); if (result != VK_SUCCESS) goto fail; - fence->bo.map = - anv_gem_mmap(device, fence->bo.gem_handle, 0, fence->bo.size, 0); batch.next = batch.start = fence->bo.map; batch.end = fence->bo.map + fence->bo.size; anv_batch_emit(&batch, GEN7_MI_BATCH_BUFFER_END); @@ -1457,9 +1453,7 @@ void anv_DestroyFence( ANV_FROM_HANDLE(anv_device, device, _device); ANV_FROM_HANDLE(anv_fence, fence, _fence); - anv_gem_munmap(fence->bo.map, fence->bo.size); - anv_gem_close(device, fence->bo.gem_handle); - anv_free2(&device->alloc, pAllocator, fence); + anv_bo_pool_free(&device->batch_bo_pool, &fence->bo); } VkResult anv_ResetFences(