anv: Return VK_ERROR_OUT_OF_DEVICE_MEMORY for too-large buffers
authorJason Ekstrand <jason@jlekstrand.net>
Mon, 25 Nov 2019 16:27:02 +0000 (10:27 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Fri, 6 Dec 2019 22:32:05 +0000 (22:32 +0000)
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/vulkan/anv_device.c

index 027a908f8e7d36d9d3adfb778e3063e6673a3e51..210136bb5007fce4784360fc62aab2256158034b 100644 (file)
@@ -3912,8 +3912,17 @@ VkResult anv_CreateBuffer(
     VkBuffer*                                   pBuffer)
 {
    ANV_FROM_HANDLE(anv_device, device, _device);
+   struct anv_physical_device *pdevice = &device->instance->physicalDevice;
    struct anv_buffer *buffer;
 
+   /* Don't allow creating buffers bigger than our address space.  The real
+    * issue here is that we may align up the buffer size and we don't want
+    * doing so to cause roll-over.  However, no one has any business
+    * allocating a buffer larger than our GTT size.
+    */
+   if (pCreateInfo->size > pdevice->gtt_size)
+      return vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY);
+
    assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO);
 
    buffer = vk_alloc2(&device->alloc, pAllocator, sizeof(*buffer), 8,