| // Copyright 2016-2021 The Khronos Group, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_KHR_get_physical_device_properties2.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2017-09-05 |
| *IP Status*:: |
| No known IP claims. |
| *Interactions and External Dependencies*:: |
| - Promoted to Vulkan 1.1 Core |
| *Contributors*:: |
| - Jeff Bolz, NVIDIA |
| - Ian Elliott, Google |
| |
| === Description |
| |
| This extension provides new entry points to query device features, device |
| properties, and format properties in a way that can be easily extended by |
| other extensions, without introducing any further entry points. |
| The Vulkan 1.0 feature/limit/formatproperty structures do not include |
| ptext:sType/ptext:pNext members. |
| This extension wraps them in new structures with ptext:sType/ptext:pNext |
| members, so an application can query a chain of feature/limit/formatproperty |
| structures by constructing the chain and letting the implementation fill |
| them in. |
| A new command is added for each ftext:vkGetPhysicalDevice* command in core |
| Vulkan 1.0. |
| The new feature structure (and a pname:pNext chain of extending structures) |
| can also be passed in to device creation to enable features. |
| |
| This extension also allows applications to use the physical-device |
| components of device extensions before flink:vkCreateDevice is called. |
| |
| === Promotion to Vulkan 1.1 |
| |
| All functionality in this extension is included in core Vulkan 1.1, with the |
| KHR suffix omitted. |
| The original type, enum and command names are still available as aliases of |
| the core functionality. |
| |
| include::{generated}/interfaces/VK_KHR_get_physical_device_properties2.txt[] |
| |
| === Examples |
| |
| [source,c++] |
| ---------------------------------------- |
| |
| // Get features with a hypothetical future extension. |
| VkHypotheticalExtensionFeaturesKHR hypotheticalFeatures = |
| { |
| VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR, // sType |
| NULL, // pNext |
| }; |
| |
| VkPhysicalDeviceFeatures2KHR features = |
| { |
| VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, // sType |
| &hypotheticalFeatures, // pNext |
| }; |
| |
| // After this call, features and hypotheticalFeatures have been filled out. |
| vkGetPhysicalDeviceFeatures2KHR(physicalDevice, &features); |
| |
| // Properties/limits can be chained and queried similarly. |
| |
| // Enable some features: |
| VkHypotheticalExtensionFeaturesKHR enabledHypotheticalFeatures = |
| { |
| VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR, // sType |
| NULL, // pNext |
| }; |
| |
| VkPhysicalDeviceFeatures2KHR enabledFeatures = |
| { |
| VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, // sType |
| &enabledHypotheticalFeatures, // pNext |
| }; |
| |
| enabledFeatures.features.xyz = VK_TRUE; |
| enabledHypotheticalFeatures.abc = VK_TRUE; |
| |
| VkDeviceCreateInfo deviceCreateInfo = |
| { |
| VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType |
| &enabledFeatures, // pNext |
| ... |
| NULL, // pEnabledFeatures |
| }; |
| |
| VkDevice device; |
| vkCreateDevice(physicalDevice, &deviceCreateInfo, NULL, &device); |
| |
| ---------------------------------------- |
| |
| === Version History |
| |
| * Revision 1, 2016-09-12 (Jeff Bolz) |
| - Internal revisions |
| |
| * Revision 2, 2016-11-02 (Ian Elliott) |
| - Added ability for applications to use the physical-device components of |
| device extensions before vkCreateDevice is called. |