Skip to content

Commit 4133f98

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 96becc8 commit 4133f98

File tree

16 files changed

+6664
-2896
lines changed

16 files changed

+6664
-2896
lines changed

.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: 7 additions & 1 deletion
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::*;
@@ -5493,8 +5494,10 @@ pub mod ext {
54935494
self.handle
54945495
}
54955496
}
5496-
#[allow(non_camel_case_types)]
54975497
#[doc = "Implemented for all types that can be passed as argument to `pipeline_properties` in [`PFN_vkGetPipelinePropertiesEXT`]"]
5498+
#[doc = ""]
5499+
#[doc = "Provided by VK_EXT_pipeline_properties"]
5500+
#[allow(non_camel_case_types)]
54985501
pub unsafe trait GetPipelinePropertiesEXTParamPipelineProperties {}
54995502
unsafe impl GetPipelinePropertiesEXTParamPipelineProperties
55005503
for PipelinePropertiesIdentifierEXT<'_>
@@ -14792,6 +14795,7 @@ pub mod khr {
1479214795
}
1479314796
}
1479414797
#[doc = "VK_KHR_portability_subset"]
14798+
#[cfg(feature = "provisional")]
1479514799
pub mod portability_subset {
1479614800
pub use {
1479714801
crate::vk::KHR_PORTABILITY_SUBSET_NAME as NAME,
@@ -19181,6 +19185,7 @@ pub mod nv {
1918119185
};
1918219186
}
1918319187
#[doc = "VK_NV_cuda_kernel_launch"]
19188+
#[cfg(feature = "provisional")]
1918419189
pub mod cuda_kernel_launch {
1918519190
use crate::vk::*;
1918619191
use core::ffi::*;
@@ -19591,6 +19596,7 @@ pub mod nv {
1959119596
}
1959219597
}
1959319598
#[doc = "VK_NV_displacement_micromap"]
19599+
#[cfg(feature = "provisional")]
1959419600
pub mod displacement_micromap {
1959519601
pub use {
1959619602
crate::vk::NV_DISPLACEMENT_MICROMAP_NAME as NAME,

ash/src/vk/bitflags.rs

Lines changed: 426 additions & 142 deletions
Large diffs are not rendered by default.

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: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,61 @@
11
use super::definitions::*;
2+
#[doc = "Provided by VK_VERSION_1_0"]
23
pub const MAX_PHYSICAL_DEVICE_NAME_SIZE: usize = 256;
4+
#[doc = "Provided by VK_VERSION_1_0"]
35
pub const UUID_SIZE: usize = 16;
6+
#[doc = "Provided by VK_VERSION_1_1"]
47
pub const LUID_SIZE: usize = 8;
8+
#[doc = "Provided by VK_VERSION_1_0"]
59
pub const MAX_EXTENSION_NAME_SIZE: usize = 256;
10+
#[doc = "Provided by VK_VERSION_1_0"]
611
pub const MAX_DESCRIPTION_SIZE: usize = 256;
12+
#[doc = "Provided by VK_VERSION_1_0"]
713
pub const MAX_MEMORY_TYPES: usize = 32;
814
#[doc = "The maximum number of unique memory heaps, each of which supporting 1 or more memory types"]
15+
#[doc = ""]
16+
#[doc = "Provided by VK_VERSION_1_0"]
917
pub const MAX_MEMORY_HEAPS: usize = 16;
18+
#[doc = "Provided by VK_VERSION_1_0"]
1019
pub const LOD_CLAMP_NONE: f32 = 1000.00;
20+
#[doc = "Provided by VK_VERSION_1_0"]
1121
pub const REMAINING_MIP_LEVELS: u32 = !0;
22+
#[doc = "Provided by VK_VERSION_1_0"]
1223
pub const REMAINING_ARRAY_LAYERS: u32 = !0;
24+
#[doc = "Provided by VK_EXT_image_sliced_view_of_3d"]
1325
pub const REMAINING_3D_SLICES_EXT: u32 = !0;
26+
#[doc = "Provided by VK_VERSION_1_0"]
1427
pub const WHOLE_SIZE: u64 = !0;
28+
#[doc = "Provided by VK_VERSION_1_0"]
1529
pub const ATTACHMENT_UNUSED: u32 = !0;
30+
#[doc = "Provided by VK_VERSION_1_0"]
1631
pub const TRUE: Bool32 = 1;
32+
#[doc = "Provided by VK_VERSION_1_0"]
1733
pub const FALSE: Bool32 = 0;
34+
#[doc = "Provided by VK_VERSION_1_0"]
1835
pub const QUEUE_FAMILY_IGNORED: u32 = !0;
36+
#[doc = "Provided by VK_VERSION_1_1"]
1937
pub const QUEUE_FAMILY_EXTERNAL: u32 = !1;
38+
#[doc = "Provided by VK_EXT_queue_family_foreign"]
2039
pub const QUEUE_FAMILY_FOREIGN_EXT: u32 = !2;
40+
#[doc = "Provided by VK_VERSION_1_0"]
2141
pub const SUBPASS_EXTERNAL: u32 = !0;
42+
#[doc = "Provided by VK_VERSION_1_1"]
2243
pub const MAX_DEVICE_GROUP_SIZE: usize = 32;
44+
#[doc = "Provided by VK_VERSION_1_2"]
2345
pub const MAX_DRIVER_NAME_SIZE: usize = 256;
46+
#[doc = "Provided by VK_VERSION_1_2"]
2447
pub const MAX_DRIVER_INFO_SIZE: usize = 256;
48+
#[doc = "Provided by VK_KHR_ray_tracing_pipeline"]
2549
pub const SHADER_UNUSED_KHR: u32 = !0;
50+
#[doc = "Provided by VK_KHR_global_priority"]
2651
pub const MAX_GLOBAL_PRIORITY_SIZE_KHR: usize = 16;
52+
#[doc = "Provided by VK_EXT_shader_module_identifier"]
2753
pub const MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT: usize = 32;
54+
#[doc = "Provided by VK_KHR_pipeline_binary"]
2855
pub const MAX_PIPELINE_BINARY_KEY_SIZE_KHR: usize = 32;
56+
#[doc = "Provided by VK_KHR_video_decode_av1"]
2957
pub const MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR: usize = 7;
58+
#[doc = "Provided by VK_AMDX_shader_enqueue"]
59+
#[cfg(feature = "provisional")]
3060
pub const SHADER_INDEX_UNUSED_AMDX: u32 = !0;
3161
pub const SHADER_UNUSED_NV: u32 = SHADER_UNUSED_KHR;

0 commit comments

Comments
 (0)