Vulkan SC: Significant Ecosystem and Tooling Updates

Vulkan® SC is a streamlined API based on the Khronos® Vulkan API that enables state-of-the-art GPU-accelerated graphics and computation to be deployed in safety-critical systems. On September 27, 2023, the Vulkan SC Working Group at Khronos released the latest Vulkan SC 1.0.13 maintenance update. Alongside the new specification there are significant Vulkan SC tooling updates and streamlined ecosystem synergy with mainstream Vulkan. Read on to discover more!
Vulkan SC Specification Build Streamlining
At first sight, Vulkan SC 1.0.13 seems to be a minor specification update, but there has been significant work behind-the-scenes to streamline how the Vulkan and Vulkan SC specifications build on each other.
The previous Vulkan SC specification releases (1.0.8 through 1.0.12) were created by adding Vulkan SC modifications to the Vulkan 1.2.202 specification. Since that point, Vulkan has seen the release of the 1.3 specification and almost weekly maintenance updates (which to date bring it to version 1.3.266) causing significant divergence in the underlying specification sources used for Vulkan and Vulkan SC.
In order to streamline on-going updates for Vulkan SC that leverage Vulkan advances, the Vulkan and Vulkan SC Working Groups have collaborated to produce a unified set of sources that can be used to build both Vulkan and Vulkan SC specifications. This enables Vulkan SC to easily incorporate editorial changes and specification fixes from Vulkan and enable new extensions for Vulkan SC.
This was achieved by upstreaming the Vulkan SC specification to Vulkan-Docs repository. While this repository can be used to build either the Vulkan or Vulkan SC specifications, it is the official source for only the Vulkan specifications. In order to enable short-term updates to Vulkan SC that do not interfere with Vulkan releases, and vice versa, VulkanSC-Docs remains the official source for the Vulkan SC specifications, allowing each working group to release updates independently. The Vulkan SC Working Group aims to update the base Vulkan version used for Vulkan SC several times a year.
The new Vulkan SC 1.0.13 release is based on Vulkan 1.2.257 sources—the Vulkan version at the point of the last sync update. Note that while the unified specification sources include Vulkan 1.3, Vulkan SC 1.0 will continue to be based on Vulkan 1.2 spec functionality and will adopt only maintenance fixes and potentially new extensions. A future API version (which has not been planned at this point) will be required to integrate Vulkan 1.3 support into Vulkan SC.
Vulkan SC 1.0.13 provides identical functionality to the 1.0.12 specification apart from bug fixes and spec clarifications adopted from Vulkan, together with the VK_QNX_external_memory_screen_buffer vendor extension. There are some ABI-compatible header deltas resulting from picking up types which are aliased to core types in Vulkan 1.3. Please contact the Vulkan SC working group or your vendor(s) if you need additional extensions to be exposed in Vulkan SC.
Vulkan SC Ecosystem Component Updates
The Vulkan SC 1.0.13 release brings a major update to Vulkan SC ecosystem components, capturing a significant amount of added functionality for developers in a set of newly organized, dedicated repositories.
Following a similar approach to the Vulkan SC specification repository, most Vulkan SC ecosystem components are now provided in the form of downstream forks of the corresponding Vulkan repositories amended with Vulkan SC-specific modifications and features. This model enables the Vulkan SC ecosystem to develop independently from Vulkan, while leveraging features and functionality that are common across Vulkan and Vulkan SC.
Ecosystem Component Name |
Vulkan SC Repository (downstream fork) |
Vulkan Repository (upstream) |
---|---|---|
Specification | VulkanSC-Docs | Vulkan-Docs |
API Headers | VulkanSC-Headers | Vulkan-Headers |
Loader | VulkanSC-Loader | Vulkan-Loader |
Validation Layers | VulkanSC-ValidationLayers | Vulkan-ValidationLayers |
Development Tools | VulkanSC-Tools | Vulkan-Tools |
Vulkan and Vulkan SC Ecosystem Components
With the new infrastructure, this means that all new ecosystem capabilities and maintenance updates that are common to both Vulkan and Vulkan SC will ultimately land in both repositories. At the same time, the Vulkan SC ecosystem repositories can receive further additions tailored to the needs of Vulkan SC developers and applications.

