by Mark Bellamy, Arm Limited; Daniel Koch, NVIDIA vulkan, vulkansc
On June 21, 2024 the Vulkan® SC™ working group at the Khronos® Group released the Vulkan SC 1.0.15 specification, the latest maintenance update to the “Vulkan Safety Critical” open standard API, which enables GPU-accelerated graphics and computation to be deployed in systems that are certified to meet industry functional safety standards.
This is an update on the latest Vulkan SC developments, including significant new functionality in the Vulkan SC validation layers and broadened availability of NVIDIA Vulkan SC drivers.
Vulkan SC 1.0.15 Maintenance Update
Vulkan SC leverages the mainstream Vulkan specification, adapting it for safety critical systems. The Vulkan SC 1.0.15 maintenance update moves the referenced Vulkan version to 1.2.286, incorporating the latest improvements and fixes from the Vulkan specification sources into the Vulkan SC specification. This maintenance update also ratifies a significant number of previously supported Vulkan SC extensions, providing additional patent licensing protection for Vulkan Adopters implementing that functionality, and includes updating to the latest KHR version of a number of already supported EXT extensions.
A significant number of extensions that were previously ratified in the Vulkan specification are now also ratified in Vulkan SC, including:
VK_EXT_depth_clip_enable, VK_EXT_depth_range_unrestricted
VK_EXT_discard_rectangles, VK_EXT_hdr_metadata
VK_EXT_queue_family_foreign, VK_EXT_pci_bus_info
VK_EXT_ycbcr_image_arrays, VK_EXT_custom_border_color
VK_EXT_shader_stencil_export, VK_EXT_external_memory_host
VK_EXT_external_memory_dma_buf, VK_EXT_sample_locations
VK_EXT_robustness2, VK_EXT_color_write_enable
VK_EXT_shader_atomic_float
This release includes the following ratified Vulkan SC EXT extensions that were ratified in the Vulkan 1.3 Core Specification:
VK_EXT_4444_formats, VK_EXT_extended_dynamic_state
VK_EXT_extended_dynamic_state2, VK_EXT_image_robustness
VK_EXT_shader_demote_to_helper_invocation
VK_EXT_subgroup_size_control, VK_EXT_texel_buffer_alignment
VK_EXT_texture_compression_astc_hdr
VK_EXT_ycbcr_2plane_444_format.
The Working Group also reviewed the Vulkan SC ecosystem, and some EXT extensions that have not been shipped by any implementation have been removed from the specification and replaced with the corresponding KHR extension to minimize API surface area, including:
VK_KHR_calibrated_timestamps
VK_KHR_global_priority
VK_KHR_vertex_attribute_divisor.
The Working Group has also enabled the following extensions, but did not remove the EXT versions as they are used in shipping implementations:
VK_KHR_index_type_uint8
VK_KHR_line_rasterization
Vulkan SC Validation Layer - SPIR-V Support
Along with the Vulkan SC 1.0.15 maintenance update, there has been a significant update to the open source Vulkan SC Validation Layers—including validation of SPIR-V-related Valid Usage statements.
Vulkan SC removed shader modules from the API in favor of using offline compiled pipeline caches supplied at runtime in a Vulkan SC-specific pipeline cache format. This means that the SPIR-V code for shaders is not required to be passed to the implementation, preventing the Validation Layers from intercepting and validating SPIR-V usage. However, the Vulkan SC pipeline cache format does include a VkPipelineCacheStageValidationIndexEntry that allows SPIR-V data to be embedded into the pipeline cache, enabling the Validation Layer to access the SPIR-V optionally included in the pipeline cache by the implementation’s Pipeline Cache Compiler (PCC).
The latest version of the Validation Layers has been enhanced to intercept any SPIR-V included in pipeline caches to enable validation of the SPIR-V data and API Valid Usage statements that are dependent on the SPIR-V code being available. Developers should check their GPU vendor’s documentation for how to include pipeline debug information in the Vulkan SC pipeline cache.
For more information on the development of the Validation Layer and other Vulkan SC ecosystem tools, we also recommend the recent blog from RasterGrid on the development and functionality of these tools: Behind the scenes: the Vulkan SC ecosystem.
NVIDIA Broadens Vulkan SC Driver Availability
NVIDIA is broadening the availability of Vulkan SC drivers for its GPUs. The latest NVIDIA General Release drivers starting with the R560 family, as well as NVIDIA’s Vulkan Beta drivers, now support Vulkan SC 1.0 on NVIDIA GeForce RTX and NVIDIA RTX products on both x86_64-based Windows 10/11 and Linux platforms.
This means that NVIDIA now provides Vulkan SC 1.0 support on the NVIDIA GeForce RTX, NVIDIA RTX, NVIDIA DRIVE, and NVIDIA Jetson platforms. The Vulkan SC drivers on the NVIDIA GeForce RTX, NVIDIA RTX, and NVIDIA Jetson platforms are primarily intended for development purposes—or if a developer prefers an API with more deterministic runtime behavior—with the NVIDIA DRIVE platform being used for safety-certified deployments.
Vulkan SC on NVIDIA GeForce RTX and NVIDIA RTX supports display presentation using the Direct-to-Display (VK_KHR_display) functionality. The VK_NV_acquire_winrt_display extension has been added in Vulkan SC 1.0.15 specification to support these drivers. Vulkan SC on NVIDIA DRIVE and NVIDIA Jetson supports presentation with OpenWFD via NvSci interop (VK_NV_external_memory_sci_buf and VK_NV_external_sci_sync2).
Unlike mainstream Vulkan drivers, the Vulkan SC driver does not bundle a loader, and so the NVIDIA Vulkan SC SDK must be downloaded and installed separately. The NVIDIA Vulkan SC SDK includes prebuilt open source samples, validation layers, and the json generation layer. Download links and additional details on the NVIDIA GeForce RTX and NVIDIA RTX Vulkan SC SDK can be found at: https://developer.nvidia.com/vulkan-driver#VulkanSC.
More Information
As you can see, the Vulkan SC Working Group has been busy with new developments to evolve the Vulkan SC ecosystem since the last update in October 2023.
If you have Vulkan SC questions or feedback, you are warmly encouraged to contact the Vulkan SC Working Group using Vulkan SC GitHub Discussions - we welcome your thoughts and input!
For additional information on Vulkan SC visit: khronos.org/vulkansc. If you would like to be directly involved in the development of the Vulkan SC standard, please consider joining Khronos and participating in the Vulkan SC Working Group!