| // Copyright (c) 2016-2018 Khronos Group. This work is licensed under a |
| // Creative Commons Attribution 4.0 International License; see |
| // http://creativecommons.org/licenses/by/4.0/ |
| |
| include::meta/VK_KHR_get_physical_device_properties2.txt[] |
| |
| *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 |
| |
| 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 chain of extension 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. |
| |
| === New Object Types |
| |
| None. |
| |
| === New Enum Constants |
| |
| * Extending elink:VkStructureType: |
| ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR |
| ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR |
| |
| === New Enums |
| |
| None. |
| |
| === New Structures |
| |
| * slink:VkPhysicalDeviceFeatures2KHR |
| * slink:VkPhysicalDeviceProperties2KHR |
| * slink:VkFormatProperties2KHR |
| * slink:VkImageFormatProperties2KHR |
| * slink:VkPhysicalDeviceImageFormatInfo2KHR |
| * slink:VkQueueFamilyProperties2KHR |
| * slink:VkPhysicalDeviceMemoryProperties2KHR |
| * slink:VkSparseImageFormatProperties2KHR |
| * slink:VkPhysicalDeviceSparseImageFormatInfo2KHR |
| |
| === New Functions |
| |
| * flink:vkGetPhysicalDeviceFeatures2KHR |
| * flink:vkGetPhysicalDeviceProperties2KHR |
| * flink:vkGetPhysicalDeviceFormatProperties2KHR |
| * flink:vkGetPhysicalDeviceImageFormatProperties2KHR |
| * flink:vkGetPhysicalDeviceQueueFamilyProperties2KHR |
| * flink:vkGetPhysicalDeviceMemoryProperties2KHR |
| * flink:vkGetPhysicalDeviceSparseImageFormatProperties2KHR |
| |
| === 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. |
| |
| === Issues |
| |
| None. |
| |
| === 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. |