From 51575fce39e49327fde444255854f00b41896363 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Tue, 16 Sep 2025 09:40:52 +0200 Subject: [PATCH] vulkan: include precompiled shaders --- .builds/build.yml | 2 +- .builds/check-musl.yml | 2 +- .builds/test.yml | 2 +- .builds/unit-tests.yml | 2 +- .github/workflows/check-spv.yml | 29 +++ Cargo.lock | 48 ----- Cargo.toml | 1 - build/vulkan.rs | 70 ++----- compile-shaders/.gitignore | 1 + compile-shaders/Cargo.lock | 196 ++++++++++++++++++ compile-shaders/Cargo.toml | 3 + compile-shaders/build-rs/Cargo.toml | 8 + compile-shaders/build-rs/src/main.rs | 25 +++ compile-shaders/compile/Cargo.toml | 9 + compile-shaders/compile/src/main.rs | 54 +++++ compile-shaders/core/Cargo.toml | 9 + compile-shaders/core/src/lib.rs | 38 ++++ compile-shaders/core/src/main.rs | 5 + docs/setup.md | 3 - src/gfx_apis/vulkan/shaders.rs | 22 +- src/gfx_apis/vulkan/shaders_bin/fill.frag.spv | Bin 0 -> 1024 bytes src/gfx_apis/vulkan/shaders_bin/fill.vert.spv | Bin 0 -> 1732 bytes .../vulkan/shaders_bin/legacy_fill.frag.spv | Bin 0 -> 964 bytes .../vulkan/shaders_bin/legacy_fill.vert.spv | Bin 0 -> 1576 bytes .../vulkan/shaders_bin/legacy_tex.frag.spv | Bin 0 -> 1800 bytes .../vulkan/shaders_bin/legacy_tex.vert.spv | Bin 0 -> 1924 bytes src/gfx_apis/vulkan/shaders_bin/out.frag.spv | Bin 0 -> 12764 bytes src/gfx_apis/vulkan/shaders_bin/out.vert.spv | Bin 0 -> 1576 bytes src/gfx_apis/vulkan/shaders_bin/tex.frag.spv | Bin 0 -> 13536 bytes src/gfx_apis/vulkan/shaders_bin/tex.vert.spv | Bin 0 -> 2572 bytes src/gfx_apis/vulkan/shaders_hash.txt | 18 ++ 31 files changed, 425 insertions(+), 122 deletions(-) create mode 100644 .github/workflows/check-spv.yml create mode 100644 compile-shaders/.gitignore create mode 100644 compile-shaders/Cargo.lock create mode 100644 compile-shaders/Cargo.toml create mode 100644 compile-shaders/build-rs/Cargo.toml create mode 100644 compile-shaders/build-rs/src/main.rs create mode 100644 compile-shaders/compile/Cargo.toml create mode 100644 compile-shaders/compile/src/main.rs create mode 100644 compile-shaders/core/Cargo.toml create mode 100644 compile-shaders/core/src/lib.rs create mode 100644 compile-shaders/core/src/main.rs create mode 100644 src/gfx_apis/vulkan/shaders_bin/fill.frag.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/fill.vert.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/legacy_fill.frag.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/legacy_fill.vert.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/legacy_tex.frag.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/legacy_tex.vert.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/out.frag.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/out.vert.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/tex.frag.spv create mode 100644 src/gfx_apis/vulkan/shaders_bin/tex.vert.spv create mode 100644 src/gfx_apis/vulkan/shaders_hash.txt diff --git a/.builds/build.yml b/.builds/build.yml index a19bc5e9..e3cb42e3 100644 --- a/.builds/build.yml +++ b/.builds/build.yml @@ -6,7 +6,7 @@ tasks: echo 'Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist - install: | sudo pacman -Syu --noconfirm - sudo pacman -S --noconfirm rustup libinput pango mesa cmake shaderc + sudo pacman -S --noconfirm rustup libinput pango mesa rustup toolchain install stable - build: | cd jay diff --git a/.builds/check-musl.yml b/.builds/check-musl.yml index 689fe0cd..e556cf7c 100644 --- a/.builds/check-musl.yml +++ b/.builds/check-musl.yml @@ -6,7 +6,7 @@ tasks: echo 'Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist - install: | sudo pacman -Syu --noconfirm - sudo pacman -S --noconfirm rustup shaderc musl + sudo pacman -S --noconfirm rustup musl rustup toolchain install stable rustup target install x86_64-unknown-linux-musl - build: | diff --git a/.builds/test.yml b/.builds/test.yml index 0010703f..4cf77e68 100644 --- a/.builds/test.yml +++ b/.builds/test.yml @@ -6,7 +6,7 @@ tasks: echo 'Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist - install: | sudo pacman -Syu --noconfirm - sudo pacman -S --noconfirm rustup libinput pango mesa xorg-xwayland adwaita-icon-theme libxcursor cmake shaderc + sudo pacman -S --noconfirm rustup libinput pango mesa xorg-xwayland adwaita-icon-theme libxcursor rustup toolchain install stable - configure: | sudo rmmod bochs diff --git a/.builds/unit-tests.yml b/.builds/unit-tests.yml index 2da438f7..52e196c2 100644 --- a/.builds/unit-tests.yml +++ b/.builds/unit-tests.yml @@ -6,7 +6,7 @@ tasks: echo 'Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch' | sudo tee /etc/pacman.d/mirrorlist - install: | sudo pacman -Syu --noconfirm - sudo pacman -S --noconfirm rustup libinput pango mesa xorg-xwayland adwaita-icon-theme libxcursor cmake shaderc + sudo pacman -S --noconfirm rustup libinput pango mesa xorg-xwayland adwaita-icon-theme libxcursor rustup toolchain install stable cd jay git submodule update --init diff --git a/.github/workflows/check-spv.yml b/.github/workflows/check-spv.yml new file mode 100644 index 00000000..9947843a --- /dev/null +++ b/.github/workflows/check-spv.yml @@ -0,0 +1,29 @@ +name: check-spv + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + check-spv: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Show env + run: | + uname -a + ldd --version + - name: Install + run: | + curl https://sh.rustup.rs -sSf | sh -s -- -y + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + - name: Check + run: | + cargo run --manifest-path compile-shaders/Cargo.toml -p compile-shaders-core + git diff --exit-code diff --git a/Cargo.lock b/Cargo.lock index fd6c166c..397c2b5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -293,15 +293,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" -[[package]] -name = "cmake" -version = "0.1.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" -dependencies = [ - "cc", -] - [[package]] name = "colorchoice" version = "1.0.3" @@ -641,7 +632,6 @@ dependencies = [ "rustc-demangle", "serde", "serde_json", - "shaderc", "smallvec", "thiserror", "tiny-skia", @@ -784,15 +774,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "link-cplusplus" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212" -dependencies = [ - "cc", -] - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -1165,12 +1146,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e110b7d5a1335c2e801176c42a626a905c23eecdee104d9bdfbd6ea5f0b8368" -[[package]] -name = "roxmltree" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" - [[package]] name = "run-on-drop" version = "1.0.0" @@ -1278,29 +1253,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "shaderc" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdc8a26f751f141968dbc08fc01cfa3f4a288351f81cfd9148db41aa189f635" -dependencies = [ - "libc", - "shaderc-sys", -] - -[[package]] -name = "shaderc-sys" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "275f0ea572da7183c0cd0a060ba67c9fb54934523d4c9a9494ce5828c533d40b" -dependencies = [ - "cmake", - "libc", - "link-cplusplus", - "pkg-config", - "roxmltree", -] - [[package]] name = "shlex" version = "1.3.0" diff --git a/Cargo.toml b/Cargo.toml index 0898817d..bb3a346e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -73,7 +73,6 @@ blake3 = "1.8.2" repc = "0.1.1" anyhow = "1.0.79" bstr = { version = "1.9.0", default-features = false, features = ["std"] } -shaderc = "0.9.1" cc = "1.0.86" #[profile.dev.build-override] diff --git a/build/vulkan.rs b/build/vulkan.rs index 996d3a85..9318d331 100644 --- a/build/vulkan.rs +++ b/build/vulkan.rs @@ -1,58 +1,20 @@ -use { - crate::open, - anyhow::{Context, anyhow, bail}, - shaderc::{CompileOptions, ResolvedInclude}, - std::{io::Write, path::Path}, -}; - -const ROOT: &str = "src/gfx_apis/vulkan/shaders"; +use {anyhow::bail, std::process::Command}; pub fn main() -> anyhow::Result<()> { - println!("cargo:rerun-if-changed={}", ROOT); - compile_simple("fill.frag")?; - compile_simple("fill.vert")?; - compile_simple("tex.vert")?; - compile_simple("tex.frag")?; - compile_simple("out.vert")?; - compile_simple("out.frag")?; - compile_simple("legacy/fill.frag")?; - compile_simple("legacy/fill.vert")?; - compile_simple("legacy/tex.vert")?; - compile_simple("legacy/tex.frag")?; - Ok(()) -} - -fn compile_simple(name: &str) -> anyhow::Result<()> { - let out = format!("{name}.spv").replace("/", "_"); - compile_shader(name, &out).with_context(|| name.to_string()) -} - -fn compile_shader(name: &str, out: &str) -> anyhow::Result<()> { - let root = Path::new(ROOT).join(Path::new(name).parent().unwrap()); - let read = |path: &str| std::fs::read_to_string(root.join(path)); - let mut options = CompileOptions::new().unwrap(); - options.set_include_callback(|name, _, _, _| { - Ok(ResolvedInclude { - resolved_name: name.to_string(), - content: read(name).map_err(|e| anyhow!(e).to_string())?, - }) - }); - let stage = match Path::new(name) - .extension() - .and_then(|e| e.to_str()) - .unwrap_or("") - { - "frag" => shaderc::ShaderKind::Fragment, - "vert" => shaderc::ShaderKind::Vertex, - n => bail!("Unknown shader stage {}", n), - }; - let src = std::fs::read_to_string(format!("{}/{}", ROOT, name))?; - let compiler = shaderc::Compiler::new().unwrap(); - let binary = compiler - .compile_into_spirv(&src, stage, name, "main", Some(&options)) - .unwrap(); - let mut file = open(out)?; - file.write_all(binary.as_binary_u8())?; - file.flush()?; + if !std::fs::exists("compile-shaders")? { + return Ok(()); + } + let code = Command::new("cargo") + .args([ + "run", + "--manifest-path", + "compile-shaders/Cargo.toml", + "-p", + "compile-shaders-build-rs", + ]) + .status()?; + if !code.success() { + bail!("compile-shaders failed"); + } Ok(()) } diff --git a/compile-shaders/.gitignore b/compile-shaders/.gitignore new file mode 100644 index 00000000..ea8c4bf7 --- /dev/null +++ b/compile-shaders/.gitignore @@ -0,0 +1 @@ +/target diff --git a/compile-shaders/Cargo.lock b/compile-shaders/Cargo.lock new file mode 100644 index 00000000..f1564570 --- /dev/null +++ b/compile-shaders/Cargo.lock @@ -0,0 +1,196 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "cc" +version = "1.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + +[[package]] +name = "compile-shaders-build-rs" +version = "0.1.0" +dependencies = [ + "anyhow", + "compile-shaders-core", +] + +[[package]] +name = "compile-shaders-compile" +version = "0.1.0" +dependencies = [ + "anyhow", + "compile-shaders-core", + "shaderc", +] + +[[package]] +name = "compile-shaders-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "blake3", + "walkdir", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "find-msvc-tools" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" + +[[package]] +name = "libc" +version = "0.2.175" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" + +[[package]] +name = "link-cplusplus" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" +dependencies = [ + "cc", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "shaderc" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab2a6e36d1c1e2320c87e2b806a3e7b0dffaa67b82c14a39dad6cf7637208ae" +dependencies = [ + "libc", + "shaderc-sys", +] + +[[package]] +name = "shaderc-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdceb85b2c6d2c27b95ffe2d341063dfded0aca8046f7f60c544bbeaeaf8bcae" +dependencies = [ + "cmake", + "libc", + "link-cplusplus", + "pkg-config", + "roxmltree", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link", +] diff --git a/compile-shaders/Cargo.toml b/compile-shaders/Cargo.toml new file mode 100644 index 00000000..f639be3e --- /dev/null +++ b/compile-shaders/Cargo.toml @@ -0,0 +1,3 @@ +[workspace] +resolver = "3" +members = ["build-rs", "compile", "core"] diff --git a/compile-shaders/build-rs/Cargo.toml b/compile-shaders/build-rs/Cargo.toml new file mode 100644 index 00000000..6af5e98b --- /dev/null +++ b/compile-shaders/build-rs/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "compile-shaders-build-rs" +version = "0.1.0" +edition = "2024" + +[dependencies] +compile-shaders-core = { path = "../core" } +anyhow = "1.0.99" diff --git a/compile-shaders/build-rs/src/main.rs b/compile-shaders/build-rs/src/main.rs new file mode 100644 index 00000000..13895519 --- /dev/null +++ b/compile-shaders/build-rs/src/main.rs @@ -0,0 +1,25 @@ +use { + anyhow::bail, + compile_shaders_core::{ROOT, unchanged}, + std::process::Command, +}; + +fn main() -> anyhow::Result<()> { + println!("cargo:rerun-if-changed={}", ROOT); + if unchanged() { + return Ok(()); + } + let code = Command::new("cargo") + .args([ + "run", + "--manifest-path", + "compile-shaders/Cargo.toml", + "-p", + "compile-shaders-compile", + ]) + .status()?; + if !code.success() { + bail!("compile-shaders failed"); + } + Ok(()) +} diff --git a/compile-shaders/compile/Cargo.toml b/compile-shaders/compile/Cargo.toml new file mode 100644 index 00000000..20375663 --- /dev/null +++ b/compile-shaders/compile/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "compile-shaders-compile" +version = "0.1.0" +edition = "2024" + +[dependencies] +compile-shaders-core = { path = "../core" } +anyhow = "1.0.79" +shaderc = "0.10.1" diff --git a/compile-shaders/compile/src/main.rs b/compile-shaders/compile/src/main.rs new file mode 100644 index 00000000..d780da28 --- /dev/null +++ b/compile-shaders/compile/src/main.rs @@ -0,0 +1,54 @@ +use { + anyhow::{Context, anyhow, bail}, + compile_shaders_core::{BIN, ROOT, update_hash}, + shaderc::{CompileOptions, ResolvedInclude}, + std::{fs::File, io::Write, path::Path}, +}; + +fn main() -> anyhow::Result<()> { + compile("fill.frag")?; + compile("fill.vert")?; + compile("tex.vert")?; + compile("tex.frag")?; + compile("out.vert")?; + compile("out.frag")?; + compile("legacy/fill.frag")?; + compile("legacy/fill.vert")?; + compile("legacy/tex.vert")?; + compile("legacy/tex.frag")?; + update_hash()?; + Ok(()) +} + +fn compile(name: &str) -> anyhow::Result<()> { + let out = format!("{name}.spv").replace("/", "_"); + compile_shader(name, &out).with_context(|| name.to_string()) +} + +fn compile_shader(name: &str, out: &str) -> anyhow::Result<()> { + let root = Path::new(ROOT).join(Path::new(name).parent().unwrap()); + let read = |path: &str| std::fs::read_to_string(root.join(path)); + let mut options = CompileOptions::new()?; + options.set_include_callback(|name, _, _, _| { + Ok(ResolvedInclude { + resolved_name: name.to_string(), + content: read(name).map_err(|e| anyhow!(e).to_string())?, + }) + }); + let stage = match Path::new(name) + .extension() + .and_then(|e| e.to_str()) + .unwrap_or("") + { + "frag" => shaderc::ShaderKind::Fragment, + "vert" => shaderc::ShaderKind::Vertex, + n => bail!("Unknown shader stage {}", n), + }; + let src = std::fs::read_to_string(format!("{}/{}", ROOT, name))?; + let compiler = shaderc::Compiler::new()?; + let binary = compiler.compile_into_spirv(&src, stage, name, "main", Some(&options))?; + let mut file = File::create(Path::new(BIN).join(out))?; + file.write_all(binary.as_binary_u8())?; + file.flush()?; + Ok(()) +} diff --git a/compile-shaders/core/Cargo.toml b/compile-shaders/core/Cargo.toml new file mode 100644 index 00000000..a57d0782 --- /dev/null +++ b/compile-shaders/core/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "compile-shaders-core" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.79" +walkdir = "2.5.0" +blake3 = "1.8.2" diff --git a/compile-shaders/core/src/lib.rs b/compile-shaders/core/src/lib.rs new file mode 100644 index 00000000..b9a7b348 --- /dev/null +++ b/compile-shaders/core/src/lib.rs @@ -0,0 +1,38 @@ +use {std::fmt::Write, walkdir::WalkDir}; + +pub const ROOT: &str = "src/gfx_apis/vulkan/shaders"; +pub const BIN: &str = "src/gfx_apis/vulkan/shaders_bin"; +pub const HASH: &str = "src/gfx_apis/vulkan/shaders_hash.txt"; + +fn calculate_hash() -> anyhow::Result { + let dir = WalkDir::new(ROOT); + let mut files = vec![]; + for file in dir { + let file = file?; + if file.file_type().is_file() { + files.push(file.path().to_path_buf()); + } + } + files.sort(); + let mut out = String::new(); + for file in files { + let data = std::fs::read(&file)?; + writeln!(out, "{} {}", blake3::hash(&data).to_hex(), file.display())?; + } + Ok(out) +} + +pub fn unchanged() -> bool { + let Ok(actual) = std::fs::read_to_string(HASH) else { + return false; + }; + let Ok(expected) = calculate_hash() else { + return false; + }; + actual == expected +} + +pub fn update_hash() -> anyhow::Result<()> { + std::fs::write(HASH, calculate_hash()?)?; + Ok(()) +} diff --git a/compile-shaders/core/src/main.rs b/compile-shaders/core/src/main.rs new file mode 100644 index 00000000..1e4ac922 --- /dev/null +++ b/compile-shaders/core/src/main.rs @@ -0,0 +1,5 @@ +use compile_shaders_core::update_hash; + +fn main() -> anyhow::Result<()> { + update_hash() +} diff --git a/docs/setup.md b/docs/setup.md index 26f5dd88..6cff6112 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -12,9 +12,6 @@ The following libraries must be installed before compiling Jay: You must also have a C compiler (GCC or Clang) and the latest version of rust installed. You can install rust with [rustup](https://rustup.rs/). -It is recommended that you install shaderc. -Otherwise it will be built from source which can take several minutes. - ## Runtime Dependencies Most of these dependencies are optional and will enable additional features. diff --git a/src/gfx_apis/vulkan/shaders.rs b/src/gfx_apis/vulkan/shaders.rs index 0e441582..d6b8bec8 100644 --- a/src/gfx_apis/vulkan/shaders.rs +++ b/src/gfx_apis/vulkan/shaders.rs @@ -5,18 +5,16 @@ use { uapi::Packed, }; -pub const FILL_VERT: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/fill.vert.spv")); -pub const FILL_FRAG: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/fill.frag.spv")); -pub const TEX_VERT: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/tex.vert.spv")); -pub const TEX_FRAG: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/tex.frag.spv")); -pub const OUT_VERT: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/out.vert.spv")); -pub const OUT_FRAG: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/out.frag.spv")); -pub const LEGACY_FILL_VERT: &[u8] = - include_bytes!(concat!(env!("OUT_DIR"), "/legacy_fill.vert.spv")); -pub const LEGACY_FILL_FRAG: &[u8] = - include_bytes!(concat!(env!("OUT_DIR"), "/legacy_fill.frag.spv")); -pub const LEGACY_TEX_VERT: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/legacy_tex.vert.spv")); -pub const LEGACY_TEX_FRAG: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/legacy_tex.frag.spv")); +pub const FILL_VERT: &[u8] = include_bytes!("shaders_bin/fill.vert.spv"); +pub const FILL_FRAG: &[u8] = include_bytes!("shaders_bin/fill.frag.spv"); +pub const TEX_VERT: &[u8] = include_bytes!("shaders_bin/tex.vert.spv"); +pub const TEX_FRAG: &[u8] = include_bytes!("shaders_bin/tex.frag.spv"); +pub const OUT_VERT: &[u8] = include_bytes!("shaders_bin/out.vert.spv"); +pub const OUT_FRAG: &[u8] = include_bytes!("shaders_bin/out.frag.spv"); +pub const LEGACY_FILL_VERT: &[u8] = include_bytes!("shaders_bin/legacy_fill.vert.spv"); +pub const LEGACY_FILL_FRAG: &[u8] = include_bytes!("shaders_bin/legacy_fill.frag.spv"); +pub const LEGACY_TEX_VERT: &[u8] = include_bytes!("shaders_bin/legacy_tex.vert.spv"); +pub const LEGACY_TEX_FRAG: &[u8] = include_bytes!("shaders_bin/legacy_tex.frag.spv"); pub struct VulkanShader { pub(super) device: Rc, diff --git a/src/gfx_apis/vulkan/shaders_bin/fill.frag.spv b/src/gfx_apis/vulkan/shaders_bin/fill.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..5a16604393faa7b48aecf05273be7b0d32671fc2 GIT binary patch literal 1024 zcmZQ(Qf6mhU}WHC;AN0xfB-=TCI&_Z1_luQScHLri-D6NI3O(E+aoBxAfvK4GdVFQ zzPKd6C^0=XKB+V&!0mKKfVQSbI*uY|- za4SnKD#=VvEe6TM#6f;4NK8q|%u6>!7H4K)V1SAnfy6=f3o9#xKyn}qvV#}uCy=|fq5AlsX;p>+;%AT=keDn3GXu!a zpm305fcO{02e}PoF34_>KS6vU1_p54fYJ-dtsp)q?m+GZxlaV@K2ThM>;>^fL5>BB zvoMH3^@H4O#=r^=A5b`elz{yEgMo>Gm4Si5k%1MgR-A!>0c1YN3|nZ}fx;dnZpXk3 Qb_YeWdthWMh?wA7;1 zyyR2{76vYmoV&ljyN_#pazR0SaYIQ#NoH9p$P5l7b(wj|Ii)Gc z3RoFfP~5`Gz|6qOz`#(DU(5iK<7HrAa7ipl1i6!qft3No2eFg$bMlKA7#P?X*uY|- zuqsO}D#=VvEe6TM#6f;3NK8q|%u6>!7H0<80TDL>iL)}WG6*s-FodC)!2%Wo$-~?u z%)r2q0(B2713LpK?9y}MJ@bl767!N%J@ZmhD?sX58Q8#Knw}F6GBULSDgzQ%VPIfL z&xsF6ErLja)Pvj$5(lwCa{0xXC7Jno3~UVS3?Olk|G?szc_qP_RjD9#FgcJP({tjT zb21BDG9m7O>jU`{Bv+b~1D6AZF(|Gd&Br%YEATb#R1_pNq76yKB95H}X9f%Lo&&I&Opa7O<28S=m91jLWSi{T%#Rte4 zAoD;pNIxjNxfvK3w88pWz+nvHYk~R9;IM+2#|mbH^nv6-G{`Toump*L`~(vN=>ds> z+z%52u|Z;>yduoN1kM+V;2gpLW{WW}Gr;^J4$dv0^azntU|<3JnVo@w0fa&FT+pxp znWxUc%m6a`sR#puC<6-v4>U|b?v#V3X^?u58ju_aYeUuXF@W+F1A`1Sd_m@e#AF$m z89?C+3UfIINZ5k-Ah&?b0oer#QxIQ>fdQP)K>5jOL-UGQu1nM487=i2s z@kJRRWe7;W7*s#VT$sEh$nju(EDTamwIF>U^Fe%2+=0x4@j+z{hz~MPo`Hb@6po;&U>)015|C-T>(Vg(pZYNZuBl zqZt?!!Ql%@V<7wOpyee<9AqBIE$Yy?31k43HVh1)ya5se`2i*d%0D16Q1}Nhurq-C otHS_M3z7qc5hz?h{sM)G9<+V{xd~(^h!0Z#mw}PNf`O3%0ImF$+W-In literal 0 HcmV?d00001 diff --git a/src/gfx_apis/vulkan/shaders_bin/legacy_fill.frag.spv b/src/gfx_apis/vulkan/shaders_bin/legacy_fill.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..961877a707b4260e86b4b1b16952ea5f26bbee82 GIT binary patch literal 964 zcmZQ(Qf6mhU}WHC;AN0ufB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!NkiFG&O0 z2Xdbj0|P^5URgY{m^9Rk+{BWi%nAkucLo-)Kjc7~7$AIJ1_lN;1_lNWFrOLhW>9!~ zK-~{gsth6+7#Lt;AU}b`6u^2|z+HWG;vgaw~`rifIrZ zPK5+&X22i|%+ze8$z`z1_JIE}MxHXgyiZ75D zNIe(Sk0AR+8CV#&85kHqW`W$R4dwGd)0qqd3j-)jKzcx8attisFae2y%m>-W&%gi< zM^OBN>;v&Z@d~mNWWFHOe2||&=7ab`44|9 z7#kFhMo{;G!Vu(M7#|ddAU;ejC=AUQSi#{13Kx(Z$p1eWm>5_Y7#JKGSi$y+fb$On g1IRtL(6AI`U|;}=+c7YM{RQIxWng5mU|?hb0F%T}E&u=k literal 0 HcmV?d00001 diff --git a/src/gfx_apis/vulkan/shaders_bin/legacy_fill.vert.spv b/src/gfx_apis/vulkan/shaders_bin/legacy_fill.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..48685e279bd423fe200d9b250c02eb14125b56de GIT binary patch literal 1576 zcmZQ(Qf6mhU}WHC;AOC6fB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!N?MTg@KE~-6!7N-{0NGH9onZAilVy zGAA`YCo?ZKJ|(j#HMu0SEES}V14&(GUUE)p3bF!L1{MZnyI2|67(n)==fsDl7L}w{ zc;=;~RxmKIGB7g;F)%O`#=yb=;)B>Ac{T=CFdyXS!R7(n76Hb^eNII|=(KaYWpfgLOk zG7~JGnO72=S(OS>2a^MZO?pneb53S~OJ;FNVqS78TpuWeL2{)zIdD0UpFrUXGQ*vL z1?+Eb1_lN#1_lNYUzCA?fsKIyEbh+04E7Vq4iBjRK>CzH1Oo#DObp~ckeCA43}&#K zVR~Tx0@(r52GRo(1L*;YfoPZ*NDoL1GJsMA1DGw!zyfwJ z$Zn8X3JfgZ)C6LK{9z5{gW?w?CdR;~x-WMBa62Z@8s z7KW+?xm}xqg#pADVF0Bu1_l`h76wpwfz*P;K<0@-%>%ht4w^@d}K2~eu9~yfn)|Ku3=_qGB7ZJ4HbF;l1*DBlDyurom7l7RuF79aQBIK_xE@A zag9$dD2OjEsmw`@&&kY7jZeueN=+`wEK3Ec<3LiEnU|bXnu4r=m4O9pKFnTL24)6M z1_p*?1_lNYo0oxsp(M3}0i+J(rjpc(_=5am237_R1~CQ(hK$7G_{5xojKuid(wvga zf}G6MB9Qx88Q2&k85kIfi<0BvYQSc)FeorEFt{X^B!bkjF+lhrHppBy23D{*mj1_p-A zys~&?F&n5KauZ96GAkGu+!#PX<|U|LH2=!K=Pn)kOOg`@}O`4xfg^%@*sbM z*dQe!K1eMa0|NsGRJ}X{0|SE34E8U`Zyr#;gY+qb2nGfQm>9@BkQgZJU}7LWATbB1 zxuEm{vJ0dYWG~47AblWpAU??dAU-JNf%qW5gZQAdC(OVEPFsrLRK@^ii!m^R-3hW& zoPmV_lmG`3VV<+$Uc6kc_8ViGlc_c!Tlfpm7CK z0}=;?3&@S2bOXvipfCfu5yS_j9grBvPEdS-0ELqp0|NsnY(e1%auX=b)EO8UK;j@i$n6@?@a$t?1-ns`fq?-e22uxe8%XRY z0}}(tUXUFiyI}ftp!)q8I2b^2q07L)01^XXkTXH?2=Xh;O?p_|q|d;>01^ke0b~ZK z0sxr<5{KzC#G=m#oPHS?0vSN1DFcHs0|Ns{FUVe)mpF literal 0 HcmV?d00001 diff --git a/src/gfx_apis/vulkan/shaders_bin/legacy_tex.vert.spv b/src/gfx_apis/vulkan/shaders_bin/legacy_tex.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..edf86be6cb7970c8b0cdb14e9c7b1849d474572b GIT binary patch literal 1924 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 aFwupU!5}w*>;&;a>i;q@GFUJ$G5`RuN{Zb8 literal 0 HcmV?d00001 diff --git a/src/gfx_apis/vulkan/shaders_bin/tex.frag.spv b/src/gfx_apis/vulkan/shaders_bin/tex.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..bc8cb903740f5635e967caf4137de319ab7aba2f GIT binary patch literal 13536 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 tj0_AQF&Ku$YeWdtmiVI7 zwA7;1yyR2{76vYmoV&ljyN_#pazR0SaYIQ#NoH9p$P5l7b(wj| zIi)Gc3RoFfP}~FJb2Bh7grydhq*gF6uraVOfcPM{7UUN*uraWL`JnJANv((niGlR+ zGB7ZdLG^(6{0s~XE{P?HAbo5MYz!bihz(McnVeb-VuQ>EiG$3_EzMy7=@UY;8^i~x z1=$0#8^i~xN7&8EAOh8cFqaK12GWOYAIN+$1_p){sJmDh*cm|KpPm!%nO9trn3tUD znU@0cH3I`H0~>=K0|P^PPJBRW5iB%7;Q5`jtTh0|Nt04CGFb7zYCbgF6EYg8&1_Zww4Dz914G zqz4r4AR|C}Kr~DYW{v{X9AT(FP?`q01r#?Bx3IwDL;~s#kQ~S?n3*7VfZ~Ijfq_9A zY#uW>OdKn|L(xEMg?3&>0s1|9~8JjhMz49pCC3=9lUMHm=BYC-t~ z#0S|AG7A)6Ftb2>P<+AoAoZa50;vIs%Q7%CfZ_!tCda@Gjt3B5fq?~X2PiH;d{L~erZ~^hvpkV?MgW0DEH510yVSvOBjIR$aM;RDEabyimkDxdQ z$%E3j4OBlU+-#xpATc>;o`>lH$$>D)9rjQ&LFodAo~0QW7(n76J}5pwX&n?7jtp!J zpm+eKU62}(9*~?Z0~-S_JG_8)1wQu2b4xYdO&=TI+z|ks6C)Ch3NrR+#q{E=?J6;#0RMZ=>g>@ zL#V%DZUgz-2>arpn5=N zgWLn+gVe$Fm_zj-``ZGl2j*`OAEXYZ#}cXs+22-BJurWR_#kz#^x_0A zyaUQFpf~~L6>n%e31k;23_yI4dXSxFNG3;>p{$)f-O literal 0 HcmV?d00001 diff --git a/src/gfx_apis/vulkan/shaders_hash.txt b/src/gfx_apis/vulkan/shaders_hash.txt new file mode 100644 index 00000000..cbe56af7 --- /dev/null +++ b/src/gfx_apis/vulkan/shaders_hash.txt @@ -0,0 +1,18 @@ +f49076a6465a6790c72a6d290c13d5f14c7dae8ae3eed6ca71c57424e3306f66 src/gfx_apis/vulkan/shaders/eotfs.glsl +8a38df18851cd13884499820f26939fb7319f45d913d867f254d8118d59fb117 src/gfx_apis/vulkan/shaders/fill.common.glsl +21c488d12aa5ad2f109ec44cb856dfe837e02ea9025b5ed64439d742c17cbf30 src/gfx_apis/vulkan/shaders/fill.frag +4fb481d8d73afdfb0d8f077eb8665d86f06c8a32a91e44ed369ef5dff554646d src/gfx_apis/vulkan/shaders/fill.vert +63af15c4e00587a7bb8494934c88d9874712a511217829b50f3c08fa3c461082 src/gfx_apis/vulkan/shaders/frag_spec_const.glsl +c315a064b48dd5bdb607a6b79c30d31b6e59ffec69e93d50ab875abf97c41bbf src/gfx_apis/vulkan/shaders/legacy/fill.common.glsl +590d061b97446fc501158609eaf098b71bc7b328c008b586ff36613ce690d618 src/gfx_apis/vulkan/shaders/legacy/fill.frag +ad22a79e1a88a12daa40c0a2b953084c129a408297c8ca544d60e0b6001470b9 src/gfx_apis/vulkan/shaders/legacy/fill.vert +e0a8769dd7938dd02e66db9e9048ed6bef8f8c42671f2e2c7a7976a6d498f685 src/gfx_apis/vulkan/shaders/legacy/tex.common.glsl +0e7c72ea11671065842c8b4ad4131a7df33b427dc0ea76bf5a896546f6636cb0 src/gfx_apis/vulkan/shaders/legacy/tex.frag +4402f7ccdbb9fb52fb6cda3aab13cf89e2980c79b541f8be0463efd64a5f98ed src/gfx_apis/vulkan/shaders/legacy/tex.vert +3ba5d05c2b95099e5424b3ade5d1c31d431f5730b1d0b51a9fb5f8afc4ea14b4 src/gfx_apis/vulkan/shaders/out.common.glsl +5069f619c7d722815a022e2d84720a2d8290af49a3ed49ea0cd26b52115cc39a src/gfx_apis/vulkan/shaders/out.frag +0adc7e12328c15fb3e7e6c8b8701a182223c2f15337e14131f41dd247e697809 src/gfx_apis/vulkan/shaders/out.vert +e22d4d3318a350def8ef19c7b27dc6a308a84c2fe9d7c02b81107f72073cd481 src/gfx_apis/vulkan/shaders/tex.common.glsl +06993d4d882fe5c651e5ab54f0116b9622352a97f3575985076ef464b472dd39 src/gfx_apis/vulkan/shaders/tex.frag +423cf327c9fcc4070dbf75321c1224a1589b6cf3d2f1ea5e8bd0362e1a9f3aa1 src/gfx_apis/vulkan/shaders/tex.vert +b982f7101c22931a33b32dce3408387f3392c0f0ad0ca5852da265b0d12856bb src/gfx_apis/vulkan/shaders/tex_set.glsl