diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a30a7c9120..e642516bb6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -151,7 +151,7 @@ jobs: - name: cargo fetch --locked run: cargo fetch --locked --target ${{ matrix.target }} - name: compiletest - run: cargo run -p compiletests --release --no-default-features --features "use-installed-tools" -- --target-env vulkan1.1,vulkan1.2,spv1.3 + run: cargo run -p compiletests --release --no-default-features --features "use-installed-tools" -- --target-env vulkan1.1,vulkan1.2,vulkan1.3,vulkan1.4 difftest: name: Difftest diff --git a/Cargo.lock b/Cargo.lock index 78e4a63e5f..7fd9be19d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2783,8 +2783,7 @@ version = "0.9.0" [[package]] name = "spirv-tools" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "191e2df260dbaa79c5c334fb9e7b2d5372300d765f5b950c2b54f89d412db5e7" +source = "git+https://github.com/Rust-GPU/spirv-tools-rs?rev=7b32f1fd8fa02ddab87550c5374effe11198bcab#7b32f1fd8fa02ddab87550c5374effe11198bcab" dependencies = [ "memchr", "spirv-tools-sys", @@ -2794,8 +2793,7 @@ dependencies = [ [[package]] name = "spirv-tools-sys" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed89e04a14352154c6aca979f603bf8b59e16dafcf5e6c5f06e786b76c7daaf3" +source = "git+https://github.com/Rust-GPU/spirv-tools-rs?rev=7b32f1fd8fa02ddab87550c5374effe11198bcab#7b32f1fd8fa02ddab87550c5374effe11198bcab" dependencies = [ "cc", ] diff --git a/Cargo.toml b/Cargo.toml index bdf011c205..807b921db9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,7 @@ spirv-builder = { path = "./crates/spirv-builder", version = "=0.9.0", default-f 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" } -spirv-tools = { version = "0.11", default-features = false } +spirv-tools = { git = "https://github.com/Rust-GPU/spirv-tools-rs", rev = "7b32f1fd8fa02ddab87550c5374effe11198bcab", default-features = false } rustc_codegen_spirv = { path = "./crates/rustc_codegen_spirv", version = "=0.9.0", default-features = false } rustc_codegen_spirv-types = { path = "./crates/rustc_codegen_spirv-types", version = "=0.9.0" } rustc_codegen_spirv-target-specs = { path = "crates/rustc_codegen_spirv-target-specs", version = "=0.9.0" } diff --git a/crates/rustc_codegen_spirv-target-specs/src/include_str.rs b/crates/rustc_codegen_spirv-target-specs/src/include_str.rs index 7b52d6da3d..53fba7f788 100644 --- a/crates/rustc_codegen_spirv-target-specs/src/include_str.rs +++ b/crates/rustc_codegen_spirv-target-specs/src/include_str.rs @@ -44,6 +44,10 @@ pub const TARGET_SPECS: &[(&str, &str)] = &[ "spirv-unknown-spv1.5.json", include_str!("../target-specs/spirv-unknown-spv1.5.json"), ), + ( + "spirv-unknown-spv1.6.json", + include_str!("../target-specs/spirv-unknown-spv1.6.json"), + ), ( "spirv-unknown-vulkan1.0.json", include_str!("../target-specs/spirv-unknown-vulkan1.0.json"), @@ -60,4 +64,12 @@ pub const TARGET_SPECS: &[(&str, &str)] = &[ "spirv-unknown-vulkan1.2.json", include_str!("../target-specs/spirv-unknown-vulkan1.2.json"), ), + ( + "spirv-unknown-vulkan1.3.json", + include_str!("../target-specs/spirv-unknown-vulkan1.3.json"), + ), + ( + "spirv-unknown-vulkan1.4.json", + include_str!("../target-specs/spirv-unknown-vulkan1.4.json"), + ), ]; diff --git a/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-spv1.6.json b/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-spv1.6.json new file mode 100644 index 0000000000..17fe415ca9 --- /dev/null +++ b/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-spv1.6.json @@ -0,0 +1,26 @@ +{ + "allows-weak-linkage": false, + "arch": "spirv", + "crt-objects-fallback": "false", + "crt-static-allows-dylibs": true, + "data-layout": "e-m:e-p:32:32:32-i64:64-n8:16:32:64", + "dll-prefix": "", + "dll-suffix": ".spv.json", + "dynamic-linking": true, + "emit-debug-gdb-scripts": false, + "env": "spv1.6", + "linker-flavor": "unix", + "linker-is-gnu": false, + "llvm-target": "spirv-unknown-spv1.6", + "main-needs-argc-argv": false, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "unknown", + "panic-strategy": "abort", + "simd-types-indirect": false, + "target-pointer-width": "32" +} diff --git a/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-vulkan1.3.json b/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-vulkan1.3.json new file mode 100644 index 0000000000..5ed3beb293 --- /dev/null +++ b/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-vulkan1.3.json @@ -0,0 +1,26 @@ +{ + "allows-weak-linkage": false, + "arch": "spirv", + "crt-objects-fallback": "false", + "crt-static-allows-dylibs": true, + "data-layout": "e-m:e-p:32:32:32-i64:64-n8:16:32:64", + "dll-prefix": "", + "dll-suffix": ".spv.json", + "dynamic-linking": true, + "emit-debug-gdb-scripts": false, + "env": "vulkan1.3", + "linker-flavor": "unix", + "linker-is-gnu": false, + "llvm-target": "spirv-unknown-vulkan1.3", + "main-needs-argc-argv": false, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "unknown", + "panic-strategy": "abort", + "simd-types-indirect": false, + "target-pointer-width": "32" +} diff --git a/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-vulkan1.4.json b/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-vulkan1.4.json new file mode 100644 index 0000000000..e77e7433ba --- /dev/null +++ b/crates/rustc_codegen_spirv-target-specs/target-specs/spirv-unknown-vulkan1.4.json @@ -0,0 +1,26 @@ +{ + "allows-weak-linkage": false, + "arch": "spirv", + "crt-objects-fallback": "false", + "crt-static-allows-dylibs": true, + "data-layout": "e-m:e-p:32:32:32-i64:64-n8:16:32:64", + "dll-prefix": "", + "dll-suffix": ".spv.json", + "dynamic-linking": true, + "emit-debug-gdb-scripts": false, + "env": "vulkan1.4", + "linker-flavor": "unix", + "linker-is-gnu": false, + "llvm-target": "spirv-unknown-vulkan1.4", + "main-needs-argc-argv": false, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "unknown", + "panic-strategy": "abort", + "simd-types-indirect": false, + "target-pointer-width": "32" +} diff --git a/crates/rustc_codegen_spirv/src/target.rs b/crates/rustc_codegen_spirv/src/target.rs index 313c0a474b..8a6cdaf03f 100644 --- a/crates/rustc_codegen_spirv/src/target.rs +++ b/crates/rustc_codegen_spirv/src/target.rs @@ -17,7 +17,8 @@ impl SpirvTarget { | TargetEnv::Universal_1_2 | TargetEnv::Universal_1_3 | TargetEnv::Universal_1_4 - | TargetEnv::Universal_1_5 => MemoryModel::Simple, + | TargetEnv::Universal_1_5 + | TargetEnv::Universal_1_6 => MemoryModel::Simple, TargetEnv::OpenGL_4_0 | TargetEnv::OpenGL_4_1 @@ -38,41 +39,14 @@ impl SpirvTarget { | TargetEnv::Vulkan_1_1 | TargetEnv::WebGPU_0 | TargetEnv::Vulkan_1_1_Spirv_1_4 - | TargetEnv::Vulkan_1_2 => MemoryModel::Vulkan, + | TargetEnv::Vulkan_1_2 + | TargetEnv::Vulkan_1_3 + | TargetEnv::Vulkan_1_4 => MemoryModel::Vulkan, } } pub fn spirv_version(&self) -> (u8, u8) { - #[allow(clippy::match_same_arms)] - match self.env { - TargetEnv::Universal_1_0 => (1, 0), - TargetEnv::Universal_1_1 => (1, 1), - TargetEnv::Universal_1_2 => (1, 2), - TargetEnv::Universal_1_3 => (1, 3), - TargetEnv::Universal_1_4 => (1, 4), - TargetEnv::Universal_1_5 => (1, 5), - - TargetEnv::OpenGL_4_0 => (1, 0), - TargetEnv::OpenGL_4_1 => (1, 0), - TargetEnv::OpenGL_4_2 => (1, 0), - TargetEnv::OpenGL_4_3 => (1, 0), - TargetEnv::OpenGL_4_5 => (1, 0), - - TargetEnv::OpenCL_1_2 => (1, 0), - TargetEnv::OpenCL_2_0 => (1, 0), - TargetEnv::OpenCL_2_1 => (1, 0), - TargetEnv::OpenCL_2_2 => (1, 2), - TargetEnv::OpenCLEmbedded_1_2 => (1, 0), - TargetEnv::OpenCLEmbedded_2_0 => (1, 0), - TargetEnv::OpenCLEmbedded_2_1 => (1, 0), - TargetEnv::OpenCLEmbedded_2_2 => (1, 2), - - TargetEnv::Vulkan_1_0 => (1, 0), - TargetEnv::Vulkan_1_1 => (1, 3), - TargetEnv::WebGPU_0 => (1, 3), - TargetEnv::Vulkan_1_1_Spirv_1_4 => (1, 4), - TargetEnv::Vulkan_1_2 => (1, 5), - } + self.env.spirv_version() } fn init_target_opts(&self) -> TargetOptions { diff --git a/crates/spirv-builder/src/lib.rs b/crates/spirv-builder/src/lib.rs index 608cab3fd4..c757b59f63 100644 --- a/crates/spirv-builder/src/lib.rs +++ b/crates/spirv-builder/src/lib.rs @@ -782,9 +782,10 @@ fn invoke_rustc(builder: &SpirvBuilder) -> Result { // // FIXME(eddyb) consider moving this list, or even `target-specs`, // into `rustc_codegen_spirv_types`'s code/source. - "spv1.0" | "spv1.1" | "spv1.2" | "spv1.3" | "spv1.4" | "spv1.5" => {} + "spv1.0" | "spv1.1" | "spv1.2" | "spv1.3" | "spv1.4" | "spv1.5" | "spv1.6" => {} "opengl4.0" | "opengl4.1" | "opengl4.2" | "opengl4.3" | "opengl4.5" => {} - "vulkan1.0" | "vulkan1.1" | "vulkan1.1spv1.4" | "vulkan1.2" => {} + "vulkan1.0" | "vulkan1.1" | "vulkan1.1spv1.4" | "vulkan1.2" | "vulkan1.3" + | "vulkan1.4" => {} _ => { return Err(SpirvBuilderError::UnsupportedSpirvTargetEnv { diff --git a/docs/src/platform-support.md b/docs/src/platform-support.md index 785e452ecd..fd80e7b91f 100644 --- a/docs/src/platform-support.md +++ b/docs/src/platform-support.md @@ -33,6 +33,7 @@ The `rust-gpu` project currently supports a limited number of platforms and grap - `spirv-unknown-spv1.3` - `spirv-unknown-spv1.4` - `spirv-unknown-spv1.5` +- `spirv-unknown-spv1.6` ### Vulkan Targets @@ -40,6 +41,8 @@ The `rust-gpu` project currently supports a limited number of platforms and grap - `spirv-unknown-vulkan1.1` - `spirv-unknown-vulkan1.1spv1.4` - `spirv-unknown-vulkan1.2` +- `spirv-unknown-vulkan1.3` +- `spirv-unknown-vulkan1.4` ### WebGPU Targets diff --git a/tests/compiletests/ui/dis/asm_op_decorate.rs b/tests/compiletests/ui/dis/asm_op_decorate.rs index 9c7999ab2e..a46835ee64 100644 --- a/tests/compiletests/ui/dis/asm_op_decorate.rs +++ b/tests/compiletests/ui/dis/asm_op_decorate.rs @@ -12,6 +12,8 @@ // and the pre-`vulkan1.2` output, but per-revisions `{only,ignore}-*` directives // are not supported in `compiletest-rs`. // ignore-vulkan1.2 +// ignore-vulkan1.3 +// ignore-vulkan1.4 use core::arch::asm; use spirv_std::spirv; diff --git a/tests/compiletests/ui/dis/non-writable-storage_buffer.rs b/tests/compiletests/ui/dis/non-writable-storage_buffer.rs index 830bdb173c..483f7c75ad 100644 --- a/tests/compiletests/ui/dis/non-writable-storage_buffer.rs +++ b/tests/compiletests/ui/dis/non-writable-storage_buffer.rs @@ -13,6 +13,8 @@ // and the pre-`vulkan1.2` output, but per-revisions `{only,ignore}-*` directives // are not supported in `compiletest-rs`. // ignore-vulkan1.2 +// ignore-vulkan1.3 +// ignore-vulkan1.4 use spirv_std::spirv; diff --git a/tests/compiletests/ui/image/gather.rs b/tests/compiletests/ui/image/gather.rs index d4a555193b..012bcf3f86 100644 --- a/tests/compiletests/ui/image/gather.rs +++ b/tests/compiletests/ui/image/gather.rs @@ -23,7 +23,9 @@ pub fn main( target_env = "vulkan1.0", target_env = "vulkan1.1", target_env = "vulkan1.1spv1.4", - target_env = "vulkan1.2" + target_env = "vulkan1.2", + target_env = "vulkan1.3", + target_env = "vulkan1.4" )))] #[spirv(fragment)] pub fn main_rect( diff --git a/tests/compiletests/ui/image/query/rect_image_query_size.rs b/tests/compiletests/ui/image/query/rect_image_query_size.rs index 5d1a201f48..3182412157 100644 --- a/tests/compiletests/ui/image/query/rect_image_query_size.rs +++ b/tests/compiletests/ui/image/query/rect_image_query_size.rs @@ -4,6 +4,8 @@ // ignore-vulkan1.1 // ignore-vulkan1.1spv1.4 // ignore-vulkan1.2 +// ignore-vulkan1.3 +// ignore-vulkan1.4 use spirv_std::spirv; use spirv_std::{Image, arch}; diff --git a/tests/compiletests/ui/image/query/sampled_image_rect_query_size_lod_err.rs b/tests/compiletests/ui/image/query/sampled_image_rect_query_size_lod_err.rs index a1e6483499..acfe0a61a3 100644 --- a/tests/compiletests/ui/image/query/sampled_image_rect_query_size_lod_err.rs +++ b/tests/compiletests/ui/image/query/sampled_image_rect_query_size_lod_err.rs @@ -5,6 +5,8 @@ // ignore-vulkan1.1 // ignore-vulkan1.1spv1.4 // ignore-vulkan1.2 +// ignore-vulkan1.3 +// ignore-vulkan1.4 use spirv_std::{Image, arch, image::SampledImage, spirv}; diff --git a/tests/compiletests/ui/image/sample_depth_reference/sample_gradient.rs b/tests/compiletests/ui/image/sample_depth_reference/sample_gradient.rs index a197e37af6..e10213e6d5 100644 --- a/tests/compiletests/ui/image/sample_depth_reference/sample_gradient.rs +++ b/tests/compiletests/ui/image/sample_depth_reference/sample_gradient.rs @@ -27,7 +27,9 @@ pub fn main( target_env = "vulkan1.0", target_env = "vulkan1.1", target_env = "vulkan1.1spv1.4", - target_env = "vulkan1.2" + target_env = "vulkan1.2", + target_env = "vulkan1.3", + target_env = "vulkan1.4" )))] #[spirv(fragment)] pub fn main_cubemap( diff --git a/tests/compiletests/ui/image/sample_depth_reference/sample_lod.rs b/tests/compiletests/ui/image/sample_depth_reference/sample_lod.rs index dea60aec74..39bda69dff 100644 --- a/tests/compiletests/ui/image/sample_depth_reference/sample_lod.rs +++ b/tests/compiletests/ui/image/sample_depth_reference/sample_lod.rs @@ -25,7 +25,9 @@ pub fn main( target_env = "vulkan1.0", target_env = "vulkan1.1", target_env = "vulkan1.1spv1.4", - target_env = "vulkan1.2" + target_env = "vulkan1.2", + target_env = "vulkan1.3", + target_env = "vulkan1.4" )))] #[spirv(fragment)] pub fn main_cubemap(