forked from SaschaWillems/Vulkan
-
Notifications
You must be signed in to change notification settings - Fork 0
184 lines (167 loc) · 8.02 KB
/
rust.yml
File metadata and controls
184 lines (167 loc) · 8.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
name: Rust CI
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
test:
name: Test Rust Shaders - ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
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
shell: bash
env:
VULKAN_SDK_VERSION: 1.3.250.1
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
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 $VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install
hdiutil detach /Volumes/VulkanSDK
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
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' }}
name: Install Linux graphics dependencies
run: |
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: ${{ runner.os == 'macOS' && matrix.use_moltenvk == true }}
name: Setup MoltenVK on macOS
run: |
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' }}
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: |
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
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
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
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: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install Rust toolchain
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
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: |
# 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
with:
path: |
~/.cargo/registry
~/.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: Check Rust shader formatting
working-directory: shaders/rust
run: |
rustup component add rustfmt
cargo fmt --all --check
- name: Compile shaders to SPIR-V
working-directory: shaders/rust
run: 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
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