Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"permissions": {
"allow": [
"Bash(git ls-remote:*)"
],
"deny": [],
"ask": []
}
}
68 changes: 56 additions & 12 deletions .github/workflows/build-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ jobs:
build-swiftshader:
strategy:
matrix:
os: [windows-2022, ubuntu-20.04, macOS-13]
os: [windows-2025, ubuntu-24.04, macOS-15, macOS-15-intel]
include:
- os: windows-2022
- os: windows-2025
swiftshaderLibName: vk_swiftshader.dll
- os: ubuntu-20.04
- os: ubuntu-24.04
swiftshaderLibName: libvk_swiftshader.so
- os: macOS-13
- os: macOS-15
swiftshaderLibName: libvk_swiftshader.dylib
- os: macOS-15-intel
swiftshaderLibName: libvk_swiftshader.dylib

name: 'swiftshader-${{ matrix.os }}'
Expand All @@ -31,7 +33,11 @@ jobs:
- name: Build Swiftshader
shell: bash
run: |
cmake -S Swiftshader -B Swiftshader/build_out -DCMAKE_BUILD_TYPE=Release
if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then
cmake -S Swiftshader -B Swiftshader/build_out -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64
else
cmake -S Swiftshader -B Swiftshader/build_out -DCMAKE_BUILD_TYPE=Release
fi
cmake --build Swiftshader/build_out --target vk_swiftshader --config Release --parallel 4

if [[ "${{ runner.os }}" == "Windows" ]]; then
Expand All @@ -46,17 +52,31 @@ jobs:
cp Swiftshader/build_out/$OUT_DIR/${{ matrix.swiftshaderLibName }} swiftshader_artifacts
cp Swiftshader/LICENSE.txt swiftshader_artifacts

