Skip to content

Commit dca931b

Browse files
committed
ash: Hide provisional extensions behind new provisional feature flag
Provisional extensions are susceptible to **breaking** API changes at any point (with accompanying `SPEC_VERSION` bump). By hiding them behind a non-default feature flag, we can document that opting into this feature allows us to do breaking changes to these modules in non-breaking `ash` releases when driven by upstream `Vulkan-Headers` changes to `vk.xml`. Moreover, upstream Khronos repositories that build `ash` in their CI can continue to build-test their changes without compile-testing any extension behind a `provisional` flag, which is especially useful if we've already wrapped a `provisional` extension that is seeing breaking changes.
1 parent c9292cf commit dca931b

13 files changed

Lines changed: 769 additions & 642 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ jobs:
4949
run: cargo test --workspace --all-targets
5050
- name: Test docs
5151
run: cargo test --workspace --doc
52+
- name: Test all targets
53+
run: cargo test --workspace --all-targets -F provisional
54+
- name: Test docs
55+
run: cargo test --workspace --doc -F provisional
5256

5357
fmt:
5458
name: Rustfmt

ash-examples/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ winit = { version = "0.29", features = ["rwh_06"] }
1111
# The examples require the validation layers, which means the SDK or
1212
# equivalent development packages should be present, so we can link
1313
# directly and benefit from the infallible `Entry` constructor.
14-
ash = { path = "../ash", default-features = false, features = ["linked", "debug", "std"] }
14+
# Provisional features are required to access VK_KHR_portability_subset for MoltenVK
15+
ash = { path = "../ash", default-features = false, features = ["linked", "debug", "std", "provisional"] }
1516
ash-window = { path = "../ash-window" }

ash/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ loaded = ["libloading", "std"]
3737
debug = []
3838
# Whether the standard library should be required
3939
std = []
40+
# Enable provisional Vulkan extensions. May see *semver-breaking* code changes in non-breaking releases!
41+
provisional = []
4042

4143
[package.metadata.release]
4244
no-dev-version = true

ash/src/extensions/amdx/shader_enqueue.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![cfg(feature = "provisional")]
12
//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_AMDX_shader_enqueue.html>
23
34
use crate::vk;

ash/src/extensions/nv/cuda_kernel_launch.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![cfg(feature = "provisional")]
12
//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_NV_cuda_kernel_launch.html>
23
34
use crate::read_into_uninitialized_vector;

