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 <[email protected]> > --- > 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 <[email protected]>
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