- name: Set Artifact Name
id: set-name
shell: bash
run: |
if [[ "${{ matrix.os }}" == "windows-2025" ]]; then
echo "artifact-name=swiftshader-windows-x64" >> "$GITHUB_OUTPUT"
elif [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then
echo "artifact-name=swiftshader-ubuntu-24.04-x64" >> "$GITHUB_OUTPUT"
elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then
echo "artifact-name=swiftshader-macos-15-arm64" >> "$GITHUB_OUTPUT"
elif [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then
echo "artifact-name=swiftshader-macos-15-x86_64" >> "$GITHUB_OUTPUT"
fi

- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: swiftshader-${{ matrix.os }}-x64
name: ${{ steps.set-name.outputs.artifact-name }}
path: swiftshader_artifacts

build-sdk:
strategy:
matrix:
os: [windows-2022, ubuntu-20.04, macOS-13]
sdkTag: ['vulkan-sdk-1.4.321.0', 'vulkan-sdk-1.4.309.0', 'vulkan-sdk-1.3.283.0', 'vulkan-sdk-1.3.280.0', 'vulkan-sdk-1.3.275.0', 'sdk-1.3.261.1']
os: [windows-2025, ubuntu-24.04, macOS-15, macOS-15-intel]
sdkTag: ['vulkan-sdk-1.4.328.0', 'vulkan-sdk-1.4.321.0', 'vulkan-sdk-1.4.309.0', 'vulkan-sdk-1.3.283.0', 'vulkan-sdk-1.3.280.0', 'vulkan-sdk-1.3.275.0', 'sdk-1.3.261.1']

name: '${{ matrix.sdkTag }}-${{ matrix.os }}'
runs-on: ${{ matrix.os }}
Expand All @@ -76,10 +96,23 @@ jobs:
shell: bash
run: |
SDK_VERSION=$(echo "${{ matrix.sdkTag }}" | sed -E 's/[^0-9]*([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?).*/\1/')
echo "ARTIFACT_NAME=vulkanSDK-$SDK_VERSION-${{ matrix.os }}-x64" >> $GITHUB_ENV

if [[ "${{ matrix.os }}" == "windows-2025" ]]; then
ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-windows-x64"
elif [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then
ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-ubuntu-24.04-x64"
elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then
ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-macos-15-arm64"
elif [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then
ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-macos-15-x86_64"
fi

echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV

ROOT_PATH='${{ github.workspace }}'
echo "SDK_PATH=${ROOT_PATH//\\//}/VulkanSDK/$SDK_VERSION" >> $GITHUB_ENV
SDK_PATH_VALUE="${ROOT_PATH//\\//}/VulkanSDK/$SDK_VERSION"
echo "SDK_PATH=$SDK_PATH_VALUE" >> $GITHUB_ENV
echo "VULKAN_SDK=$SDK_PATH_VALUE" >> $GITHUB_ENV

- name: Checkout Vulkan-Headers
uses: actions/checkout@v4
Expand All @@ -103,8 +136,15 @@ jobs:

- name: Build Vulkan-Loader
shell: bash
env:
# Disable vcpkg integration to prevent it from providing headers
VCPKG_INSTALLATION_ROOT: ""
run: |
cmake -S Vulkan-Loader -B Vulkan-Loader/build -DVULKAN_HEADERS_INSTALL_DIR=${{ env.SDK_PATH }} -DLOADER_USE_UNSAFE_FILE_SEARCH=ON -DCMAKE_BUILD_TYPE=Release
if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then
cmake -S Vulkan-Loader -B Vulkan-Loader/build -DCMAKE_TOOLCHAIN_FILE="" -DCMAKE_PREFIX_PATH=${{ env.SDK_PATH }} -DVulkanHeaders_DIR=${{ env.SDK_PATH }}/share/cmake/VulkanHeaders -DVULKAN_HEADERS_INSTALL_DIR=${{ env.SDK_PATH }} -DLOADER_USE_UNSAFE_FILE_SEARCH=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64
else
cmake -S Vulkan-Loader -B Vulkan-Loader/build -DCMAKE_TOOLCHAIN_FILE="" -DCMAKE_PREFIX_PATH=${{ env.SDK_PATH }} -DVulkanHeaders_DIR=${{ env.SDK_PATH }}/share/cmake/VulkanHeaders -DVULKAN_HEADERS_INSTALL_DIR=${{ env.SDK_PATH }} -DLOADER_USE_UNSAFE_FILE_SEARCH=ON -DCMAKE_BUILD_TYPE=Release
fi
cmake --build Vulkan-Loader/build --config Release --parallel 4
cmake --install Vulkan-Loader/build --prefix ${{ env.SDK_PATH }}

Expand All @@ -118,7 +158,11 @@ jobs:
- name: Build Vulkan-ValidationLayers
shell: bash
run: |
cmake -S Vulkan-ValidationLayers -B Vulkan-ValidationLayers/build -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE=Release
if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then
cmake -S Vulkan-ValidationLayers -B Vulkan-ValidationLayers/build -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64
else
cmake -S Vulkan-ValidationLayers -B Vulkan-ValidationLayers/build -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE=Release
fi
cmake --build Vulkan-ValidationLayers/build --config Release --parallel 4
cmake --install Vulkan-ValidationLayers/build --prefix ${{ env.SDK_PATH }}
cp Vulkan-ValidationLayers/LICENSE.txt ${{ env.SDK_PATH }}
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ jobs:
Build:
strategy:
matrix:
os: [windows-2019, windows-2022, ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macOS-13, macOS-14, macOS-15]
sdkVersion: [1.4.321.0]
os: [windows-2025, ubuntu-24.04, macOS-15, macOS-15-intel]
sdkVersion: [1.4.328.0]

name: test ${{ matrix.os }} | ${{ matrix.sdkVersion }}
runs-on: ${{ matrix.os }}
Expand Down Expand Up @@ -69,6 +69,12 @@ jobs:
- name: Run Test
shell: bash
run: |
cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}"
if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then
cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}" -DCMAKE_OSX_ARCHITECTURES=x86_64
elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then
cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}" -DCMAKE_OSX_ARCHITECTURES=arm64
else
cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}"
fi
cmake --build build --config Release
./vulkan-ci-test
33 changes: 20 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ This action performs minimal setup to enable building and running Vulkan applica
with:
# VulkanSDK version to use
# Must be a supported version
# The default value is 1.4.309.0
sdkVersion: 1.4.309.0
# The default value is 1.4.328.0
sdkVersion: 1.4.328.0

