From aafedb03e0be160fa30b2b88c8c42e1875715605 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:11:00 +0200 Subject: [PATCH 01/16] Add Rust CI --- .github/workflows/rust.yml | 63 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/rust.yml diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 000000000..d53c811c2 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,63 @@ +name: Rust CI + +on: + push: + branches: + - master + pull_request: + branches: + - master + +env: + CARGO_TERM_COLOR: always + +jobs: + test: + name: Test Rust Shaders + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + + steps: + - uses: actions/checkout@v4 + with: + submodules: "recursive" + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: rust-src, rustc-dev, llvm-tools + + - name: Install cargo-gpu + run: cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu + + - name: Cache cargo registry + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Compile shaders to SPIR-V + working-directory: shaders/rust + run: python3 compileshaders.py + + - name: Verify no uncommitted changes + run: | + # Check if there are any changes to tracked files + if ! git diff --exit-code; then + echo "Error: Generated SPIR-V files differ from checked-in versions" + echo "Please run 'python3 compileshaders.py' locally and commit the changes" + git diff --name-only + exit 1 + fi + + # Check for untracked files + if [ -n "$(git ls-files --others --exclude-standard)" ]; then + echo "Error: New untracked files were generated" + echo "Please add these files to git or update .gitignore:" + git ls-files --others --exclude-standard + exit 1 + fi \ No newline at end of file From 8baa10417d7752ce6c8862c98e53329ff70faf1e Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:23:00 +0200 Subject: [PATCH 02/16] Add rust deps to CI --- .github/workflows/rust.yml | 55 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index d53c811c2..775715408 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -13,17 +13,68 @@ env: jobs: test: - name: Test Rust Shaders + name: Test Rust Shaders - ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + name: Ubuntu + - os: windows-latest + name: Windows + - os: macos-latest + name: macOS-MoltenVK + use_moltenvk: true + - os: macos-latest + name: macOS-SwiftShader + use_swiftshader: true steps: - uses: actions/checkout@v4 with: submodules: "recursive" + - name: Install Vulkan SDK + uses: jakoch/install-vulkan-sdk-action@v1.0.0 + with: + vulkan_version: 1.3.268.0 + optional_components: com.lunarg.vulkan.debug + install_runtime: true + cache: true + stripdown: true + + - if: ${{ runner.os == 'Linux' }} + name: Install xvfb, llvmpipe and lavapipe + run: | + sudo apt-get update -y -qq + sudo add-apt-repository ppa:kisak/turtle -y + sudo apt-get update + sudo apt install -y xvfb libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers + + - if: ${{ matrix.use_moltenvk == true }} + name: Setup MoltenVK on macOS + run: | + # MoltenVK should be installed with the Vulkan SDK + # Find and set the ICD path + VULKAN_SDK_VERSION=$(ls -1 $HOME/VulkanSDK | head -n 1) + echo "VK_ICD_FILENAMES=$HOME/VulkanSDK/$VULKAN_SDK_VERSION/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV + + - if: ${{ matrix.use_swiftshader == true }} + name: Install SwiftShader on macOS + run: | + # Based on https://github.com/GDRETools/gdsdecomp/blob/master/.github/actions/install-swiftshader/action.yml + git clone https://github.com/google/swiftshader.git + cd swiftshader + mkdir build && cd build + cmake -DSWIFTSHADER_BUILD_TESTS=OFF -DSWIFTSHADER_BUILD_SAMPLES=OFF .. + cmake --build . --config Release + sudo mkdir -p /usr/local/share/vulkan/icd.d + sudo cp Darwin/vk_swiftshader_icd.json /usr/local/share/vulkan/icd.d/ + sudo mkdir -p /usr/local/lib + sudo cp Darwin/libvk_swiftshader.dylib /usr/local/lib/ + # Set environment variable for SwiftShader ICD + echo "VK_ICD_FILENAMES=/usr/local/share/vulkan/icd.d/vk_swiftshader_icd.json" >> $GITHUB_ENV + - name: Install Rust uses: dtolnay/rust-toolchain@stable with: From 047a7ac9e9c362ea10164da264c0667e4b22dae1 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:31:58 +0200 Subject: [PATCH 03/16] Install vulkan manually --- .github/workflows/rust.yml | 90 ++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 27 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 775715408..526a7c5a7 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -16,6 +16,7 @@ jobs: name: Test Rust Shaders - ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: include: - os: ubuntu-latest @@ -35,45 +36,80 @@ jobs: submodules: "recursive" - name: Install Vulkan SDK - uses: jakoch/install-vulkan-sdk-action@v1.0.0 - with: - vulkan_version: 1.3.268.0 - optional_components: com.lunarg.vulkan.debug - install_runtime: true - cache: true - stripdown: true + if: ${{ runner.os != 'Linux' }} + shell: bash + env: + VULKAN_SDK_VERSION: 1.3.250.1 + run: | + if [ "$RUNNER_OS" == "macOS" ]; then + wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/mac/vulkansdk-macos-$VULKAN_SDK_VERSION.dmg?Human=true" -O vulkan-sdk.dmg + hdiutil attach vulkan-sdk.dmg + sudo /Volumes/vulkan-sdk/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install + hdiutil detach /Volumes/vulkansdk-macos-$VULKAN_SDK_VERSION + echo "VULKAN_SDK_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV + echo "VULKAN_SDK=$VULKAN_SDK_PATH/macOS" >> $GITHUB_ENV + echo "DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV + echo "PATH=$VULKAN_SDK/bin:$PATH" >> $GITHUB_ENV + elif [ "$RUNNER_OS" == "Windows" ]; then + wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/windows/VulkanSDK-$VULKAN_SDK_VERSION-Installer.exe?Human=true" -O vulkan-sdk.exe + ./vulkan-sdk.exe --accept-licenses --default-answer --confirm-command install + echo "VULKAN_SDK=C:\\VulkanSDK\\$VULKAN_SDK_VERSION" >> $GITHUB_ENV + echo "PATH=$VULKAN_SDK\\Bin;$PATH" >> $GITHUB_ENV + fi - if: ${{ runner.os == 'Linux' }} - name: Install xvfb, llvmpipe and lavapipe + name: Install Vulkan SDK and software renderers on Linux run: | sudo apt-get update -y -qq sudo add-apt-repository ppa:kisak/turtle -y sudo apt-get update - sudo apt install -y xvfb libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers + sudo apt install -y xvfb libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers vulkan-tools libvulkan-dev - if: ${{ matrix.use_moltenvk == true }} name: Setup MoltenVK on macOS run: | - # MoltenVK should be installed with the Vulkan SDK - # Find and set the ICD path - VULKAN_SDK_VERSION=$(ls -1 $HOME/VulkanSDK | head -n 1) - echo "VK_ICD_FILENAMES=$HOME/VulkanSDK/$VULKAN_SDK_VERSION/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV + echo "VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV - - if: ${{ matrix.use_swiftshader == true }} - name: Install SwiftShader on macOS + - name: Install SwiftShader + if: ${{ matrix.use_swiftshader == true || runner.os == 'Linux' || runner.os == 'Windows' }} + env: + SWIFTSHADER_WINDOWS_URL: https://github.com/nikitalita/swiftshader-dist-win/releases/download/2021-12-09_00-02/swiftshader-2021-12-09_00-02-subzero.7z.zip + SWIFTSHADER_LINUX_URL: https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/swiftshader2.zip + SWIFTSHADER_MACOS_URL: https://github.com/nikitalita/swiftshader-builds/releases/download/1.0.0/swiftshader-vulkan-r6216.7997cbc34b-macos-10.15.zip + shell: bash run: | - # Based on https://github.com/GDRETools/gdsdecomp/blob/master/.github/actions/install-swiftshader/action.yml - git clone https://github.com/google/swiftshader.git - cd swiftshader - mkdir build && cd build - cmake -DSWIFTSHADER_BUILD_TESTS=OFF -DSWIFTSHADER_BUILD_SAMPLES=OFF .. - cmake --build . --config Release - sudo mkdir -p /usr/local/share/vulkan/icd.d - sudo cp Darwin/vk_swiftshader_icd.json /usr/local/share/vulkan/icd.d/ - sudo mkdir -p /usr/local/lib - sudo cp Darwin/libvk_swiftshader.dylib /usr/local/lib/ - # Set environment variable for SwiftShader ICD - echo "VK_ICD_FILENAMES=/usr/local/share/vulkan/icd.d/vk_swiftshader_icd.json" >> $GITHUB_ENV + export SWIFTSHADER_DEST_DIR='${{ github.workspace }}/swiftshader' + mkdir -p $SWIFTSHADER_DEST_DIR + if [ "$RUNNER_OS" == "Linux" ]; then + wget ${{ env.SWIFTSHADER_LINUX_URL }} -O swiftshader.zip + unzip swiftshader.zip -d $SWIFTSHADER_DEST_DIR + rm swiftshader.zip + SWIFTSHADER_LIB_NAME="./libvk_swiftshader.so" + sed -i "s|PATH_TO_CHANGE|$SWIFTSHADER_LIB_NAME|" $SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json + echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" >> $GITHUB_ENV + elif [ "$RUNNER_OS" == "macOS" ]; then + wget ${{ env.SWIFTSHADER_MACOS_URL }} -O swiftshader.zip + unzip swiftshader.zip -d temp-ss-dl/ + rm swiftshader.zip + mv temp-ss-dl/lib/libvk_swiftshader.dylib $SWIFTSHADER_DEST_DIR/libvk_swiftshader.dylib + mv temp-ss-dl/share/vulkan/icd.d/vk_swiftshader_icd.json $SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json + rm -rf temp-ss-dl/ + sed -i '' "s/..\/..\/..\/lib\/libvk_swiftshader.dylib/.\/libvk_swiftshader.dylib/" "$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" + echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" >> $GITHUB_ENV + elif [ "$RUNNER_OS" == "Windows" ]; then + choco install --yes 7zip wget + wget -O swiftshader.zip ${{env.SWIFTSHADER_WINDOWS_URL}} + 7z x swiftshader.zip -otemp-ss-dl/ + rm swiftshader.zip + mv temp-ss-dl/swiftshader-*/swiftshader-*.7z temp-ss-dl/swiftshader.7z + 7z x temp-ss-dl/swiftshader.7z -otemp-ss-dl/swiftshader + rm temp-ss-dl/swiftshader.7z + mv temp-ss-dl/swiftshader/x64/bin/vk_swiftshader.dll $SWIFTSHADER_DEST_DIR/vk_swiftshader.dll + mv temp-ss-dl/swiftshader/x64/bin/vulkan-1.dll $SWIFTSHADER_DEST_DIR/vulkan-1.dll + mv temp-ss-dl/swiftshader/x64/bin/vk_swiftshader_icd.json $SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json + rm -rf temp-ss-dl/ + echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR\vk_swiftshader_icd.json" >> $GITHUB_ENV + fi - name: Install Rust uses: dtolnay/rust-toolchain@stable From 2829168d5da58ca2e4b53f1a3006a103534183cb Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:34:07 +0200 Subject: [PATCH 04/16] Fix volume --- .github/workflows/rust.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 526a7c5a7..94aa5643d 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -44,8 +44,9 @@ jobs: if [ "$RUNNER_OS" == "macOS" ]; then wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/mac/vulkansdk-macos-$VULKAN_SDK_VERSION.dmg?Human=true" -O vulkan-sdk.dmg hdiutil attach vulkan-sdk.dmg - sudo /Volumes/vulkan-sdk/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install - hdiutil detach /Volumes/vulkansdk-macos-$VULKAN_SDK_VERSION + # The volume is mounted as /Volumes/VulkanSDK + sudo /Volumes/VulkanSDK/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install + hdiutil detach /Volumes/VulkanSDK echo "VULKAN_SDK_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV echo "VULKAN_SDK=$VULKAN_SDK_PATH/macOS" >> $GITHUB_ENV echo "DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV From e8822198bb8781403047161df698a4ded42df20a Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:40:42 +0200 Subject: [PATCH 05/16] Fix CI? --- .github/workflows/rust.yml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 94aa5643d..8267c39eb 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -48,11 +48,11 @@ jobs: sudo /Volumes/VulkanSDK/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install hdiutil detach /Volumes/VulkanSDK echo "VULKAN_SDK_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV - echo "VULKAN_SDK=$VULKAN_SDK_PATH/macOS" >> $GITHUB_ENV - echo "DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV - echo "PATH=$VULKAN_SDK/bin:$PATH" >> $GITHUB_ENV + echo "VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS" >> $GITHUB_ENV + echo "DYLD_LIBRARY_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV + echo "PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/bin:$PATH" >> $GITHUB_ENV elif [ "$RUNNER_OS" == "Windows" ]; then - wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/windows/VulkanSDK-$VULKAN_SDK_VERSION-Installer.exe?Human=true" -O vulkan-sdk.exe + curl -L "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/windows/VulkanSDK-$VULKAN_SDK_VERSION-Installer.exe?Human=true" -o vulkan-sdk.exe ./vulkan-sdk.exe --accept-licenses --default-answer --confirm-command install echo "VULKAN_SDK=C:\\VulkanSDK\\$VULKAN_SDK_VERSION" >> $GITHUB_ENV echo "PATH=$VULKAN_SDK\\Bin;$PATH" >> $GITHUB_ENV @@ -69,7 +69,7 @@ jobs: - if: ${{ matrix.use_moltenvk == true }} name: Setup MoltenVK on macOS run: | - echo "VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV + echo "VK_ICD_FILENAMES=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.250.1/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV - name: Install SwiftShader if: ${{ matrix.use_swiftshader == true || runner.os == 'Linux' || runner.os == 'Windows' }} @@ -98,8 +98,8 @@ jobs: sed -i '' "s/..\/..\/..\/lib\/libvk_swiftshader.dylib/.\/libvk_swiftshader.dylib/" "$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" >> $GITHUB_ENV elif [ "$RUNNER_OS" == "Windows" ]; then - choco install --yes 7zip wget - wget -O swiftshader.zip ${{env.SWIFTSHADER_WINDOWS_URL}} + choco install --yes 7zip + curl -L ${{env.SWIFTSHADER_WINDOWS_URL}} -o swiftshader.zip 7z x swiftshader.zip -otemp-ss-dl/ rm swiftshader.zip mv temp-ss-dl/swiftshader-*/swiftshader-*.7z temp-ss-dl/swiftshader.7z @@ -118,7 +118,11 @@ jobs: components: rust-src, rustc-dev, llvm-tools - name: Install cargo-gpu - run: cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu + run: | + # Set non-interactive mode to avoid raw mode issues in CI + export CARGO_TERM_COLOR=never + export CI=true + cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu - name: Cache cargo registry uses: actions/cache@v3 @@ -130,7 +134,11 @@ jobs: - name: Compile shaders to SPIR-V working-directory: shaders/rust - run: python3 compileshaders.py + run: | + # Set non-interactive mode for cargo-gpu + export CARGO_TERM_COLOR=never + export CI=true + python3 compileshaders.py - name: Verify no uncommitted changes run: | From be2365ee565665b5919ef22906303a90d04bb5dd Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:46:24 +0200 Subject: [PATCH 06/16] CI? --- .github/workflows/rust.yml | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 8267c39eb..4b49f79b9 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -112,13 +112,26 @@ jobs: echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR\vk_swiftshader_icd.json" >> $GITHUB_ENV fi - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - components: rust-src, rustc-dev, llvm-tools + - name: Install Rust via rustup + shell: bash + run: | + # Install rustup if not already installed + if ! command -v rustup &> /dev/null; then + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal + source "$HOME/.cargo/env" + fi + + # Install stable toolchain with required components + rustup toolchain install stable + rustup component add rust-src rustc-dev llvm-tools --toolchain stable + rustup default stable - name: Install cargo-gpu + shell: bash run: | + # Ensure cargo is in PATH + source "$HOME/.cargo/env" || true + # Set non-interactive mode to avoid raw mode issues in CI export CARGO_TERM_COLOR=never export CI=true @@ -134,13 +147,18 @@ jobs: - name: Compile shaders to SPIR-V working-directory: shaders/rust + shell: bash run: | + # Ensure cargo is in PATH + source "$HOME/.cargo/env" || true + # Set non-interactive mode for cargo-gpu export CARGO_TERM_COLOR=never export CI=true python3 compileshaders.py - name: Verify no uncommitted changes + shell: bash run: | # Check if there are any changes to tracked files if ! git diff --exit-code; then From d6e501fe493f64d7ce40f71442bb38a5fecca96c Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 21:55:31 +0200 Subject: [PATCH 07/16] CI? --- .github/workflows/rust.yml | 43 ++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4b49f79b9..ffbc6d9f8 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -9,7 +9,8 @@ on: - master env: - CARGO_TERM_COLOR: always + # For setup-rust, see https://github.com/moonrepo/setup-rust/issues/22 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: test: @@ -112,30 +113,26 @@ jobs: echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR\vk_swiftshader_icd.json" >> $GITHUB_ENV fi - - name: Install Rust via rustup - shell: bash + - name: Setup Rust + uses: moonrepo/setup-rust@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Install Rust toolchain run: | - # Install rustup if not already installed - if ! command -v rustup &> /dev/null; then - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal - source "$HOME/.cargo/env" - fi - - # Install stable toolchain with required components - rustup toolchain install stable - rustup component add rust-src rustc-dev llvm-tools --toolchain stable rustup default stable + rustup update + # Install nightly toolchain with required components for cargo-gpu + rustup toolchain install nightly + rustup component add rust-src rustc-dev llvm-tools --toolchain nightly - name: Install cargo-gpu shell: bash + env: + RUST_LOG: debug run: | - # Ensure cargo is in PATH - source "$HOME/.cargo/env" || true - - # Set non-interactive mode to avoid raw mode issues in CI - export CARGO_TERM_COLOR=never - export CI=true - cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu + # Install cargo-gpu with locked dependencies + cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu --locked - name: Cache cargo registry uses: actions/cache@v3 @@ -148,13 +145,9 @@ jobs: - name: Compile shaders to SPIR-V working-directory: shaders/rust shell: bash + env: + RUST_LOG: debug run: | - # Ensure cargo is in PATH - source "$HOME/.cargo/env" || true - - # Set non-interactive mode for cargo-gpu - export CARGO_TERM_COLOR=never - export CI=true python3 compileshaders.py - name: Verify no uncommitted changes From 8d391131224aa5f8eb26d7f83d3571ac13b2fb6b Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:03:03 +0200 Subject: [PATCH 08/16] Ok maybe this works --- .github/workflows/rust.yml | 16 ++++++---------- shaders/rust/compileshaders.py | 1 + 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index ffbc6d9f8..7e5566cc7 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -9,8 +9,7 @@ on: - master env: - # For setup-rust, see https://github.com/moonrepo/setup-rust/issues/22 - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUST_LOG: debug jobs: test: @@ -113,16 +112,13 @@ jobs: echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR\vk_swiftshader_icd.json" >> $GITHUB_ENV fi - - name: Setup Rust - uses: moonrepo/setup-rust@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Install nightly toolchain for cargo-gpu run: | - rustup default stable - rustup update - # Install nightly toolchain with required components for cargo-gpu + # cargo-gpu will auto-install its required toolchain version + # but we need a base nightly toolchain rustup toolchain install nightly rustup component add rust-src rustc-dev llvm-tools --toolchain nightly diff --git a/shaders/rust/compileshaders.py b/shaders/rust/compileshaders.py index 7b51afb5d..f8c5c3d0c 100755 --- a/shaders/rust/compileshaders.py +++ b/shaders/rust/compileshaders.py @@ -31,6 +31,7 @@ def compile_shader(shader_dir): "--shader-crate", str(shader_dir), "--output-dir", str(shader_dir), "--multimodule", # Split into separate files per entry point + "--auto-install-rust-toolchain", # Auto-install required toolchain in CI ], capture_output=False) if result.returncode == 0: From b5ff4fb4e6d5aac817c4556fe7f386537a719afb Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:19:52 +0200 Subject: [PATCH 09/16] Please work --- .github/workflows/rust.yml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7e5566cc7..b7602c027 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,9 +8,6 @@ on: branches: - master -env: - RUST_LOG: debug - jobs: test: name: Test Rust Shaders - ${{ matrix.name }} @@ -36,12 +33,14 @@ jobs: submodules: "recursive" - name: Install Vulkan SDK - if: ${{ runner.os != 'Linux' }} shell: bash env: VULKAN_SDK_VERSION: 1.3.250.1 run: | - if [ "$RUNNER_OS" == "macOS" ]; then + if [ "$RUNNER_OS" == "Linux" ]; then + sudo apt-get update -y -qq + sudo apt install -y vulkan-tools libvulkan-dev + elif [ "$RUNNER_OS" == "macOS" ]; then wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/mac/vulkansdk-macos-$VULKAN_SDK_VERSION.dmg?Human=true" -O vulkan-sdk.dmg hdiutil attach vulkan-sdk.dmg # The volume is mounted as /Volumes/VulkanSDK @@ -59,14 +58,13 @@ jobs: fi - if: ${{ runner.os == 'Linux' }} - name: Install Vulkan SDK and software renderers on Linux + name: Install Linux graphics dependencies run: | - sudo apt-get update -y -qq sudo add-apt-repository ppa:kisak/turtle -y sudo apt-get update - sudo apt install -y xvfb libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers vulkan-tools libvulkan-dev + sudo apt install -y xvfb libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers - - if: ${{ matrix.use_moltenvk == true }} + - if: ${{ runner.os == 'macOS' && matrix.use_moltenvk == true }} name: Setup MoltenVK on macOS run: | echo "VK_ICD_FILENAMES=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.250.1/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV @@ -116,6 +114,7 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install nightly toolchain for cargo-gpu + shell: bash run: | # cargo-gpu will auto-install its required toolchain version # but we need a base nightly toolchain @@ -141,8 +140,6 @@ jobs: - name: Compile shaders to SPIR-V working-directory: shaders/rust shell: bash - env: - RUST_LOG: debug run: | python3 compileshaders.py @@ -163,4 +160,4 @@ jobs: echo "Please add these files to git or update .gitignore:" git ls-files --others --exclude-standard exit 1 - fi \ No newline at end of file + fi From 5c16624aecaa54717f85ace39fa72f554a7593b6 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:22:10 +0200 Subject: [PATCH 10/16] Changed files --- .github/workflows/rust.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index b7602c027..609a1aa6c 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -41,15 +41,20 @@ jobs: sudo apt-get update -y -qq sudo apt install -y vulkan-tools libvulkan-dev elif [ "$RUNNER_OS" == "macOS" ]; then + VULKAN_INSTALL_DIR="$HOME/vulkan-sdk" + mkdir -p "$VULKAN_INSTALL_DIR" + cd "$RUNNER_TEMP" wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/mac/vulkansdk-macos-$VULKAN_SDK_VERSION.dmg?Human=true" -O vulkan-sdk.dmg hdiutil attach vulkan-sdk.dmg # The volume is mounted as /Volumes/VulkanSDK - sudo /Volumes/VulkanSDK/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install + sudo /Volumes/VulkanSDK/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install hdiutil detach /Volumes/VulkanSDK - echo "VULKAN_SDK_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV - echo "VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS" >> $GITHUB_ENV - echo "DYLD_LIBRARY_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV - echo "PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/bin:$PATH" >> $GITHUB_ENV + rm vulkan-sdk.dmg + echo "VULKAN_SDK_PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV + echo "VULKAN_SDK=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS" >> $GITHUB_ENV + echo "DYLD_LIBRARY_PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV + echo "PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/bin:$PATH" >> $GITHUB_ENV + cd "$GITHUB_WORKSPACE" elif [ "$RUNNER_OS" == "Windows" ]; then curl -L "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/windows/VulkanSDK-$VULKAN_SDK_VERSION-Installer.exe?Human=true" -o vulkan-sdk.exe ./vulkan-sdk.exe --accept-licenses --default-answer --confirm-command install @@ -67,7 +72,7 @@ jobs: - if: ${{ runner.os == 'macOS' && matrix.use_moltenvk == true }} name: Setup MoltenVK on macOS run: | - echo "VK_ICD_FILENAMES=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.250.1/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV + echo "VK_ICD_FILENAMES=$HOME/vulkan-sdk/vulkansdk-macos-1.3.250.1/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV - name: Install SwiftShader if: ${{ matrix.use_swiftshader == true || runner.os == 'Linux' || runner.os == 'Windows' }} @@ -77,7 +82,7 @@ jobs: SWIFTSHADER_MACOS_URL: https://github.com/nikitalita/swiftshader-builds/releases/download/1.0.0/swiftshader-vulkan-r6216.7997cbc34b-macos-10.15.zip shell: bash run: | - export SWIFTSHADER_DEST_DIR='${{ github.workspace }}/swiftshader' + export SWIFTSHADER_DEST_DIR='${{ runner.temp }}/swiftshader' mkdir -p $SWIFTSHADER_DEST_DIR if [ "$RUNNER_OS" == "Linux" ]; then wget ${{ env.SWIFTSHADER_LINUX_URL }} -O swiftshader.zip From 5e16933aef310552da4606cd9e9b76eb74084426 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:31:59 +0200 Subject: [PATCH 11/16] Blah --- .github/workflows/rust.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 609a1aa6c..9933bf519 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -144,9 +144,7 @@ jobs: - name: Compile shaders to SPIR-V working-directory: shaders/rust - shell: bash - run: | - python3 compileshaders.py + run: python3 compileshaders.py - name: Verify no uncommitted changes shell: bash From e8f1d61083f699f1418c02067f198f5a50ad8101 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:41:47 +0200 Subject: [PATCH 12/16] py packaging ugh --- .github/workflows/rust.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 9933bf519..770cf20a8 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -115,6 +115,11 @@ jobs: echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR\vk_swiftshader_icd.json" >> $GITHUB_ENV fi + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable From cbe97a54d54f02c14487094262b2913c309f6837 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:50:37 +0200 Subject: [PATCH 13/16] windows? --- .github/workflows/rust.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 770cf20a8..38e49a85a 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -149,7 +149,11 @@ jobs: - name: Compile shaders to SPIR-V working-directory: shaders/rust - run: python3 compileshaders.py + run: | + if [ "${{ runner.os }}" == "Windows" ]; then + export PATH="$HOME/.cargo/bin:$PATH" + fi + python3 compileshaders.py - name: Verify no uncommitted changes shell: bash From b80e93a2eb88c837c96dc5e3ab21d62699e2d5ff Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 22:53:56 +0200 Subject: [PATCH 14/16] windows part deux --- .github/workflows/rust.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 38e49a85a..296a5e7b8 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -147,13 +147,13 @@ jobs: ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Set Windows PATH + if: runner.os == 'Windows' + run: echo "$env:USERPROFILE\.cargo\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: Compile shaders to SPIR-V working-directory: shaders/rust - run: | - if [ "${{ runner.os }}" == "Windows" ]; then - export PATH="$HOME/.cargo/bin:$PATH" - fi - python3 compileshaders.py + run: python3 compileshaders.py - name: Verify no uncommitted changes shell: bash From d0658567eed6dcc5ce2040297b6b3b5f7a2224ca Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Thu, 3 Jul 2025 23:27:04 +0200 Subject: [PATCH 15/16] moar windows --- shaders/rust/compileshaders.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shaders/rust/compileshaders.py b/shaders/rust/compileshaders.py index f8c5c3d0c..9feab3416 100755 --- a/shaders/rust/compileshaders.py +++ b/shaders/rust/compileshaders.py @@ -75,6 +75,8 @@ def compile_shader(shader_dir): final_path = shader_dir / f"{shader_name}.{shader_type}.spv" # Just rename the file - the C++ code will look for the entry point by name + if final_path.exists(): + final_path.unlink() # Remove existing file source_path.rename(final_path) print(f" Created {final_path.name} (entry point: {entry_point})") @@ -105,6 +107,8 @@ def compile_shader(shader_dir): old_path = shader_dir / old_name new_path = shader_dir / new_name if old_path.exists(): + if new_path.exists(): + new_path.unlink() # Remove existing file old_path.rename(new_path) print(f" Created {new_name}") else: From 7a0428406b0d3b7b25137076b7d2de86be4c8654 Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Fri, 4 Jul 2025 10:51:46 +0200 Subject: [PATCH 16/16] windows final --- .github/workflows/rust.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 296a5e7b8..6926785c3 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -56,10 +56,13 @@ jobs: echo "PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/bin:$PATH" >> $GITHUB_ENV cd "$GITHUB_WORKSPACE" elif [ "$RUNNER_OS" == "Windows" ]; then + cd "$RUNNER_TEMP" curl -L "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/windows/VulkanSDK-$VULKAN_SDK_VERSION-Installer.exe?Human=true" -o vulkan-sdk.exe ./vulkan-sdk.exe --accept-licenses --default-answer --confirm-command install + rm vulkan-sdk.exe echo "VULKAN_SDK=C:\\VulkanSDK\\$VULKAN_SDK_VERSION" >> $GITHUB_ENV echo "PATH=$VULKAN_SDK\\Bin;$PATH" >> $GITHUB_ENV + cd "$GITHUB_WORKSPACE" fi - if: ${{ runner.os == 'Linux' }}