[Mesa-dev] [PATCH 11/16] anv: Stop setting BO flags in bo_init_new
Jason Ekstrand
jason at jlekstrand.net
Tue May 23 23:02:07 UTC 2017
On Tue, May 23, 2017 at 2:35 PM, Nanley Chery <nanleychery at gmail.com> wrote:
> On Thu, May 18, 2017 at 02:00:58PM -0700, Jason Ekstrand wrote:
> > The idea behind doing this was to make it easier to set various flags.
> > However, we have enough custom flag settings floating around the driver
> > that this is more of a nuisance than a help.
> > ---
> > src/intel/vulkan/anv_allocator.c | 17 ++++++++++-------
> > src/intel/vulkan/anv_device.c | 12 ++++++------
> > src/intel/vulkan/anv_queue.c | 4 ++--
> > 3 files changed, 18 insertions(+), 15 deletions(-)
> >
> > diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_
> allocator.c
> > index b767542..d637867 100644
> > --- a/src/intel/vulkan/anv_allocator.c
> > +++ b/src/intel/vulkan/anv_allocator.c
> > @@ -1025,6 +1025,12 @@ 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;
> > +
> > assert(new_bo.size == pow2_size);
> >
> > new_bo.map = anv_gem_mmap(pool->device, new_bo.gem_handle, 0,
> pow2_size, 0);
> > @@ -1154,7 +1160,10 @@ anv_scratch_pool_alloc(struct anv_device *device,
> struct anv_scratch_pool *pool,
> > *
> > * so nothing will ever touch the top page.
> > */
> > - bo->bo.flags &= ~EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> > + assert(!(bo->bo.flags & EXEC_OBJECT_SUPPORTS_48B_ADDRESS));
> > +
> > + if (device->instance->physicalDevice.has_exec_async)
> > + bo->bo.flags |= EXEC_OBJECT_ASYNC;
> >
> > /* Set the exists last because it may be read by other threads */
> > __sync_synchronize();
> > @@ -1309,12 +1318,6 @@ anv_bo_cache_import(struct anv_device *device,
> >
> > anv_bo_init(&bo->bo, gem_handle, size);
> >
> > - if (device->instance->physicalDevice.supports_48bit_addresses)
> > - bo->bo.flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> > -
> > - if (device->instance->physicalDevice.has_exec_async)
> > - bo->bo.flags |= EXEC_OBJECT_ASYNC;
> > -
> > _mesa_hash_table_insert(cache->bo_map, (void
> *)(uintptr_t)gem_handle, bo);
> > }
> >
> > diff --git a/src/intel/vulkan/anv_device.c
> b/src/intel/vulkan/anv_device.c
> > index b0ccbbb..9444ff8 100644
> > --- a/src/intel/vulkan/anv_device.c
> > +++ b/src/intel/vulkan/anv_device.c
> > @@ -1453,12 +1453,6 @@ anv_bo_init_new(struct anv_bo *bo, struct
> anv_device *device, uint64_t size)
> >
> > anv_bo_init(bo, gem_handle, size);
> >
> > - if (device->instance->physicalDevice.supports_48bit_addresses)
> > - bo->flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> > -
> > - if (device->instance->physicalDevice.has_exec_async)
> > - bo->flags |= EXEC_OBJECT_ASYNC;
> > -
>
> This patch introduces the following behavioral changes:
>
> * The bo created in anv_CreateDmaBufImageINTEL loses EXEC_OBJECT_ASYNC.
>
This probably shouldn't have had it set anyway
> * The workaround_bo created in anv_CreateDevice loses both flags.
>
I knew this would happen but I don't particularly care. EXEC_OBJECT_ASYNC
doesn't matter since it's driver internal and 48bit doesn't matter because
it's only 4K.
> * The bo created in genX(CreateQueryPool) loses both flags.
>
That was unintentional. I'll fix it.
> I don't see why we'd want to drop these flags. If it was intentional,
> could mention why in the commit message?
>
Yup. I'll update the commit mesage.
> -Nanley
>
> > return VK_SUCCESS;
> > }
> >
> > @@ -1536,6 +1530,12 @@ VkResult anv_AllocateMemory(
> > goto fail;
> > }
> >
> > + if (pdevice->supports_48bit_addresses)
> > + mem->bo->flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
> > +
> > + if (pdevice->has_exec_async)
> > + mem->bo->flags |= EXEC_OBJECT_ASYNC;
> > +
> > *pMem = anv_device_memory_to_handle(mem);
> >
> > return VK_SUCCESS;
> > diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c
> > index fac979a..86eee28 100644
> > --- a/src/intel/vulkan/anv_queue.c
> > +++ b/src/intel/vulkan/anv_queue.c
> > @@ -553,7 +553,7 @@ VkResult anv_CreateSemaphore(
> > /* If we're going to use this as a fence, we need to *not* have
> the
> > * EXEC_OBJECT_ASYNC bit set.
> > */
> > - semaphore->permanent.bo->flags &= ~EXEC_OBJECT_ASYNC;
> > + assert(!(semaphore->permanent.bo->flags & EXEC_OBJECT_ASYNC));
> > } else {
> > assert(!"Unknown handle type");
> > vk_free2(&device->alloc, pAllocator, semaphore);
> > @@ -644,7 +644,7 @@ VkResult anv_ImportSemaphoreFdKHX(
> > /* If we're going to use this as a fence, we need to *not* have
> the
> > * EXEC_OBJECT_ASYNC bit set.
> > */
> > - bo->flags &= ~EXEC_OBJECT_ASYNC;
> > + assert(!(bo->flags & EXEC_OBJECT_ASYNC));
> >
> > anv_semaphore_impl_cleanup(device, &semaphore->permanent);
> >
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170523/58827bb8/attachment.html>
More information about the mesa-dev
mailing list