[Mesa-dev] [PATCH 1/2] anv: setup BO flags at state_pool/block_pool creation
Kenneth Graunke
kenneth at whitecape.org
Fri Nov 17 18:37:40 UTC 2017
On Friday, November 17, 2017 9:47:59 AM PST Lionel Landwerlin wrote:
> This will allow to set the flags on any anv_bo created/filled from a
> state pool or block pool later.
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
> src/intel/vulkan/anv_allocator.c | 24 ++++++++++++----------
> src/intel/vulkan/anv_device.c | 18 ++++++++++++----
> src/intel/vulkan/anv_private.h | 13 +++++++++---
> src/intel/vulkan/tests/block_pool_no_free.c | 2 +-
> src/intel/vulkan/tests/state_pool.c | 2 +-
> src/intel/vulkan/tests/state_pool_free_list_only.c | 2 +-
> src/intel/vulkan/tests/state_pool_no_free.c | 2 +-
> 7 files changed, 41 insertions(+), 22 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c
> index ce37ccb4881..8ed32b3c673 100644
> --- a/src/intel/vulkan/anv_allocator.c
> +++ b/src/intel/vulkan/anv_allocator.c
> @@ -241,11 +241,13 @@ anv_block_pool_expand_range(struct anv_block_pool *pool,
> VkResult
> anv_block_pool_init(struct anv_block_pool *pool,
> struct anv_device *device,
> - uint32_t initial_size)
> + uint32_t initial_size,
> + uint64_t bo_flags)
> {
> VkResult result;
>
> pool->device = device;
> + pool->bo_flags = bo_flags;
> anv_bo_init(&pool->bo, 0, 0);
>
> pool->fd = memfd_create("block pool", MFD_CLOEXEC);
> @@ -398,6 +400,7 @@ anv_block_pool_expand_range(struct anv_block_pool *pool,
> * hard work for us.
> */
> anv_bo_init(&pool->bo, gem_handle, size);
> + pool->bo.flags = pool->bo_flags;
> pool->bo.map = map;
>
> return VK_SUCCESS;
> @@ -515,8 +518,7 @@ anv_block_pool_grow(struct anv_block_pool *pool, struct anv_block_state *state)
>
> result = anv_block_pool_expand_range(pool, center_bo_offset, size);
>
> - if (pool->device->instance->physicalDevice.has_exec_async)
> - pool->bo.flags |= EXEC_OBJECT_ASYNC;
> + pool->bo.flags = pool->bo_flags;
>
> done:
> pthread_mutex_unlock(&pool->device->mutex);
> @@ -606,10 +608,12 @@ anv_block_pool_alloc_back(struct anv_block_pool *pool,
> VkResult
> anv_state_pool_init(struct anv_state_pool *pool,
> struct anv_device *device,
> - uint32_t block_size)
> + uint32_t block_size,
> + uint64_t bo_flags)
> {
> VkResult result = anv_block_pool_init(&pool->block_pool, device,
> - block_size * 16);
> + block_size * 16,
> + bo_flags);
> if (result != VK_SUCCESS)
> return result;
>
> @@ -951,9 +955,11 @@ struct bo_pool_bo_link {
> };
>
> void
> -anv_bo_pool_init(struct anv_bo_pool *pool, struct anv_device *device)
> +anv_bo_pool_init(struct anv_bo_pool *pool, struct anv_device *device,
> + uint64_t bo_flags)
> {
> pool->device = device;
> + pool->bo_flags = bo_flags;
> memset(pool->free_list, 0, sizeof(pool->free_list));
>
> VG(VALGRIND_CREATE_MEMPOOL(pool, 0, false));
> @@ -1005,11 +1011,7 @@ anv_bo_pool_alloc(struct anv_bo_pool *pool, struct anv_bo *bo, uint32_t size)
> if (result != VK_SUCCESS)
> return result;
>
> - if (pool->device->instance->physicalDevice.supports_48bit_addresses)
> - new_bo.flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> -
> - if (pool->device->instance->physicalDevice.has_exec_async)
> - new_bo.flags |= EXEC_OBJECT_ASYNC;
> + new_bo.flags = pool->bo_flags;
>
> assert(new_bo.size == pow2_size);
>
> diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
> index 3aa213e205b..35bccaee6d2 100644
> --- a/src/intel/vulkan/anv_device.c
> +++ b/src/intel/vulkan/anv_device.c
> @@ -1211,21 +1211,31 @@ VkResult anv_CreateDevice(
> }
> pthread_condattr_destroy(&condattr);
>
> - anv_bo_pool_init(&device->batch_bo_pool, device);
> + uint64_t bo_flags =
> + physical_device->supports_48bit_addresses ? EXEC_OBJECT_SUPPORTS_48B_ADDRESS : 0 |
> + physical_device->has_exec_async ? EXEC_OBJECT_ASYNC : 0;
> +
> + anv_bo_pool_init(&device->batch_bo_pool, device, bo_flags);
>
> result = anv_bo_cache_init(&device->bo_cache);
> if (result != VK_SUCCESS)
> goto fail_batch_bo_pool;
>
> - result = anv_state_pool_init(&device->dynamic_state_pool, device, 16384);
> + /* For the state pools we explicitly disable 48bit. */
> + bo_flags = physical_device->has_exec_async ? EXEC_OBJECT_ASYNC : 0;
Maybe just do:
/* For the state pools we explicitly disable 48bit. */
bo_flags &= ~EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
in case you add other flags here in the future?
Otherwise, these are (assuming you fix the bug krh caught):
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171117/2d0cd73c/attachment.sig>
More information about the mesa-dev
mailing list