NVIDIA DRIVE OS Linux SDK API Reference

6.0.4 Release
Vulkan Specs and Extensions

Vulkan® is a low-level API that gives direct GPU access to developers who want the ultimate control. With a simpler, thinner driver, Vulkan has less latency and overhead than traditional OpenGL® or OpenGL® ES. Vulkan has efficient multithreading capabilities with multicore CPUs that keep the graphics pipeline loaded, enabling a new level of performance on existing hardware.

Vulkan is the first new-generation graphics and compute API that is cross-platform. This allows developers to create applications for a variety of PC and mobile devices and operating systems. Like OpenGL, Vulkan is an open, royalty-free standard for any platform to adopt. For developers who prefer to remain on OpenGL, NVIDIA continues to maintain and support OpenGL and OpenGL ES.

To learn more about Vulkan, see Vulkan.

NVIDIA DRIVE® Linux supports the Vulkan 1.3 specification. For the latest Vulkan 1.3 specification with extensions, see:

https://www.khronos.org/registry/vulkan/specs/1.3-extensions/pdf/vkspec.pdf.

Vulkan Extensions

The descriptions for the Vulkan extensions can be found here: https://www.khronos.org/registry/vulkan/

Instance Extensions

You can determine exactly which Vulkan instance extensions your NVIDIA DRIVE™ product supports using code such as the following.

uint32_t instance_ext_count = 0;
VkExtensionProperties *instance_exts_ptr = NULL;
//Get the number of extensions
vkEnumerateInstanceExtensionProperties(NULL, &instance_ext_count, NULL);
instance_exts_ptr = (VkExtensionProperties*) malloc(instance_ext_count * sizeof(VkExtensionProperties));
//Get the list of extensions
vkEnumerateInstanceExtensionProperties(NULL, &instance_ext_count, instance_exts_ptr);

Where instance_exts_ptr is a pointer to an array of VkExtensionProperties structures that will contain extension names.

Device Extensions

You can determine exactly which Vulkan device extensions your NVIDIA DRIVE® product supports using code such as the following:

uint32_t device_ext_count = 0;
VkExtensionProperties *device_exts_ptr = NULL;
//Get the number of extensions
vkEnumerateDeviceExtensionProperties(physDevice, NULL, &device_ext_count, NULL);
device_exts_ptr = (VkExtensionProperties*) malloc(device_ext_count * sizeof(VkExtensionProperties));
//Get the list of extensions
vkEnumerateDeviceExtensionProperties(physDevice, NULL, &device_ext_count, device_exts_ptr);

Where physDevice is the VkPhysicalDevice that will be queried and device_exts_ptr is a pointer to an array of VkExtensionProperties structures that will contain extension names.

You can also find the supported features and extensions of your device by building the third-party vulkaninfo app. This app can be built when you build the Vulkan loader from source. For more information about how to build the Vulkan loader from source, see the Vulkan Loader section.

Conformance status can be found at khronos.org/conformance.

Vulkan Loader

Vulkan applications interact with Vulkan drivers through the loader. The loader is responsible for supporting multiple GPUs and their drivers. For supporting the latest Vulkan API version, the loader also needs to be the matching version.

For more information, see Vulkan Loader.

Canonical provides a specific version of the loader with each Ubuntu LTS release and it is not upgraded frequently. This limits the Vulkan driver’s ability to support the latest API version. To address this, NVIDIA now provides a compatible loader version along with the DRIVE OS Linux and QNX releases. This ensures that applications can use the latest supported Vulkan API version.

The upstream Vulkan loader source code is available in the following git repos:

Vulkan Validation Layers

The loader also supports the Vulkan validation layers, which are optional components that augment the Vulkan system. Layers can intercept, evaluate, and modify existing Vulkan functions on their way from the application down to the hardware. Layers are a critical component of developing correct Vulkan applications.

For more information about the validation layers, see Vulkan Validation Layers.