# Optional path to installation path
# The default value is '${{ github.workspace }}`
Expand All @@ -36,26 +36,33 @@ In addition to the output variables, the action updates the following contexts t
- `$VULKAN_SDK/bin` (Windows only)

## Supported VulkanSDK Versions
- 1.4.328.0
- 1.4.321.0
- 1.4.309.0
- 1.3.283.0
- 1.3.280.0
- 1.3.275.0
- 1.3.261.1

## Supported Runners
The intention is to support all standard GitHub-hosted runners. Tests currently run on:
- `windows-2019`
- `windows-2022`
- `ubuntu20.04`
- `ubuntu22.04`
- `ubuntu24.04`
- `macOS-13`
- `macOS-14`
- `macOS-15`
Tests currently run on:
- `windows-2025` (x64)
- `ubuntu-24.04` (x64)
- `macOS-15` (ARM64)
- `macOS-15-intel` (x86_64)

macOS binaries are available for both ARM64 (Apple Silicon) and x86_64 (Intel). The action automatically detects the runner architecture and downloads the appropriate artifacts.

| Runner | Architecture | SDK Artifact | SwiftShader Artifact |
|----------------|--------------|------------------------------------------|----------------------------------|
| windows-2025 | x64 | vulkanSDK-{version}-windows-x64.zip | swiftshader-windows-x64.zip |
| ubuntu-24.04 | x64 | vulkanSDK-{version}-ubuntu-24.04-x64.zip | swiftshader-ubuntu-24.04-x64.zip |
| macOS-15 | ARM64 | vulkanSDK-{version}-macos-15-arm64.zip | swiftshader-macos-15-arm64.zip |
| macOS-15-intel | x86_64 | vulkanSDK-{version}-macos-15-x86_64.zip | swiftshader-macos-15-x86_64.zip |

## Known Limitations
Due to significant build times, pre-built artifacts are downloaded from the corresponding release of this action. This requires the action version to be specified as a tag - targeting a SHA will not work.

The Vulkan loader is built with `LOADER_USE_UNSAFE_FILE_SEARCH=ON` to more reliably allow file discovery through environment variables. To state the obvious, the artifacts provided here are not intended for use outside of testing environments.

Currently, all macOS binaries are built for x86_64.


20 changes: 13 additions & 7 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ inputs:
sdkVersion:
description: 'Requested VulkanSDK version'
required: false
default: 1.4.309.0
default: 1.4.328.0
installPath:
description: 'Directory to install to'
required: false
Expand All @@ -29,16 +29,22 @@ runs:
ACTION_TAG: ${{ github.action_ref }}
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-windows-2022-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-windows-2022-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-windows-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-windows-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-lib-name=vk_swiftshader.dll" >> "$GITHUB_OUTPUT"
elif [[ "${{ runner.os }}" == "Linux" ]]; then
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-ubuntu-20.04-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-ubuntu-20.04-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-ubuntu-24.04-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-ubuntu-24.04-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-lib-name=libvk_swiftshader.so" >> "$GITHUB_OUTPUT"
elif [[ "${{ runner.os }}" == "macOS" ]]; then
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-macOS-13-x64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-macOS-13-x64.zip" >> "$GITHUB_OUTPUT"
ARCH=$(uname -m)
if [[ "$ARCH" == "x86_64" ]]; then
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-macos-15-x86_64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-macos-15-x86_64.zip" >> "$GITHUB_OUTPUT"
else
echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-macos-15-arm64.zip" >> "$GITHUB_OUTPUT"
echo "vk-ci-swiftshader-artifact-name=swiftshader-macos-15-arm64.zip" >> "$GITHUB_OUTPUT"
fi
echo "vk-ci-swiftshader-lib-name=libvk_swiftshader.dylib" >> "$GITHUB_OUTPUT"
else
echo "Unsupported OS: ${{ runner.os }}"
Expand Down
4 changes: 0 additions & 4 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@ project(VulkanCI-Test)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

if (APPLE)
set(CMAKE_OSX_ARCHITECTURES "x86_64")
endif()

if (NOT DEFINED VKCI_API_VERSION)
message(FATAL_ERROR "Must define VKCI_API_VERSION")
endif()
Expand Down
Loading