Skip to content

Commit 0347ae5

Browse files
committed
Feature-gate gfx-rs/rspirv dependency
Because our `spirv-builder-cli` can modify itself to comply with various versions of `spirv-builder` from `rust-gpu`, then we also need to match the version of `spirv` that we use to get `spirv::Capabilities`. Namely that `rust-gpu <= v0.9.0` uses `spirv = "0.2.0"` and that `rust-gpu >= "v0.9.0"` uses `spirv = "0.3.0". Another solution to this could be to re-export `spirv` from `spirv-builder`. But I'm not sure that would avoid compiling the entirety of `spirv-builder` (which depends on specific Rust nightly versions), and besides, it's not trivial to retroactively add re-exports to already-published version of `rust-gpu`.
1 parent 3a0ec08 commit 0347ae5

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

crates/cargo-gpu/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ build = "build.rs"
1111

1212
[dependencies]
1313
anyhow.workspace = true
14-
spirv-builder-cli = { path = "../spirv-builder-cli", default-features = false }
14+
spirv-builder-cli = { path = "../spirv-builder-cli", default-features = false, features = ["rspirv-latest"] }
1515
clap.workspace = true
1616
directories.workspace = true
1717
env_logger.workspace = true

crates/spirv-builder-cli/Cargo.lock

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

crates/spirv-builder-cli/Cargo.toml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,29 @@ env_logger = "0.10"
1010
log = "0.4"
1111
serde = "1.0.214"
1212
serde_json = "1.0.132"
13-
spirv = { version = "0.3.0", features = [ "deserialize", "serialize" ] }
1413
toml = "0.8.19"
1514

1615
[features]
1716
default = ["spirv-builder-0_10"]
1817
# The `spirv-builder` before `cargo gpu` existed. It has an incompatible `SpirvBuilder` interface.
19-
spirv-builder-pre-cli = ["dep:spirv-builder-pre-cli"]
18+
spirv-builder-pre-cli = ["dep:spirv-builder-pre-cli", "dep:spirv_0_2"]
2019
# The first version that introduced `cargo gpu`. It has some extra `.builder()` args that make
2120
# dynamically changing build dependencies easier.
22-
spirv-builder-0_10 = ["dep:spirv-builder-0_10"]
21+
spirv-builder-0_10 = ["dep:spirv-builder-0_10", "dep:spirv_0_3"]
22+
#
23+
rspirv-latest = ["dep:spirv_0_3"]
24+
25+
[dependencies.spirv_0_2]
26+
package = "spirv"
27+
version = "0.2.0"
28+
features = [ "deserialize", "serialize" ]
29+
optional = true
30+
31+
[dependencies.spirv_0_3]
32+
package = "spirv"
33+
version = "0.3.0"
34+
features = [ "deserialize", "serialize" ]
35+
optional = true
2336

2437
# NB: All the `${AUTO-REPLACE*}` tokens in each feature get replaced with the same values.
2538
# This is because only one feature can ever be used at once and it makes it easier to just

crates/spirv-builder-cli/src/args.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
#[cfg(feature = "spirv-builder-pre-cli")]
2+
use spirv_0_2 as spirv;
3+
4+
#[cfg(any(feature = "spirv-builder-0_10", feature = "rspirv-latest"))]
5+
use spirv_0_3 as spirv;
6+
17
use std::str::FromStr as _;
28

39
#[derive(clap::Parser, Debug, serde::Deserialize, serde::Serialize)]

crates/spirv-builder-cli/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
pub mod args;
22

3-
pub use spirv;
3+
#[cfg(feature = "spirv-builder-pre-cli")]
4+
pub use spirv_0_2 as spirv;
5+
6+
#[cfg(any(feature = "spirv-builder-0_10", feature = "rspirv-latest"))]
7+
pub use spirv_0_3 as spirv;
48

59
/// Shader source and entry point that can be used to create shader linkage.
610
#[derive(serde::Serialize, Debug, PartialEq, Eq, PartialOrd, Ord)]

0 commit comments

Comments
 (0)