.. _SD.GraphicsProgramming.VulkanSC: .. include:: /content/swdocs.rsts .. spelling:: vulkanscinfo prebuilt installable vksc computeparticles gv ga interop NvSci vulkan sc sdk dev Vulkan SC !!!!!!!!! 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. Jetson Linux supports the Vulkan SC 1.0 specification. For the latest Vulkan SC 1.0 specification with extensions, refer to `Vulkan SC Specification `_. Vulkan SC on Jetson Linux is not safety-certified. Please contact |NVIDIA(r)| if you need a safety-certified deployment. Vulkan SC Extensions @@@@@@@@@@@@@@@@@@@@ Refer to https://www.khronos.org/registry/VulkanSC/ for descriptions about the Vulkan SC extensions. Instance Extensions =================== To determine the Vulkan SC instance extensions that your Jetson Linux supports, use the following code: :: 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 ================= To determine the Vulkan SC device extensions that your Jetson Linux supports, use the following code: :: 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. To determine the supported features and extensions of your device, run the third-party ``vulkanscinfo`` sample application that is provided with the Jetson Linux. Refer to :ref:`Vulkan SC samples ` for more information about using the vulkanscinfo command. Window System ============= Vulkan SC doesn't support Vulkan Window System Integration (WSI) Layers. However, as an alternative solution of displaying results, Vulkan SC supports to interop with :ref:`OpenWFD ` via NvSci extensions (`VK_NV_external_memory_sci_buf `_ and `VK_NV_external_sci_sync `_). Refer to :ref:`Vulkan SC samples ` for example usages. 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. To support the latest Vulkan SC API version, the loader version must match the API version. The source for the Vulkan SC loader is not yet public, so Jetson Linux provides a prebuilt version of the Vulkan SC loader, and its source, until the loader is publicly available. The Vulkan SC loader is installed at following locations: * JSON file - ``/etc/vulkansc/icd.d/nvidia_icd_vksc.json`` * Source - ``/usr/src/nvidia/vulkan-sc/vulkan-sc-ecosystem/vulkan-sc-loader`` * Binary - ``/usr/lib/aarch64-linux-gnu/tegra/libvulkansc.so.1.0.10`` Vulkan SC Validation Layer @@@@@@@@@@@@@@@@@@@@@@@@@@@ The loader also supports the Vulkan SC validation layer, 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 to the hardware. Layers are a critical component of developing correct Vulkan SC applications. The source for the Vulkan SC validation layer is not yet public, so Jetson Linux provides a prebuilt version of the Vulkan SC validation layer, and its source, until the loader is publicly available. The Vulkan SC validation layer is installed at following locations: * JSON - ``/etc/vulkansc/icd.d/VkSCLayer_khronos_validation.json`` * Source - ``/usr/src/nvidia/vulkan-sc/vulkan-sc-ecosystem/vulkan-sc-layers/validation_layers/`` * Binary - ``/usr/lib/aarch64-linux-gnu/tegra/libVkSCLayer_khronos_validation.so`` The Vulkan SC validation layer in the current form are not fully functional 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, to running pipeline compilation offline and provide the output at runtime, Vulkan SC uses a Pipeline Cache Compiler (PCC) tool that is provided with each installable client driver that implements Vulkan SC. PCC tool requires the input that represents the pipeline state in JSON format, the schema for the input JSON file is outlined at `JSON schema `_. In order to easily generate the input JSON files, it is recommended to use the ``JSON generation 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 loader is not yet public, so Jetson Linux provides a prebuilt version of the Vulkan SC loader, and its source, until the loader is publicly available. JSON generation layer is installed at following locations: * JSON file - ``VkLayer_json_gen.json`` * Source - ``/usr/src/nvidia/vulkan-sc/vulkan-sc-ecosystem/vulkan-sc-layers/json_generation_layers/`` * Binary - ``/usr/lib/aarch64-linux-gnu/tegra/libVkLayer_json_gen.so`` The basic workflow of the JSON generator layer is outlined in slide 10 `here `_. Here are the steps for general usage: #. Follow the standard procedure for enabling Vulkan layers. #. Set the ``VK_ICD_FILENAMES`` environment variable to the location of ``VkLayer_json_gen.json``. #. Enable the layer in your application. For more information about enabling the layer in your application, see `Layers Overview and Configuration `_. #. Set the ``VK_JSON_FILE_PATH`` environment variable to a path where you want to create the JSON file. #. Use the offline JSON file generated from step 2 as input to the PCC tool provided under ``/usr/bin/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 a 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. Refer to steps 3-5 in :ref:`Vulkan SC samples ` for more information about using the PCC tool and examples. Vulkan SC Packages @@@@@@@@@@@@@@@@@@ Jetson Linux provides four packages for driver, SDK, development tools and samples: * nvidia-l4t-vulkan-sc This package includes the Vulkan SC driver (``libnvidia-vksc-core.so``) * nvidia-l4t-vulkan-sc-dev This package includes the Vulkan SC headers that are installed at ``/usr/include/VulkanSC/vulkan/`` and PCC tool. * nvidia-l4t-vulkan-sc-sdk This package includes the prebuilt binaries and sources for Vulkan SC loader, Vulkan SC layers. * nvidia-l4t-vulkan-sc-samples This packages includes the prebuilt binaries and sources for :ref:`Vulkan SC samples `.