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.
The descriptions for the Vulkan SC extensions can be found here: https://www.khronos.org/registry/VulkanSC/
You can determine exactly which Vulkan SC device extensions your NVIDIA DRIVE OS SDK supports using code such as the following:
Where instance_exts_ptr
is a pointer to an array of VkExtensionProperties
structures that contain extension names.
You can determine exactly which Vulkan SC device extensions your NVIDIA DRIVE OS SDK product supports using code such as the following:
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 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.
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.
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:
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.
VK_JSON_FILE_PATH
environment variable to a path where you want to create the JSON file.vulkansc/pcc/Linux_x86-64/pcc
and output a pipeline cache binary.-path:
The path where the JSON files are located.-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.