As shown in the diagram, general contributions and contributions specific to Vulkan will continue to happen through the upstream repositories. Vulkan SC-specific contributions are welcome on the new Vulkan SC ecosystem repositories through the familiar Github issue and PR mechanics. Retaining separate Vulkan SC ecosystem repositories enables both ecosystems to release updates independently without interfering with the other.
The Vulkan SC ecosystem repositories have the following branch structure:
<strong>sc_main</strong>
(default branch) - contains the Vulkan SC ecosystem component code.<strong>main</strong>
(for repositories following their upstream counterpart) - contains the latest revision of the upstream Vulkan ecosystem component code that is the basis for the Vulkan SC ecosystem code.
Updates to a new API revision are tagged using the format <strong>vksc<<em>version</em>>.<<em>patch</em>></strong>
(e.g. <strong>vksc1.0.13</strong>
).
A side effect of the Vulkan SC ecosystem components being forks of the corresponding Vulkan ecosystem components is that all the Vulkan-specific component codes are usually available in the downstream repositories. In order to build the Vulkan SC components, most components generally provide the following build options to enable SC-specific functionality:
- CMake builds need to be configured by adding the
<strong>VULKANSC=ON</strong>
- Generator scripts (generally used only by contributors) now accept a new command line option that enables selecting the target API (
<strong>--api vulkansc</strong>
or<strong>-api vulkansc</strong>
, depending on the conventions of the corresponding script).
Further details about build and usage instructions can be found below, and in the documentation files of the respective repositories.
Vulkan SC Headers
Previous releases of the Vulkan SC headers were published on the <strong>sc_main</strong>
branch of the upstream Vulkan-Headers repository. With this release the Vulkan SC headers moved to a dedicated repository called VulkanSC-Headers. The <strong>sc_main</strong>
branch continues to host the latest Vulkan SC headers now in this new repository and the tag for the first official release is available under the name <strong>vksc1.0.13</strong>
.
The new repository has also been enhanced with additional script tooling and build options that enable generating combined headers that contain both Vulkan and Vulkan SC API definitions. These facilities are not expected to be used by users of the APIs, rather, they enable the Vulkan SC ecosystem components to leverage upstream Vulkan ecosystem code that rely on the presence of all Vulkan APIs.
Vulkan SC Loader
The Vulkan SC Loader received an update that improves integration with the new features of the Vulkan SC ecosystem stack.
The source code of the loader continues to be available in the <strong>sc_main</strong>
branch of the VulkanSC-Loader repository and can be built by following the instructions below:
- Clone the Vulkan SC Loader repository
git clone git@github.com:KhronosGroup/VulkanSC-Loader.git cd VulkanSC-Loader
- Configure the CMake project for Vulkan SC, e.g. as follows:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DVULKANSC=ON -DUPDATE_DEPS=ON -DCMAKE_INSTALL_PREFIX=build/install
- Build and install the project
cmake –build . –config Release –target install
Vulkan SC Validation Layers
The Vulkan SC Validation Layers have received a significant upgrade since the last ecosystem component release. Previously, there was only minimal parameter validation support, but now all Validation Layers applicable to the Vulkan SC API are supported, including:
- Stateless Validation
- Core Validation
- Thread Safety Validation
- Object Lifetime Validation
- Synchronization Validation
The new revision of Stateless Validation includes fixes and improvements compared to earlier releases with full coverage of all Vulkan SC implicit valid usage clauses.
Core Validation received a major upgrade with full coverage for all Vulkan SC core and KHR extension specific valid usage conditions. Coverage for common valid usage conditions across Vulkan and Vulkan SC, as well as general validation layer features were also updated up to version 1.3.257 of the upstream Vulkan Validation Layers.
As SPIR-V shader module data is not required to be provided by a Vulkan SC application, SPIR-V related valid usage conditions are not verified currently. However, the Vulkan SC pipeline cache compilers provided by your Vulkan SC vendor may provide tools for verifying them and may also support generating debug information into the compiled pipeline caches. The Working Group’s plan is to enhance the Vulkan SC Validation Layers in a future release with support for SPIR-V shader module validation whenever such debug information (containing the necessary SPIR-V shader module data) is available in the used pipeline cache binaries. Accordingly, it is advised that developers enable generating pipeline cache debug information during development when such an option is provided by the pipeline cache compiler of their vendor.
Object Lifetime Validation is another new addition to the Vulkan SC Validation Layer stack that enables detecting resource leaks and other object handle-related errors with full support for the custom object lifetime rules of the Vulkan SC API.
Synchronization Validation (if enabled) allows developers to detect resource access hazards according to the information available to the validation layers. As detecting certain types of resource access hazards depends on having knowledge about the accesses made from SPIR-V shader code, current support is somewhat limited. In the future, whenever developers build their pipeline cache data with SPIR-V debug information, the validation layers will be able to utilize that information to be able to detect a wider set of resource access hazards.
Another significant addition to the Vulkan SC Validation Layers is a dedicated test suite with test framework mechanics for reusing the upstream Vulkan Validation Layer tests, together with Vulkan SC specific-test cases, to provide comprehensive test coverage for the functionality of the Vulkan SC Validation Layers during validation layer development.
The source code of the validation layers continue to be available in the <strong>sc_main</strong>
branch of the VulkanSC-ValidationLayers repository and can be built by following the instructions below:
- Clone the Vulkan SC Validation Layers repository
git clone git@github.com:KhronosGroup/VulkanSC-ValidationLayers.git cd VulkanSC-ValidationLayers
- Configure the CMake project for Vulkan SC, e.g. as follows:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DVULKANSC=ON -DUPDATE_DEPS=ON -DCMAKE_INSTALL_PREFIX=build/install
- Build and install the project
cmake –build . –config Release –target install
Vulkan SC Tools
The new release of the Vulkan SC ecosystem components now also includes Vulkan SC specific downstream additions to the Vulkan Tools.
The Vulkan SC Mock ICD, is the Vulkan SC equivalent of the Vulkan Mock ICD, and provides a null driver implementation of the Vulkan SC API and enables validation testing without GPU hardware.
The new Vulkan SC Device Simulation Layer is a layer derived from the Vulkan Profiles Layer and allows simulating Vulkan SC device capabilities that are different to the ones supported by the underlying driver implementation through the use of JSON device profile files. This tool is currently used to enable additional test coverage for the Vulkan SC Validation Layers, but developers may also be able to use it to test their code for portability against different sets of Vulkan SC capabilities. When enabled, the Vulkan SC Device Simulation Layer will source the simulated capabilities from the JSON device profile file specified through the <strong>VKSC_DEVSIM_PROFILE_FILE</strong>
environment variable.
The source code of the Vulkan SC Tools is available in the <strong>sc_main</strong>
branch of the VulkanSC-Tools repository and can be built by following the instructions below:
- Clone the Vulkan SC Tools repository
git clone git@github.com:KhronosGroup/VulkanSC-Tools.git cd VulkanSC-Tools
- Configure the CMake project for Vulkan SC, e.g. as follows:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DVULKANSC=ON -DUPDATE_DEPS=ON -DINSTALL_ICD=ON -DBUILD_VKSC_DEVSIM=ON -DCMAKE_INSTALL_PREFIX=build/install
- Build and install the project
cmake –build . –config Release –target install
Vulkan Tools for Vulkan SC
The Vulkan SC ecosystem stack also includes tools that are used with the Vulkan API to assist in Vulkan SC development. In particular, the JSON Gen Layer enables dumping the pipeline state and SPIR-V code for each Vulkan pipeline created by a Vulkan application into a JSON file, specified using the <strong>VK_JSON_FILE_PATH</strong>
environment variable, which can then be used as input to a Vulkan SC pipeline cache compiler to build Vulkan SC pipeline cache binaries.
The source code of the JSON Gen Layer continues to be available in the <strong>sc_main</strong>
branch of the VulkanTools-ForSC repository and can be built by following the instructions found here.
Industry support
“CoreAVI is dedicated to the advancement of safety critical standards and the adoption of Vulkan SC as a foundation layer, enabling markets that require mission critical solutions”, said Dan Joncas, chief sales & marketing officer at CoreAVI. “The advancements achieved with this initial release of the Ecosystem elements is vital to promoting the Vulkan SC standard and its use. In addition, CoreAVI demonstrates the working group's dedication and commitment to the specification, and we'd like to offer congratulations to all involved with getting us to this point. CoreAVI is at the forefront of Vulkan Safety Critical conformant GPU acceleration solutions across a wide range of platforms and industry deployments , facilitating broad validation of the specification.”
"Imagination is committed to our safety-critical market presence and is excited to see how these ecosystem updates will make it easier for our customers to create new products using our designs," said Kristof Beets, vice president of technology insights at Imagination Technologies. "The increasing maturity of the Vulkan SC ecosystem will allow this market segment to grow and make use of modern APIs and tools, enabling more performance and features while maintaining the proven safety demanded by embedded systems."
“NVIDIA has been working with the Vulkan SC and Vulkan Working Groups to streamline the on-going maintenance updates for the Vulkan SC specification and welcomes the release of the updated ecosystem components,” said Nicholas Haemel, vice president of embedded graphics and medical software, NVIDIA. “The ability to incrementally pick up improvements from the vibrant Vulkan ecosystem is critical to providing a quality development experience to Vulkan SC developers. NVIDIA is shipping conformant Vulkan SC 1.0 drivers for NVIDIA DRIVE and NVIDIA Jetson platforms and continues to test and integrate the latest ecosystem components to ensure they are compatible with our devices.”
“RasterGrid is proud to have helped the Vulkan SC Working Group to make this release happen by proposing the design and implementing the solutions that enable the Vulkan SC ecosystem components to leverage all the great work happening in the upstream Vulkan ecosystem stack without any intrusive or disruptive changes to the latter. We believe that this release marks the beginning of a new era for the Vulkan SC ecosystem with a level of synergy with the upstream components that will greatly benefit both ecosystems going forward,” said Daniel Rakos, CEO, RasterGrid.
Call to Action
The Vulkan SC 1.0.13 specification integrates over 1.5 years and 55 revisions of Vulkan maintenance releases. In addition, significant behind-the-scenes work on ecosystem components provides a solid foundation for streamlined synergy between Vulkan and Vulkan SC, and provides developers with a significantly enhanced set of tools, including upgraded Validation Layers, to provide a development experience for Vulkan SC that Vulkan developers have come to expect.
Please give the newly released Vulkan SC tools a try! We welcome your feedback, either by filing issues in the relevant repositories or by contacting the Vulkan SC Working Group.