Skip to content

Commit 118cbc0

Browse files
committed
Add computeheadless rust shader
1 parent aff81e0 commit 118cbc0

5 files changed

Lines changed: 44 additions & 1 deletion

File tree

examples/computeheadless/computeheadless.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ class VulkanExample
437437
#else
438438
shaderStage.module = vks::tools::loadShader((shadersPath + "headless.comp.spv").c_str(), device);
439439
#endif
440-
shaderStage.pName = "main";
440+
shaderStage.pName = (shaderDir == "rust") ? "main_cs" : "main";
441441
shaderStage.pSpecializationInfo = &specializationInfo;
442442
shaderModule = shaderStage.module;
443443

shaders/rust/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ members = [
6969
"occlusionquery/simple",
7070
"occlusionquery/mesh",
7171
"occlusionquery/occluder",
72+
"computeheadless/headless",
7273
]
7374

7475
[workspace.dependencies]
1.74 KB
Binary file not shown.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "computeheadless-headless"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
spirv-std = { workspace = true }
8+
9+
[lib]
10+
crate-type = ["dylib"]
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#![cfg_attr(target_arch = "spirv", no_std)]
2+
#![allow(clippy::missing_safety_doc)]
3+
4+
use spirv_std::{spirv, glam::UVec3};
5+
6+
fn fibonacci(n: u32) -> u32 {
7+
if n <= 1 {
8+
return n;
9+
}
10+
let mut curr = 1;
11+
let mut prev = 1;
12+
for i in 2..n {
13+
let temp = curr;
14+
curr += prev;
15+
prev = temp;
16+
}
17+
curr
18+
}
19+
20+
#[spirv(compute(threads(1, 1, 1)))]
21+
pub fn main_cs(
22+
#[spirv(global_invocation_id)] global_id: UVec3,
23+
#[spirv(storage_buffer, descriptor_set = 0, binding = 0)] values: &mut [u32],
24+
#[spirv(spec_constant(id = 0))] buffer_elements: u32,
25+
) {
26+
let index = global_id.x;
27+
if index >= buffer_elements {
28+
return;
29+
}
30+
31+
values[index as usize] = fibonacci(values[index as usize]);
32+
}

0 commit comments

Comments
 (0)