diff options
Diffstat (limited to 'third_party/rust/naga/.github')
5 files changed, 336 insertions, 0 deletions
diff --git a/third_party/rust/naga/.github/workflows/ci.yml b/third_party/rust/naga/.github/workflows/ci.yml new file mode 100644 index 0000000000..ce951216b9 --- /dev/null +++ b/third_party/rust/naga/.github/workflows/ci.yml @@ -0,0 +1,94 @@ +name: CI +on: [push, pull_request] + +env: + CARGO_INCREMENTAL: false + CARGO_TERM_COLOR: always + RUST_BACKTRACE: full + MSRV: 1.63 + +jobs: + check-msrv: + name: Check MSRV and minimal-versions + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install MSRV toolchain + run: rustup toolchain install $MSRV --no-self-update --profile=minimal --component clippy + + - name: Install nightly toolchain + run: rustup toolchain install nightly --no-self-update --profile=minimal + + - name: Install cargo-hack + uses: taiki-e/install-action@v2 + with: + tool: cargo-hack + + # -Z avoid-dev-deps doesn't work + - run: cargo +nightly hack generate-lockfile --remove-dev-deps -Z minimal-versions --offline + + - name: Test all features + run: cargo +$MSRV clippy --all-features --workspace -- -D warnings + + test: + name: Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install cargo-nextest and cargo-llvm-cov + uses: taiki-e/install-action@v2 + with: + tool: cargo-nextest,cargo-llvm-cov + + - name: Default test + # Our intention here is to test `naga` with no features enabled. But + # since `cli` is the default package, a plain `cargo test` will build + # `naga` with the features requested in `cli/Cargo.toml`. Passing + # `--package naga` causes us to use the default features in the + # top-level `Cargo.toml` instead. + run: cargo nextest run --package naga + + - name: Test all features + run: cargo llvm-cov --lcov --output-path lcov.info nextest --all-features --workspace + + - name: Upload coverage report to codecov + uses: codecov/codecov-action@v3 + with: + files: lcov.info + + - name: Check snapshots + run: git diff --exit-code -- tests/out + + check: + name: Check benchmarks and naga-fuzz + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Check benchmarks + run: cargo check --benches + + - name: Check naga-fuzz + run: | + cd fuzz + cargo check + + documentation: + name: Documentation + runs-on: ubuntu-latest + env: + RUSTDOCFLAGS: -Dwarnings + steps: + - uses: actions/checkout@v3 + + - run: cargo doc -p naga --all-features --document-private-items + + fmt: + name: Format + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - run: cargo fmt -- --check diff --git a/third_party/rust/naga/.github/workflows/lazy.yml b/third_party/rust/naga/.github/workflows/lazy.yml new file mode 100644 index 0000000000..ab5e21f129 --- /dev/null +++ b/third_party/rust/naga/.github/workflows/lazy.yml @@ -0,0 +1,162 @@ +# Lazy jobs running on master post merges. +name: lazy +on: + push: + branches: [master] + pull_request: + paths: + - '.github/workflows/lazy.yml' + +env: + CARGO_INCREMENTAL: false + CARGO_TERM_COLOR: always + RUST_BACKTRACE: full + +jobs: + parse-dota2: + name: Parse Dota2 shaders + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - run: mkdir data + + - name: Download shaders + run: curl https://user.fm/files/v2-5573e18b9f03f42c6ae53c392083da35/dota2-shaders.zip -o data/all.zip + + - name: Unpack shaders + run: cd data && unzip all.zip + + - name: Build Naga + run: cargo build --release --bin naga + + - name: Convert shaders + run: for file in data/*.spv ; do echo "Translating" ${file} && target/release/naga --validate 27 ${file} ${file}.metal; done + + parse-vulkan-tutorial-shaders: + name: Parse Sascha Willems Vulkan tutorial shaders + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Download shaders + run: git clone https://github.com/SaschaWillems/Vulkan.git + + - name: Build Naga + run: cargo build --release --bin naga + + - name: Convert metal shaders + run: | + # No needed to stop workflow if we can't validate one file + set +e + touch counter + SUCCESS_RESULT_COUNT=0 + FILE_COUNT=0 + mkdir -p out + find "Vulkan/data/shaders/glsl/" -name '*.spv' | while read fname; + do + echo "Convert: $fname" + FILE_COUNT=$((FILE_COUNT+1)) + target/release/naga --validate 27 $(realpath ${fname}) out/$(basename ${fname}).metal + if [[ $? -eq 0 ]]; then + SUCCESS_RESULT_COUNT=$((SUCCESS_RESULT_COUNT + 1)) + fi + echo "Result: $(expr $FILE_COUNT - $SUCCESS_RESULT_COUNT) / $FILE_COUNT" > counter + done + cat counter + + dneto0_spirv-samples: + name: Parse dneto0 spirv-samples + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Download shaders + run: git clone https://github.com/dneto0/spirv-samples.git + + - name: Build Naga + run: cargo build --release --bin naga + + - name: Install spirv-tools + run: | + wget -q https://storage.googleapis.com/spirv-tools/artifacts/prod/graphics_shader_compiler/spirv-tools/linux-clang-release/continuous/1489/20210629-121459/install.tgz + tar zxf install.tgz + ./install/bin/spirv-as --version + + - name: Compile spv from spvasm + run: | + cd spirv-samples + mkdir -p spv + + find "./spvasm" -name '*.spvasm' | while read fname; + do + echo "Convert to spv with spirv-as: $fname" + ../install/bin/spirv-as --target-env spv1.3 $(realpath ${fname}) -o ./spv/$(basename ${fname}).spv + done; + + - name: Validate spv and generate wgsl + run: | + set +e + cd spirv-samples + SUCCESS_RESULT_COUNT=0 + FILE_COUNT=0 + mkdir -p spv + mkdir -p wgsl + + echo "==== Validate spv and generate wgsl ====" + rm -f counter + touch counter + + find "./spv" -name '*.spv' | while read fname; + do + echo "Convert: $fname" + FILE_COUNT=$((FILE_COUNT+1)) + ../target/release/naga --validate 27 $(realpath ${fname}) ./wgsl/$(basename ${fname}).wgsl + if [[ $? -eq 0 ]]; then + SUCCESS_RESULT_COUNT=$((SUCCESS_RESULT_COUNT + 1)) + fi + echo "Result: $(expr $FILE_COUNT - $SUCCESS_RESULT_COUNT) / $FILE_COUNT" > counter + done + cat counter + + - name: Validate output wgsl + run: | + set +e + cd spirv-samples + SUCCESS_RESULT_COUNT=0 + FILE_COUNT=0 + + rm -f counter + touch counter + + find "./wgsl" -name '*.wgsl' | while read fname; + do + echo "Validate: $fname" + FILE_COUNT=$((FILE_COUNT+1)) + ../target/release/naga --validate 27 $(realpath ${fname}) + if [[ $? -eq 0 ]]; then + SUCCESS_RESULT_COUNT=$((SUCCESS_RESULT_COUNT + 1)) + fi + echo "Result: $(expr $FILE_COUNT - $SUCCESS_RESULT_COUNT) / $FILE_COUNT" > counter + done + cat counter + + check-snapshots-extra: + name: Check snapshots (validated or not) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install cargo-nextest + uses: taiki-e/install-action@v2 + with: + tool: cargo-nextest + + - name: Test minimal (without span) + run: cargo nextest run --features validate -p naga + + - name: Test all (without validation) + run: cargo nextest run --features wgsl-in,wgsl-out,glsl-in,glsl-out,spv-in,spv-out,msl-out,hlsl-out,dot-out --workspace + + - name: Check snapshots (without validation) + run: git diff --exit-code -- tests/out diff --git a/third_party/rust/naga/.github/workflows/validation-linux.yml b/third_party/rust/naga/.github/workflows/validation-linux.yml new file mode 100644 index 0000000000..e253e0a42e --- /dev/null +++ b/third_party/rust/naga/.github/workflows/validation-linux.yml @@ -0,0 +1,28 @@ +name: validation-linux +on: + pull_request: + paths: + - '.github/workflows/validation-linux.yml' + - 'tests/out/spv/*.spvasm' + - 'tests/out/glsl/*.glsl' + - 'tests/out/dot/*.dot' + - 'tests/out/wgsl/*.wgsl' + - 'src/front/wgsl/*' + +jobs: + validate-linux: + name: SPIR-V + GLSL + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install tools + run: sudo apt-get install spirv-tools glslang-tools graphviz + + - run: make validate-spv + + - run: make validate-glsl + + - run: make validate-dot + + - run: make validate-wgsl diff --git a/third_party/rust/naga/.github/workflows/validation-macos.yml b/third_party/rust/naga/.github/workflows/validation-macos.yml new file mode 100644 index 0000000000..535a0622b3 --- /dev/null +++ b/third_party/rust/naga/.github/workflows/validation-macos.yml @@ -0,0 +1,15 @@ +name: validation-macos +on: + pull_request: + paths: + - '.github/workflows/validation-macos.yml' + - 'tests/out/msl/*.msl' + +jobs: + validate-macos: + name: MSL + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + + - run: make validate-msl diff --git a/third_party/rust/naga/.github/workflows/validation-windows.yml b/third_party/rust/naga/.github/workflows/validation-windows.yml new file mode 100644 index 0000000000..03942a6782 --- /dev/null +++ b/third_party/rust/naga/.github/workflows/validation-windows.yml @@ -0,0 +1,37 @@ +name: validation-windows +on: + pull_request: + paths: + - '.github/workflows/validation-windows.yml' + - 'tests/out/hlsl/*.hlsl' + +jobs: + validate-windows-dxc: + name: HLSL via DXC + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + + - name: Add DirectXShaderCompiler + uses: napokue/setup-dxc@v1.1.0 + + - run: make validate-hlsl-dxc + shell: sh + + validate-windows-fxc: + name: HLSL via FXC + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + + - name: Add fxc bin to PATH + run: | + Get-Childitem -Path "C:\Program Files (x86)\Windows Kits\10\bin\**\x64\fxc.exe" ` + | Sort-Object -Property LastWriteTime -Descending ` + | Select-Object -First 1 ` + | Split-Path -Parent ` + | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append + shell: powershell + + - run: make validate-hlsl-fxc + shell: sh |