ash: Hide provisional extensions behind new provisional feature flag
#952
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #343
Provisional extensions are susceptible to breaking API changes at any point (with accompanying
SPEC_VERSIONbump). 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-breakingashreleases when driven by upstreamVulkan-Headerschanges tovk.xml.Moreover, upstream Khronos repositories that build
ashin their CI can continue to build-test their changes without compile-testing any extension behind aprovisionalflag, which is especially useful if we've already wrapped aprovisonalextension that is seeing breaking changes.One important feature that is missing in this PR and the reason for its draft state is that we don't yet wrap any types
<require>d by provisional changes. While these types are unlikely to be useful without enabling the extension, non-breaking releases with breaking changes to such types should be considered invalid. And there may be provisional extensions that solely consist of new types (extending existing types viapNext).Secondly, feature flags may not technically exempt us from semver compatibility in releases, even if the feature flag is documented as such. We could "do this anyway" for simplicity, or move to something more aggressive like
cfgdefinitions.