Change log for March 6, 2026 Vulkan 1.4.345 spec update: #1364
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Copyright 2021-2026 The Khronos Group Inc. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| # GitHub CI file for vulkan spec and header generation | |
| # See .gitlab-ci.yml for non-Actions comments and step dependencies. | |
| name: CI | |
| # Controls when the action will run. | |
| on: | |
| # Triggers the workflow on push or manual dispatch, but not on tags. | |
| # This is so there are not duplicate CI runs when the periodic | |
| # specification updates are tagged. | |
| push: | |
| branches: | |
| - '*' | |
| tags-ignore: | |
| - '*' | |
| # Allows you to run this workflow manually from the Actions tab | |
| workflow_dispatch: | |
| # When a pull request is opened from a local branch or fork | |
| pull_request: | |
| jobs: | |
| license-check: | |
| name: Verify repository license compliance | |
| runs-on: ubuntu-latest | |
| # We now refer to the container by its SHA instead of the name, to prevent | |
| # caching problems when updating the image. | |
| # container: khronosgroup/docker-images:asciidoctor-spec.20240726 | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: REUSE license checker | |
| run: reuse lint | |
| consistency-check: | |
| name: Run consistency checks on the spec and XML sources | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| steps: | |
| # The repo is extracted under /__w/Vulkan-Docs/Vulkan-Docs, apparently | |
| # with different ownership than the checks performed below. | |
| # This causes 'fatal: detected dubious ownership in repostory' and | |
| # failure to run the checks, although it is not actually propagated | |
| # back to the Makefile as errors. | |
| - uses: actions/checkout@v4 | |
| - name: Internal self-test of the check_spec_links script | |
| run: pytest test*.py | |
| working-directory: scripts | |
| - name: Generate a summary of problems for CI logs (if any) | |
| run: | | |
| git config --global --add safe.directory '*' | |
| mkdir -p gen/out/checks | |
| python3 scripts/check_spec_links.py --html=gen/out/checks/problems.html > /dev/null || true | |
| make CHECK_XREFS= allchecks | |
| spec-extension-branch-check: | |
| name: Consistency check for extension development branches | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| steps: | |
| # Consistency check for extension development branches | |
| # First verify that SPEC_VERSION >= 1 (-test argument) | |
| # Then verify that core + extension spec builds for extension development | |
| # branches (-build argument) | |
| # This only runs on merge requests where CI_COMMIT_BRANCH is defined, and is | |
| # a valid extension name, or is mapped to one in an exception list in | |
| # scripts/testSpecVersion.py | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| echo "Branch name is ${{github.ref_name}}" | |
| python3 scripts/testSpecVersion.py -branch ${{github.ref_name}} -test -build | |
| spec-toolchain: | |
| name: Build a test spec and check against expectation, to make sure the spec toolchain works as expected | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: ./testBuild | |
| spec-core: | |
| name: Build the core-only spec, to catch some incorrect ifdef errors | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: ./makeSpec -clean -spec core -genpath gencore QUIET= -j${nproc} -Otarget html | |
| spec-generate: | |
| name: Build the vulkan specification and generate any associated files (such as vulkan.h) | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Validate the XML before building anything using it | |
| run: make -C xml validate | |
| - name: Build the ratified-only spec, to catch incorrect ifdef errors affecting ratification submissions | |
| run: ./makeSpec -clean -spec ratified -genpath genrat QUIET= -j${nproc} -Otarget html | |
| - name: Build the all-extensions spec as published in the registry, with other common targets | |
| run: ./makeSpec -clean -spec all QUIET= -j${nproc} -Otarget manhtmlpages validusage styleguide registry html | |
| - name: Check consistency of internal xrefs and anchors in the output, now that an HTML output is available | |
| run: make check-xrefs | |
| - name: Build headers, for use by all later stages | |
| run: make -C xml install test vtest | |
| - name: Package generated spec | |
| # https://github.com/actions/upload-artifact#limitations | |
| # upload-artifact would upload all of almost 10k files individually | |
| # to GitHub, taking an inordinate amount of time. | |
| # Make a single tarball to upload instead | |
| run: tar -cvf spec-outputs.tar gen/ genrat/ | |
| - name: Archive generated spec | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: spec-outputs | |
| path: spec-outputs.tar | |
| hpp-generate: | |
| name: Generate the vulkan C++ header (vulkan.hpp) | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| needs: spec-generate | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Generate the vulkan C++ header (vulkan.hpp) | |
| # Failure (should be) allowed, for now | |
| - name: Download generated spec | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: spec-outputs | |
| - name: Unpack generated spec | |
| run: tar -xvf spec-outputs.tar | |
| - run: | | |
| SPEC_DIR="${PWD}" | |
| git clone https://github.com/KhronosGroup/Vulkan-Hpp.git --depth 1 | |
| cd Vulkan-Hpp | |
| git submodule update --init --recursive --depth 1 -- tinyxml2 | |
| cmake -B build -G Ninja \ | |
| -D VulkanRegistry_DIR=${SPEC_DIR}/xml \ | |
| -D VULKAN_HPP_GENERATOR_BUILD=ON \ | |
| -D VULKAN_HPP_RUN_GENERATOR=ON \ | |
| -D CMAKE_BUILD_TYPE=Release | |
| cmake --build build --parallel | |
| cp vulkan/*.hpp ${SPEC_DIR}/gen/include/vulkan/ | |
| - name: Upload generated hpp | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hpp-outputs | |
| path: gen/include/ | |
| # Run the CTS Vulkan framework tests, to make sure XML changes will not | |
| # cause problems there. | |
| cts-framework-tests: | |
| name: Run Vulkan CTS framework tests to validate against XML changes | |
| runs-on: ubuntu-latest | |
| container: khronosgroup/docker-images@sha256:f1ca671f3bdb10ad49e238b9bf28853088a21af49504498fc9084c9b4fea4762 | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Sparse/shallow clone of CTS GitHub repository to pull only relevant parts | |
| run: | | |
| git clone --sparse --depth 1 --single-branch --branch main https://github.com/KhronosGroup/VK-GL-CTS.git | |
| cd VK-GL-CTS | |
| # Add sparse checkout paths for required directories | |
| git sparse-checkout add scripts external/vulkancts/framework external/vulkancts/scripts | |
| # Link the spec project into CTS hierarchy, instead of cloning it | |
| mkdir external/vulkan-docs | |
| ln -s `cd .. ; pwd` external/vulkan-docs/src | |
| - name: Run the Vulkan-specific tests (from scripts/check_build_sanity.py) # codespell:allow sanity | |
| run: | | |
| cd VK-GL-CTS | |
| python3 external/vulkancts/scripts/gen_framework.py | |
| python3 external/vulkancts/scripts/gen_framework_c.py | |
| python3 external/vulkancts/scripts/gen_framework.py --api SC | |
| python3 external/vulkancts/scripts/gen_framework_c.py --api SC | |
| h-compile: | |
| name: Compile a simple test program that uses vulkan.h | |
| runs-on: ubuntu-latest | |
| needs: spec-generate | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download generated files | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: spec-outputs | |
| - name: Unpack generated spec | |
| run: tar -xvf spec-outputs.tar | |
| # Compile a simple test program that uses vulkan.h | |
| # The fake platform headers in tests/ allow compiling with all Vulkan | |
| # platforms at once. | |
| - run: | | |
| gcc -c -std=c11 -Igen/include -Itests -Wall -Wextra -Werror tests/htest.c | |
| clang -c -std=c11 -Igen/include -Itests -Wall -Wextra -Werror tests/htest.c | |
| hpp-compile: | |
| name: Compile a simple test program that uses vulkan.hpp | |
| runs-on: ubuntu-latest | |
| needs: [spec-generate, hpp-generate] | |
| continue-on-error: true | |
| strategy: | |
| matrix: | |
| cpp_standard: [c++11, c++14, c++17, c++20, c++23] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download generated spec | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: spec-outputs | |
| - name: Unpack generated spec | |
| run: tar -xvf spec-outputs.tar | |
| - name: Download generated hpp | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: hpp-outputs | |
| path: gen/include/ | |
| # Compile a simple test program that uses vulkan.hpp | |
| # Depends on spec-generate and hpp-generate | |
| # Failure (should be) allowed, for now | |
| - run: | | |
| g++ -c -std=${{matrix.cpp_standard}} -Igen/include -IVulkan-Hpp -Wall -Wextra -Werror -Wpedantic tests/hpptest.cpp | |
| clang++ -c -std=${{matrix.cpp_standard}} -Igen/include -IVulkan-Hpp -Wall -Wextra -Werror -Wpedantic tests/hpptest.cpp |