Skip to content

Commit 7358fae

Browse files
committed
black_box: Add difftest
1 parent 6bb1066 commit 7358fae

File tree

8 files changed

+157
-0
lines changed

8 files changed

+157
-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: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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(#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] out: &mut [u32]) {
8+
let x = 42i32;
9+
let y = black_box(x) as u32;
10+
11+
let a = 3.14f32;
12+
let b = black_box(a).to_bits();
13+
14+
let v = [1u32, 2, 3, 4];
15+
let w = black_box(v);
16+
17+
let result = black_box(10) + black_box(20);
18+
19+
let data = 100u32;
20+
let ref_data = black_box(&data);
21+
22+
let pair = (5u32, 6u32);
23+
let pair_bb = black_box(pair);
24+
let pair_sum = pair_bb.0 + pair_bb.1;
25+
26+
let _ = black_box(());
27+
28+
let values = [
29+
y, b, w[0], w[1], w[2], w[3], result, *ref_data, pair_sum, 0, 0, 0,
30+
];
31+
out[0] = values[0];
32+
out[1] = values[1];
33+
out[2] = values[2];
34+
out[3] = values[3];
35+
out[4] = values[4];
36+
out[5] = values[5];
37+
out[6] = values[6];
38+
out[7] = values[7];
39+
out[8] = values[8];
40+
out[9] = values[9];
41+
out[10] = values[10];
42+
out[11] = values[11];
43+
}
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: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#![no_std]
2+
3+
use spirv_std::spirv;
4+
5+
#[spirv(compute(threads(1)))]
6+
pub fn main_cs(#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] out: &mut [u32]) {
7+
let x = 42i32;
8+
let y = x as u32;
9+
10+
let a = 3.14f32;
11+
let b = a.to_bits();
12+
13+
let v = [1u32, 2, 3, 4];
14+
let w = v;
15+
16+
let result = 10 + 20;
17+
18+
let data = 100u32;
19+
let ref_data = &data;
20+
21+
let pair = (5u32, 6u32);
22+
let pair_sum = pair.0 + pair.1;
23+
24+
let values = [
25+
y, b, w[0], w[1], w[2], w[3], result, *ref_data, pair_sum, 0, 0, 0,
26+
];
27+
out[0] = values[0];
28+
out[1] = values[1];
29+
out[2] = values[2];
30+
out[3] = values[3];
31+
out[4] = values[4];
32+
out[5] = values[5];
33+
out[6] = values[6];
34+
out[7] = values[7];
35+
out[8] = values[8];
36+
out[9] = values[9];
37+
out[10] = values[10];
38+
out[11] = values[11];
39+
}
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)