ash/src/extensions_generated.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,7 @@ pub mod amd {
495495
#[doc = "Extensions tagged AMDX"]
496496
pub mod amdx {
497497
#[doc = "VK_AMDX_shader_enqueue"]
498+
#[cfg(feature = "provisional")]
498499
pub mod shader_enqueue {
499500
use crate::vk::*;
500501
use core::ffi::*;
@@ -14792,6 +14793,7 @@ pub mod khr {
1479214793
}
1479314794
}
1479414795
#[doc = "VK_KHR_portability_subset"]
14796+
#[cfg(feature = "provisional")]
1479514797
pub mod portability_subset {
1479614798
pub use {
1479714799
crate::vk::KHR_PORTABILITY_SUBSET_NAME as NAME,
@@ -19181,6 +19183,7 @@ pub mod nv {
1918119183
};
1918219184
}
1918319185
#[doc = "VK_NV_cuda_kernel_launch"]
19186+
#[cfg(feature = "provisional")]
1918419187
pub mod cuda_kernel_launch {
1918519188
use crate::vk::*;
1918619189
use core::ffi::*;
@@ -19591,6 +19594,7 @@ pub mod nv {
1959119594
}
1959219595
}
1959319596
#[doc = "VK_NV_displacement_micromap"]
19597+
#[cfg(feature = "provisional")]
1959419598
pub mod displacement_micromap {
1959519599
pub use {
1959619600
crate::vk::NV_DISPLACEMENT_MICROMAP_NAME as NAME,

ash/src/vk/const_debugs.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@ impl fmt::Debug for BufferUsageFlags {
608608
BufferUsageFlags::CONDITIONAL_RENDERING_EXT.0,
609609
"CONDITIONAL_RENDERING_EXT",
610610
),
611+
#[cfg(feature = "provisional")]
611612
(
612613
BufferUsageFlags::EXECUTION_GRAPH_SCRATCH_AMDX.0,
613614
"EXECUTION_GRAPH_SCRATCH_AMDX",
@@ -678,6 +679,7 @@ impl fmt::Debug for BufferUsageFlags2KHR {
678679
(BufferUsageFlags2KHR::INDEX_BUFFER.0, "INDEX_BUFFER"),
679680
(BufferUsageFlags2KHR::VERTEX_BUFFER.0, "VERTEX_BUFFER"),
680681
(BufferUsageFlags2KHR::INDIRECT_BUFFER.0, "INDIRECT_BUFFER"),
682+
#[cfg(feature = "provisional")]
681683
(
682684
BufferUsageFlags2KHR::EXECUTION_GRAPH_SCRATCH_AMDX.0,
683685
"EXECUTION_GRAPH_SCRATCH_AMDX",
@@ -784,6 +786,7 @@ impl fmt::Debug for BuildAccelerationStructureFlagsKHR {
784786
BuildAccelerationStructureFlagsKHR::ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT.0,
785787
"ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT",
786788
),
789+
#[cfg(feature = "provisional")]
787790
(
788791
BuildAccelerationStructureFlagsKHR::ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV.0,
789792
"ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV",
@@ -1221,7 +1224,9 @@ impl fmt::Debug for DebugReportObjectTypeEXT {
12211224
Self::CU_FUNCTION_NVX => Some("CU_FUNCTION_NVX"),
12221225
Self::ACCELERATION_STRUCTURE_KHR => Some("ACCELERATION_STRUCTURE_KHR"),
12231226
Self::ACCELERATION_STRUCTURE_NV => Some("ACCELERATION_STRUCTURE_NV"),
1227+
#[cfg(feature = "provisional")]
12241228
Self::CUDA_MODULE_NV => Some("CUDA_MODULE_NV"),
1229+
#[cfg(feature = "provisional")]
12251230
Self::CUDA_FUNCTION_NV => Some("CUDA_FUNCTION_NV"),
12261231
Self::BUFFER_COLLECTION_FUCHSIA => Some("BUFFER_COLLECTION_FUCHSIA"),
12271232
_ => None,
@@ -1626,6 +1631,7 @@ impl fmt::Debug for DiscardRectangleModeEXT {
16261631
}
16271632
}
16281633
}
1634+
#[cfg(feature = "provisional")]
16291635
impl fmt::Debug for DisplacementMicromapFormatNV {
16301636
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16311637
let name = match *self {
@@ -3309,6 +3315,7 @@ impl fmt::Debug for MicromapTypeEXT {
33093315
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33103316
let name = match *self {
33113317
Self::OPACITY_MICROMAP => Some("OPACITY_MICROMAP"),
3318+
#[cfg(feature = "provisional")]
33123319
Self::DISPLACEMENT_MICROMAP_NV => Some("DISPLACEMENT_MICROMAP_NV"),
33133320
_ => None,
33143321
};
@@ -3651,6 +3658,7 @@ impl fmt::Debug for PipelineBindPoint {
36513658
let name = match *self {
36523659
Self::GRAPHICS => Some("GRAPHICS"),
36533660
Self::COMPUTE => Some("COMPUTE"),
3661+
#[cfg(feature = "provisional")]
36543662
Self::EXECUTION_GRAPH_AMDX => Some("EXECUTION_GRAPH_AMDX"),
36553663
Self::RAY_TRACING_KHR => Some("RAY_TRACING_KHR"),
36563664
Self::SUBPASS_SHADING_HUAWEI => Some("SUBPASS_SHADING_HUAWEI"),
@@ -3808,6 +3816,7 @@ impl fmt::Debug for PipelineCreateFlags {
38083816
PipelineCreateFlags::RAY_TRACING_OPACITY_MICROMAP_EXT.0,
38093817
"RAY_TRACING_OPACITY_MICROMAP_EXT",
38103818
),
3819+
#[cfg(feature = "provisional")]
38113820
(
38123821
PipelineCreateFlags::RAY_TRACING_DISPLACEMENT_MICROMAP_NV.0,
38133822
"RAY_TRACING_DISPLACEMENT_MICROMAP_NV",
@@ -5520,18 +5529,23 @@ impl fmt::Debug for StructureType {
55205529
Self::ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID => {
55215530
Some("ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID")
55225531
}
5532+
#[cfg(feature = "provisional")]
55235533
Self::PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX => {
55245534
Some("PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX")
55255535
}
5536+
#[cfg(feature = "provisional")]
55265537
Self::PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX => {
55275538
Some("PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX")
55285539
}
5540+
#[cfg(feature = "provisional")]
55295541
Self::EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX => {
55305542
Some("EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX")
55315543
}
5544+
#[cfg(feature = "provisional")]
55325545
Self::EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX => {
55335546
Some("EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX")
55345547
}
5548+
#[cfg(feature = "provisional")]
55355549
Self::PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX => {
55365550
Some("PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX")
55375551
}
@@ -5652,9 +5666,11 @@ impl fmt::Debug for StructureType {
56525666
Self::SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT => {
56535667
Some("SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT")
56545668
}
5669+
#[cfg(feature = "provisional")]
56555670
Self::PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR => {
56565671
Some("PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR")
56575672
}
5673+
#[cfg(feature = "provisional")]
56585674
Self::PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR => {
56595675
Some("PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR")
56605676
}
@@ -6081,12 +6097,17 @@ impl fmt::Debug for StructureType {
60816097
Self::DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV => {
60826098
Some("DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV")
60836099
}
6100+
#[cfg(feature = "provisional")]
60846101
Self::CUDA_MODULE_CREATE_INFO_NV => Some("CUDA_MODULE_CREATE_INFO_NV"),
6102+
#[cfg(feature = "provisional")]
60856103
Self::CUDA_FUNCTION_CREATE_INFO_NV => Some("CUDA_FUNCTION_CREATE_INFO_NV"),
6104+
#[cfg(feature = "provisional")]
60866105
Self::CUDA_LAUNCH_INFO_NV => Some("CUDA_LAUNCH_INFO_NV"),
6106+
#[cfg(feature = "provisional")]
60876107
Self::PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV => {
60886108
Some("PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV")
60896109
}
6110+
#[cfg(feature = "provisional")]
60906111
Self::PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV => {
60916112
Some("PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV")
60926113
}
@@ -6368,12 +6389,15 @@ impl fmt::Debug for StructureType {
63686389
Self::ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT => {
63696390
Some("ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT")
63706391
}
6392+
#[cfg(feature = "provisional")]
63716393
Self::PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV => {
63726394
Some("PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV")
63736395
}
6396+
#[cfg(feature = "provisional")]
63746397
Self::PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV => {
63756398
Some("PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV")
63766399
}
6400+
#[cfg(feature = "provisional")]
63776401
Self::ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV => {
63786402
Some("ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV")
63796403
}

ash/src/vk/constants.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ pub const MAX_GLOBAL_PRIORITY_SIZE_EXT: usize = MAX_GLOBAL_PRIORITY_SIZE_KHR;
3434
pub const MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT: usize = 32;
3535
pub const MAX_PIPELINE_BINARY_KEY_SIZE_KHR: usize = 32;
3636
pub const MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR: usize = 7;
37+
#[cfg(feature = "provisional")]
3738
pub const SHADER_INDEX_UNUSED_AMDX: u32 = !0;

0 commit comments

Comments
 (0)