On Tue, Apr 11, 2017 at 11:03 AM, Ilia Mirkin <imir...@alum.mit.edu> wrote:

> On Tue, Apr 11, 2017 at 1:58 PM, Jason Ekstrand <ja...@jlekstrand.net>
> wrote:
> > Cc: "Juan A. Suárez" <jasua...@igalia.com>
> > ---
> >  src/intel/vulkan/anv_device.c | 17 +++++++++++++++++
> >  1 file changed, 17 insertions(+)
> >
> > diff --git a/src/intel/vulkan/anv_device.c
> b/src/intel/vulkan/anv_device.c
> > index 35ef4c4..b24c739 100644
> > --- a/src/intel/vulkan/anv_device.c
> > +++ b/src/intel/vulkan/anv_device.c
> > @@ -1539,6 +1539,23 @@ VkResult anv_AllocateMemory(
> >     assert(pAllocateInfo->memoryTypeIndex == 0 ||
> >            (!device->info.has_llc && pAllocateInfo->memoryTypeIndex <
> 2));
> >
> > +   /* The kernel relocation API has a limitation of a 32-bit delta value
> > +    * applied to the address before it is written which, in spite of it
> being
> > +    * unsigned, is treated as signed .  Because of the way that this
> maps to
> > +    * the Vulkan API, we cannot handle an offset into a buffer that
> does not
> > +    * fit into a signed 31 bits.  The only mechanism we have for
> dealing with
>
> 32 bits?
>

Yup.


> > +    * this at the moment is to limit all VkDeviceMemory objects to a
> maximum
> > +    * of 2GB each.  The Vulkan spec allows us to do this:
> > +    *
> > +    *    "Some platforms may have a limit on the maximum size of a
> single
> > +    *    allocation. For example, certain systems may fail to create
> > +    *    allocations with a size greater than or equal to 4GB. Such a
> limit is
> > +    *    implementation-dependent, and if such a failure occurs then
> the error
> > +    *    VK_ERROR_OUT_OF_DEVICE_MEMORY should be returned."
> > +    */
> > +   if (pAllocationInfo->allocationSize > (1ull << 31))
>
> 1<<31 is not representable in a 32-bit signed int. did you mean >= ?
>

No.  You can't validly have a 2GB offset into a 2GB buffer because you nee
some space after it to put the thing you're binding.  Anything over 2GB, on
the other hand, has a potential problem.


> > +      return VK_ERROR_OUT_OF_HOST_MEMORY;
>
> The comment above would suggest OUT_OF_DEVICE_MEMORY...
>

Bah!  Thanks!  I'll send a v3.


> > +
> >     /* FINISHME: Fail if allocation request exceeds heap size. */
> >
> >     mem = vk_alloc2(&device->alloc, pAllocator, sizeof(*mem), 8,
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to