From f2cd9b8d1e16cd781d38d1d9f11135c365a88dd2 Mon Sep 17 00:00:00 2001 From: Firestar99 Date: Mon, 7 Jul 2025 11:56:21 +0200 Subject: [PATCH] blake3 difftest --- tests/difftests/tests/Cargo.lock | 63 +++++++++++++++++-- tests/difftests/tests/Cargo.toml | 5 +- .../tests/blake3/blake3-rust-gpu/Cargo.toml | 20 ++++++ .../tests/blake3/blake3-rust-gpu/src/lib.rs | 13 ++++ .../tests/blake3/blake3-rust-gpu/src/main.rs | 13 ++++ .../tests/blake3/blake3-rust/Cargo.toml | 12 ++++ .../tests/blake3/blake3-rust/src/main.rs | 16 +++++ 7 files changed, 135 insertions(+), 7 deletions(-) create mode 100644 tests/difftests/tests/blake3/blake3-rust-gpu/Cargo.toml create mode 100644 tests/difftests/tests/blake3/blake3-rust-gpu/src/lib.rs create mode 100644 tests/difftests/tests/blake3/blake3-rust-gpu/src/main.rs create mode 100644 tests/difftests/tests/blake3/blake3-rust/Cargo.toml create mode 100644 tests/difftests/tests/blake3/blake3-rust/src/main.rs diff --git a/tests/difftests/tests/Cargo.lock b/tests/difftests/tests/Cargo.lock index 7ad114e41e..e3d8f677d7 100644 --- a/tests/difftests/tests/Cargo.lock +++ b/tests/difftests/tests/Cargo.lock @@ -23,6 +23,12 @@ version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +[[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" @@ -74,6 +80,38 @@ dependencies = [ "serde", ] +[[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 = "blake3-rust" +version = "0.0.0" +dependencies = [ + "anyhow", + "blake3-rust-gpu", + "bytemuck", + "difftest", +] + +[[package]] +name = "blake3-rust-gpu" +version = "0.0.0" +dependencies = [ + "blake3", + "difftest", + "spirv-std", +] + [[package]] name = "block" version = "0.1.6" @@ -138,6 +176,15 @@ dependencies = [ "thiserror 2.0.12", ] +[[package]] +name = "cc" +version = "1.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -161,6 +208,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + [[package]] name = "core-foundation" version = "0.9.4" @@ -930,12 +983,10 @@ dependencies = [ ] [[package]] -name = "simple-compute-rust" -version = "0.0.0" -dependencies = [ - "difftest", - "spirv-std", -] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simple-compute-wgsl" diff --git a/tests/difftests/tests/Cargo.toml b/tests/difftests/tests/Cargo.toml index 34f08f9250..709dd41b8b 100644 --- a/tests/difftests/tests/Cargo.toml +++ b/tests/difftests/tests/Cargo.toml @@ -1,7 +1,8 @@ [workspace] resolver = "2" members = [ - "simple-compute/simple-compute-rust", + "blake3/blake3-rust", + "blake3/blake3-rust-gpu", "simple-compute/simple-compute-wgsl", ] @@ -21,6 +22,8 @@ spirv-std = { path = "../../../crates/spirv-std", version = "=0.9.0" } spirv-std-types = { path = "../../../crates/spirv-std/shared", version = "=0.9.0" } spirv-std-macros = { path = "../../../crates/spirv-std/macros", version = "=0.9.0" } difftest = { path = "../../../tests/difftests/lib" } +anyhow = "1.0.98" +bytemuck = "1.21.0" # External dependencies that need to be mentioned more than once. num-traits = { version = "0.2.15", default-features = false } glam = { version = ">=0.22, <=0.29", default-features = false } diff --git a/tests/difftests/tests/blake3/blake3-rust-gpu/Cargo.toml b/tests/difftests/tests/blake3/blake3-rust-gpu/Cargo.toml new file mode 100644 index 0000000000..aa177f0572 --- /dev/null +++ b/tests/difftests/tests/blake3/blake3-rust-gpu/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "blake3-rust-gpu" +edition.workspace = true + +[lints] +workspace = true + +[lib] +crate-type = ["rlib", "dylib"] + +# Common deps +[dependencies] + +# GPU deps +spirv-std.workspace = true +blake3 = {version = "1.8.2", default-features = false} + +# CPU deps +[target.'cfg(not(target_arch = "spirv"))'.dependencies] +difftest.workspace = true diff --git a/tests/difftests/tests/blake3/blake3-rust-gpu/src/lib.rs b/tests/difftests/tests/blake3/blake3-rust-gpu/src/lib.rs new file mode 100644 index 0000000000..ad7c0af243 --- /dev/null +++ b/tests/difftests/tests/blake3/blake3-rust-gpu/src/lib.rs @@ -0,0 +1,13 @@ +#![no_std] + +use spirv_std::spirv; + +#[spirv(compute(threads(1)))] +pub fn main_cs(#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] output: &mut [u32]) { + let hash = blake3::Hasher::new().finalize(); + let bytes = hash.as_bytes(); + + for i in 0..8 { + output[i] = u32::from_le_bytes([bytes[i], bytes[i + 1], bytes[i + 2], bytes[i + 3]]); + } +} diff --git a/tests/difftests/tests/blake3/blake3-rust-gpu/src/main.rs b/tests/difftests/tests/blake3/blake3-rust-gpu/src/main.rs new file mode 100644 index 0000000000..b98488302a --- /dev/null +++ b/tests/difftests/tests/blake3/blake3-rust-gpu/src/main.rs @@ -0,0 +1,13 @@ +use difftest::config::Config; +use difftest::scaffold::compute::{RustComputeShader, WgpuComputeTest}; + +fn main() { + // Load the config from the harness. + let config = Config::from_path(std::env::args().nth(1).unwrap()).unwrap(); + + // Define test parameters, loading the rust shader from the current crate. + let test = WgpuComputeTest::new(RustComputeShader::default(), [1, 1, 1], 1024); + + // Run the test and write the output to a file. + test.run_test(&config).unwrap(); +} diff --git a/tests/difftests/tests/blake3/blake3-rust/Cargo.toml b/tests/difftests/tests/blake3/blake3-rust/Cargo.toml new file mode 100644 index 0000000000..5c11a610e2 --- /dev/null +++ b/tests/difftests/tests/blake3/blake3-rust/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "blake3-rust" +edition.workspace = true + +[lints] +workspace = true + +[dependencies] +difftest.workspace = true +anyhow.workspace = true +bytemuck.workspace = true +blake3-rust-gpu = {path = "../blake3-rust-gpu"} diff --git a/tests/difftests/tests/blake3/blake3-rust/src/main.rs b/tests/difftests/tests/blake3/blake3-rust/src/main.rs new file mode 100644 index 0000000000..7d6d58bc0a --- /dev/null +++ b/tests/difftests/tests/blake3/blake3-rust/src/main.rs @@ -0,0 +1,16 @@ +use difftest::config::Config; +use std::fs::File; +use std::io::Write; + +fn main() { + let mut buf = [0u32; 256]; + blake3_rust_gpu::main_cs(&mut buf); + write_cpu_test(bytemuck::bytes_of(&buf)).unwrap(); +} + +fn write_cpu_test(output: &[u8]) -> anyhow::Result<()> { + let config = Config::from_path(std::env::args().nth(1).unwrap()).unwrap(); + let mut f = File::create(&config.output_path)?; + f.write_all(&output)?; + Ok(()) +}