KhronosGroup / KhronosGroup/Vulkan-Docs

Not clear which Vulkan 1.3 features are optional

Open
#1,747 11 comments 0 reactions 1 assignee Claimed by @r-potter View on GitHub
Resolving Inside Khronos
Dominant language
JavaScript
Stars
3.3k
Forks
549
Avg merge
5d 5h
Merged PRs (30d)
2

Description

The [`VkPhysicalDeviceVulkan13Features`](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan13Features.html) shows that a lot of functionality from the extensions which were promoted to core may or may not be supported by the implementation or driver, hence I would assume that all of those features are optional.

However, from all the extensions which got promoted only `VK_EXT_texture_compression_astc_hdr` has the following notice:
> Functionality in this extension is included in core Vulkan 1.3, with the EXT suffix omitted. However, the feature is made optional in Vulkan 1.3.

All other extensions which got promoted simply state:
> Functionality in this extension is included in core Vulkan 1.3, with the KHR suffix omitted.

This leads me to believe that, while the feature bool for the other extensions are present, they're still required and will be `true` for any Vulkan 1.3 implementation and only the `textureCompressionASTC_HDR` feature is optional.

The [`feature-requirements` section in the spec](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#features-requirements) lists all features that are required and that all features which are not listed are optional. However, this only lists *some* of the features in the `VkPhysicalDeviceVulkan13Features` struct. So going by that, some are optional, some are required. This is, again, inconsistent with the rest.

Furthermore, the [Vulkan 1.3 release announcement](https://www.khronos.org/news/press/vulkan-reduces-fragmentation-and-provides-roadmap-visibility-for-developers) also writes this:
> Crucially, unlike previous revisions, no features added to Vulkan 1.3 are optional, ensuring their consistent availability in all implementations of this new API version.

Which again does not fit with the rest I just mentioned. According to this, all of the extensions in core are required, yet one of them is optional per the spec.

I'm not too familiar with the spec so I might be completely overlooking something here but it seems inconsistent and confusing nonetheless. From quick research, this also seems to be the case for Vulkan 1.2 with e.g. `timelineSemaphore`. Additionally, if those features are required per the spec, why do the fields exist in the features struct if they'd always be `true`?

I also don't see the backwards compatibility, as Vulkan 1.2 drivers wouldn't know of or should ignore Vulkan 1.3 structures and would therefore also not be able to fill in the struct with `false`, ignoring the fact that doing that is a blatant user error.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.