[Mesa-dev] [PATCH v3] anv: Limit VkDeviceMemory objects to 2GB
Jason Ekstrand
jason at jlekstrand.net
Wed Apr 12 15:50:51 UTC 2017
On Wed, Apr 12, 2017 at 2:47 AM, Juan A. Suarez Romero <jasuarez at igalia.com>
wrote:
> Reviewed-by: Juan A. Suarez Romero <jasuarez at igalia.com>
>
Is this patch sufficient to fix the bug you were seeing yesterday?
> On Tue, 2017-04-11 at 11:11 -0700, Jason Ekstrand wrote:
> > v2 (Jason Ekstrand):
> > - Limit to 2GB instead of 4GB
> >
> > v3 (Jason Ekstrand):
> > - Fix the build by using pAllocateInfo instead of pAllocationInfo (not
> > sure how that happened).
> > - Return vK_ERROR_OUT_OF_DEVICE_MEMORY (Thanks Ilia!)
> >
> > Cc: "Juan A. Suárez" <jasuarez at igalia.com>
> > ---
> > src/intel/vulkan/anv_device.c | 20 ++++++++++++++++++++
> > 1 file changed, 20 insertions(+)
> >
> > diff --git a/src/intel/vulkan/anv_device.c
> b/src/intel/vulkan/anv_device.c
> > index 35ef4c4..ee9c48f 100644
> > --- a/src/intel/vulkan/anv_device.c
> > +++ b/src/intel/vulkan/anv_device.c
> > @@ -1539,6 +1539,26 @@ 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 32 bits. The only mechanism we have for
> dealing with
> > + * 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."
> > + *
> > + * We don't use vk_error here because it's not an error so much as an
> > + * indication to the application that the allocation is too large.
> > + */
> > + if (pAllocateInfo->allocationSize > (1ull << 31))
> > + return VK_ERROR_OUT_OF_DEVICE_MEMORY;
> > +
> > /* FINISHME: Fail if allocation request exceeds heap size. */
> >
> > mem = vk_alloc2(&device->alloc, pAllocator, sizeof(*mem), 8,
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170412/039b5a92/attachment-0001.html>
More information about the mesa-dev
mailing list