vkCreateImage returns VK_ERROR_OUT_OF_DEVICE_MEMORY

This repo contains a small Vulkan program that attempts to create a vkImage with the maximum extent as reported by VkImageFormatProperties.maxExtent. vkCreateImage fails with VK_ERROR_OUT_OF_DEVICE_MEMORY. The README in the repo contains information on how to build and run it. (It’s really easy).

I ran this on my laptop to get output for both NVIDIA and Intel. Here’s the output:

Creating device: NVIDIA RTX A5000 Laptop GPU
NVIDIA Driver version: 517.40.0.0
VkImageFormatPropeties.maxExtent = { 16384, 16384, 16384 }
VkPhysicalDeviceFormatProperties2.properties.limits.maxImageDimension3D = 16384
Creating image with extent: { 16384, 16384, 16384 }
vkCreateImage returned VK_ERROR_OUT_OF_DEVICE_MEMORY

Creating device: Intel(R) UHD Graphics
Intel Driver version: 100.533
VkImageFormatPropeties.maxExtent = { 16384, 16384, 2048 }
VkPhysicalDeviceFormatProperties2.properties.limits.maxImageDimension3D = 2048
Creating image with extent: { 16384, 16384, 2048 }
vkCreateImage returned VK_SUCCESS

Note that on Intel the result is as expected, but on NVIDIA it is not, as creating an image with the maximum extent fails.

I added another reproducer to the github repo. This one repeatedly creates and deletes a 1024 x 1024 x1024 vkImage. On my Quadro RTX 8000 (Turing) this fails after ~800 iterations. On the RTX A5000 Laptop GPU and the Intel UHD Graphics GPU, it doesn’t fail. Please take a look at the README there and the reproducers for all the details.

I’m working on a 3D MegaTexture system, and would like to create images that are as large as possible, but sparsely resident and sparsely bound.

Cheers,
Frode