From 4affeba1e9eb426a1ba13a3e8ced4673c4bb9b34 Mon Sep 17 00:00:00 2001 From: Scott D Phillips Date: Wed, 30 May 2018 20:16:30 -0700 Subject: [PATCH] anv: Soft-pin everything else v2 (Jason Ekstrand): - Break up Scott's mega-patch Reviewed-by: Jason Ekstrand Reviewed-by: Scott D Phillips --- src/intel/vulkan/anv_allocator.c | 9 ++++++++- src/intel/vulkan/anv_device.c | 7 +++++++ src/intel/vulkan/genX_query.c | 6 ++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index 97fa8c97035..ab01d46cbeb 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -1077,8 +1077,10 @@ anv_scratch_pool_finish(struct anv_device *device, struct anv_scratch_pool *pool for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) { for (unsigned i = 0; i < 16; i++) { struct anv_scratch_bo *bo = &pool->bos[i][s]; - if (bo->exists > 0) + if (bo->exists > 0) { + anv_vma_free(device, &bo->bo); anv_gem_close(device, bo->bo.gem_handle); + } } } } @@ -1176,6 +1178,11 @@ anv_scratch_pool_alloc(struct anv_device *device, struct anv_scratch_pool *pool, if (device->instance->physicalDevice.has_exec_async) bo->bo.flags |= EXEC_OBJECT_ASYNC; + if (device->instance->physicalDevice.use_softpin) + bo->bo.flags |= EXEC_OBJECT_PINNED; + + anv_vma_alloc(device, &bo->bo); + /* Set the exists last because it may be read by other threads */ __sync_synchronize(); bo->exists = true; diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 1a2bde2df4d..b02e1a2749e 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1658,6 +1658,12 @@ VkResult anv_CreateDevice( if (result != VK_SUCCESS) goto fail_binding_table_pool; + if (physical_device->use_softpin) + device->workaround_bo.flags |= EXEC_OBJECT_PINNED; + + if (!anv_vma_alloc(device, &device->workaround_bo)) + goto fail_workaround_bo; + anv_device_init_trivial_batch(device); if (device->info.gen >= 10) @@ -1756,6 +1762,7 @@ void anv_DestroyDevice( anv_scratch_pool_finish(device, &device->scratch_pool); anv_gem_munmap(device->workaround_bo.map, device->workaround_bo.size); + anv_vma_free(device, &device->workaround_bo); anv_gem_close(device, device->workaround_bo.gem_handle); anv_vma_free(device, &device->trivial_batch_bo); diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index de409be04ed..e35e9b85844 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -94,9 +94,14 @@ VkResult genX(CreateQueryPool)( if (pdevice->supports_48bit_addresses) pool->bo.flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; + if (pdevice->use_softpin) + pool->bo.flags |= EXEC_OBJECT_PINNED; + if (pdevice->has_exec_async) pool->bo.flags |= EXEC_OBJECT_ASYNC; + anv_vma_alloc(device, &pool->bo); + /* For query pools, we set the caching mode to I915_CACHING_CACHED. On LLC * platforms, this does nothing. On non-LLC platforms, this means snooping * which comes at a slight cost. However, the buffers aren't big, won't be @@ -129,6 +134,7 @@ void genX(DestroyQueryPool)( return; anv_gem_munmap(pool->bo.map, pool->bo.size); + anv_vma_free(device, &pool->bo); anv_gem_close(device, pool->bo.gem_handle); vk_free2(&device->alloc, pAllocator, pool); } -- 2.30.2