Skip to content

Commit a14aaa1

Browse files
committed
Add blackbox difftest
1 parent 681b958 commit a14aaa1

File tree

8 files changed

+161
-0
lines changed

8 files changed

+161
-0
lines changed

tests/difftests/tests/Cargo.lock

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/difftests/tests/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ members = [
3838
"lang/core/ops/trig_ops/trig_ops-wgsl",
3939
"lang/core/ops/vector_swizzle/vector_swizzle-rust",
4040
"lang/core/ops/vector_swizzle/vector_swizzle-wgsl",
41+
"lang/core/intrinsics/black_box_noop/with-black-box",
42+
"lang/core/intrinsics/black_box_noop/without-black-box",
4143
]
4244

4345
[workspace.package]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[package]
2+
name = "black_box-noop-with"
3+
edition.workspace = true
4+
5+
[lints]
6+
workspace = true
7+
8+
[lib]
9+
crate-type = ["dylib"]
10+
11+
# GPU deps
12+
[dependencies]
13+
spirv-std.workspace = true
14+
15+
# CPU deps (for the test harness)
16+
[target.'cfg(not(target_arch = "spirv"))'.dependencies]
17+
difftest.workspace = true
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#![no_std]
2+
3+
use core::hint::black_box;
4+
use spirv_std::spirv;
5+
6+
#[spirv(compute(threads(1)))]
7+
pub fn main_cs(
8+
#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] out: &mut [u32],
9+
) {
10+
let x = 42i32;
11+
let y = black_box(x) as u32;
12+
13+
let a = 3.14f32;
14+
let b = black_box(a).to_bits();
15+
16+
let v = [1u32, 2, 3, 4];
17+
let w = black_box(v);
18+
19+
let result = black_box(10) + black_box(20);
20+
21+
let data = 100u32;
22+
let ref_data = black_box(&data);
23+
24+
let pair = (5u32, 6u32);
25+
let pair_bb = black_box(pair);
26+
let pair_sum = pair_bb.0 + pair_bb.1;
27+
28+
let _ = black_box(());
29+
30+
let values = [
31+
y, b, w[0], w[1], w[2], w[3], result, *ref_data, pair_sum, 0, 0, 0,
32+
];
33+
out[0] = values[0];
34+
out[1] = values[1];
35+
out[2] = values[2];
36+
out[3] = values[3];
37+
out[4] = values[4];
38+
out[5] = values[5];
39+
out[6] = values[6];
40+
out[7] = values[7];
41+
out[8] = values[8];
42+
out[9] = values[9];
43+
out[10] = values[10];
44+
out[11] = values[11];
45+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use difftest::config::{Config, TestMetadata};
2+
use difftest::scaffold::compute::{RustComputeShader, WgpuComputeTest};
3+
4+
fn main() {
5+
let config = Config::from_path(std::env::args().nth(1).unwrap()).unwrap();
6+
let test = WgpuComputeTest::new(RustComputeShader::default(), [1, 1, 1], 12 * 4);
7+
test.run_test(&config).unwrap();
8+
config
9+
.write_metadata(&TestMetadata::u32())
10+
.expect("Failed to write metadata");
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[package]
2+
name = "black_box-noop-without"
3+
edition.workspace = true
4+
5+
[lints]
6+
workspace = true
7+
8+
[lib]
9+
crate-type = ["dylib"]
10+
11+
# GPU deps
12+
[dependencies]
13+
spirv-std.workspace = true
14+
15+
# CPU deps (for the test harness)
16+
[target.'cfg(not(target_arch = "spirv"))'.dependencies]
17+
difftest.workspace = true
18+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#![no_std]
2+
3+
use spirv_std::spirv;
4+
5+
#[spirv(compute(threads(1)))]
6+
pub fn main_cs(
7+
#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] out: &mut [u32],
8+
) {
9+
let x = 42i32;
10+
let y = x as u32;
11+
12+
let a = 3.14f32;
13+
let b = a.to_bits();
14+
15+
let v = [1u32, 2, 3, 4];
16+
let w = v;
17+
18+
let result = 10 + 20;
19+
20+
let data = 100u32;
21+
let ref_data = &data;
22+
23+
let pair = (5u32, 6u32);
24+
let pair_sum = pair.0 + pair.1;
25+
26+
let values = [
27+
y, b, w[0], w[1], w[2], w[3], result, *ref_data, pair_sum, 0, 0, 0,
28+
];
29+
out[0] = values[0];
30+
out[1] = values[1];
31+
out[2] = values[2];
32+
out[3] = values[3];
33+
out[4] = values[4];
34+
out[5] = values[5];
35+
out[6] = values[6];
36+
out[7] = values[7];
37+
out[8] = values[8];
38+
out[9] = values[9];
39+
out[10] = values[10];
40+
out[11] = values[11];
41+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use difftest::config::{Config, TestMetadata};
2+
use difftest::scaffold::compute::{RustComputeShader, WgpuComputeTest};
3+
4+
fn main() {
5+
let config = Config::from_path(std::env::args().nth(1).unwrap()).unwrap();
6+
let test = WgpuComputeTest::new(RustComputeShader::default(), [1, 1, 1], 12 * 4);
7+
test.run_test(&config).unwrap();
8+
config
9+
.write_metadata(&TestMetadata::u32())
10+
.expect("Failed to write metadata");
11+
}

0 commit comments

Comments
 (0)