NVIDIA DRIVE OS Linux SDK API Reference

6.0.4 Release
Vulkan SC Specs and Extensions

Vulkan® SC is a streamlined, deterministic, robust API based on Vulkan 1.2 that enables state-of-the-art GPU-accelerated graphics and computation to be deployed in safety-critical systems that are certified to meet industry functional safety standards.

https://www.khronos.org/vulkansc/

NVIDIA DRIVE® Linux supports the Vulkan SC 1.0 specification. For the latest Vulkan SC 1.0 specification with extensions, see Vulkan SC Specification.

Vulkan SC Extensions

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

Instance Extensions

You can determine exactly which Vulkan SC device extensions your NVIDIA DRIVE OS SDK 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 contain extension names.

Device Extensions

You can determine exactly which Vulkan SC device extensions your NVIDIA DRIVE OS SDK 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 contain extension names.

You can also find the supported features and extensions of your device by running the third-party vulkanscinfo sample application provided with the Drive OS SDK. For more information about using the vulkanscinfo command, see "The vulkanscinfo Command" in the Running the Vulkan SC Samples topic in the Developer Guide.

Vulkan SC Loader

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

The source for the Vulkan SC loader is not public yet at https://github.com/KhronosGroup/; however, the Drive OS SDK provides a prebuilt version of the Vulkan SC loader and its source as a convenience until public access is available.

Vulkan SC Validation Layers

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

The source for the Vulkan SC validation layers is not public yet at https://github.com/KhronosGroup/; however, the Drive OS SDK provides a prebuilt version of the Vulkan SC validation layers and its source as a convenience until public access is available. The Vulkan SC validation layers in the current form are also incomplete and currently only provide parameter validation checks.

Vulkan SC Pipeline Cache Compiler (PCC) Tool

Safety critical applications cannot perform online pipeline compilation. As a result, Vulkan SC needs a method of running pipeline compilation offline and then providing the output at runtime. This is accomplished through a Pipeline Cache Compiler (PCC) tool provided with each installable client driver implementing Vulkan SC. Using a PCC tool requires using the JSON generator layer, which is a new Vulkan layer for use with a Vulkan application to generate input for the PCC tool to create a pipeline cache. The source for the Vulkan SC JSON generator layer is not public yet at https://github.com/KhronosGroup/; however, the Drive OS SDK provides a prebuilt version and source as a convenience until public access is available. The schema for these JSON files is outlined at JSON schema, and the basic workflow of the JSON generator layer is outlined in slide 10 here.

General usage is as follows:

  1. Follow the standard procedure for enabling Vulkan layers.
    Set the VK_ICD_FILENAMES environment variable to the location of VkLayer_json_gen.json, and then enable the layer in your application.

    For more information about enabling the layer in your application, see Layers Overview and Configuration.

  2. Set the VK_JSON_FILE_PATH environment variable to a path where you want to create the JSON file.
  3. Use the offline JSON file generated from step 2 as input to the PCC tool provided in the Drive OS SDK under vulkansc/pcc/Linux_x86-64/pcc and output a pipeline cache binary.
    The PCC tool supports the following arguments:
    • -path: The path where the JSON files are located.
      The tool parses all JSON files in a given path.
    • -chip: The target chip architecture to which the binaries will be compiled. Specify gv11b for an Xavier board and ga10b for an Orin board.
    • -out: The output binary name.
    • -help: Display the help options.
    • -hex: Get hex dump to embed the output pipeline cache data in C/C++ code directly.

For more information about using the PCC tool and examples, see the "Running the vksc_01tri Sample" section (steps 3-5) or the "Running Host x86 Binaries to Generate JSON Files" section in the Running the Vulkan SC Samples topic in the Developer Guide.