Merge pull request #690 from krOoze/organize_extensions

Organize extension appendices
This commit is contained in:
Jon Leech 2018-07-07 01:47:23 -07:00 committed by GitHub
commit 32a9e2ea3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 480 additions and 674 deletions

View File

@ -0,0 +1,16 @@
include::meta/VK_IMG_format_pvrtc.txt[]
*IP Status*::
TBD (See https://github.com/KhronosGroup/Vulkan-Docs/issues/512)
=== New Enum Constants
* Extending elink:VkFormat:
** ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG
** ename:VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG
** ename:VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG
** ename:VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG
** ename:VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG
** ename:VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG
** ename:VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG
** ename:VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG

View File

@ -58,528 +58,5 @@ not be equivalent to `KHX`, but it is likely to indicate a lesser degree of
interface stability than a non-`X` extension from the same vendor.
====
// Extension appendix sections are included here, grouped by the author ID
// Adding the section headers here means that there will usually be
// a bunch of empty sections, which is undesirable.
// == Khronos `KHR` Extensions
//
ifdef::VK_KHR_16bit_storage[]
include::VK_KHR_16bit_storage.txt[]
endif::VK_KHR_16bit_storage[]
ifdef::VK_KHR_android_surface[]
include::VK_KHR_android_surface.txt[]
endif::VK_KHR_android_surface[]
ifdef::VK_KHR_bind_memory2[]
include::VK_KHR_bind_memory2.txt[]
endif::VK_KHR_bind_memory2[]
ifdef::VK_KHR_dedicated_allocation[]
include::VK_KHR_dedicated_allocation.txt[]
endif::VK_KHR_dedicated_allocation[]
ifdef::VK_KHR_descriptor_update_template[]
include::VK_KHR_descriptor_update_template.txt[]
endif::VK_KHR_descriptor_update_template[]
ifdef::VK_KHR_device_group[]
include::VK_KHR_device_group.txt[]
endif::VK_KHR_device_group[]
ifdef::VK_KHR_device_group_creation[]
include::VK_KHR_device_group_creation.txt[]
endif::VK_KHR_device_group_creation[]
ifdef::VK_KHR_display[]
include::VK_KHR_display.txt[]
endif::VK_KHR_display[]
ifdef::VK_KHR_display_swapchain[]
include::VK_KHR_display_swapchain.txt[]
endif::VK_KHR_display_swapchain[]
ifdef::VK_KHR_draw_indirect_count[]
include::VK_KHR_draw_indirect_count.txt[]
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_KHR_external_fence[]
include::VK_KHR_external_fence.txt[]
endif::VK_KHR_external_fence[]
ifdef::VK_KHR_external_fence_capabilities[]
include::VK_KHR_external_fence_capabilities.txt[]
endif::VK_KHR_external_fence_capabilities[]
ifdef::VK_KHR_external_fence_fd[]
include::VK_KHR_external_fence_fd.txt[]
endif::VK_KHR_external_fence_fd[]
ifdef::VK_KHR_external_fence_win32[]
include::VK_KHR_external_fence_win32.txt[]
endif::VK_KHR_external_fence_win32[]
ifdef::VK_KHR_external_memory[]
include::VK_KHR_external_memory.txt[]
endif::VK_KHR_external_memory[]
ifdef::VK_KHR_external_memory_capabilities[]
include::VK_KHR_external_memory_capabilities.txt[]
endif::VK_KHR_external_memory_capabilities[]
ifdef::VK_KHR_external_memory_fd[]
include::VK_KHR_external_memory_fd.txt[]
endif::VK_KHR_external_memory_fd[]
ifdef::VK_KHR_external_memory_win32[]
include::VK_KHR_external_memory_win32.txt[]
endif::VK_KHR_external_memory_win32[]
ifdef::VK_KHR_external_semaphore[]
include::VK_KHR_external_semaphore.txt[]
endif::VK_KHR_external_semaphore[]
ifdef::VK_KHR_external_semaphore_capabilities[]
include::VK_KHR_external_semaphore_capabilities.txt[]
endif::VK_KHR_external_semaphore_capabilities[]
ifdef::VK_KHR_external_semaphore_fd[]
include::VK_KHR_external_semaphore_fd.txt[]
endif::VK_KHR_external_semaphore_fd[]
ifdef::VK_KHR_external_semaphore_win32[]
include::VK_KHR_external_semaphore_win32.txt[]
endif::VK_KHR_external_semaphore_win32[]
ifdef::VK_KHR_get_display_properties2[]
include::VK_KHR_get_display_properties2.txt[]
endif::VK_KHR_get_display_properties2[]
ifdef::VK_KHR_get_memory_requirements2[]
include::VK_KHR_get_memory_requirements2.txt[]
endif::VK_KHR_get_memory_requirements2[]
ifdef::VK_KHR_get_physical_device_properties2[]
include::VK_KHR_get_physical_device_properties2.txt[]
endif::VK_KHR_get_physical_device_properties2[]
ifdef::VK_KHR_get_surface_capabilities2[]
include::VK_KHR_get_surface_capabilities2.txt[]
endif::VK_KHR_get_surface_capabilities2[]
ifdef::VK_KHR_image_format_list[]
include::VK_KHR_image_format_list.txt[]
endif::VK_KHR_image_format_list[]
ifdef::VK_KHR_incremental_present[]
include::VK_KHR_incremental_present.txt[]
endif::VK_KHR_incremental_present[]
ifdef::VK_KHR_maintenance1[]
include::VK_KHR_maintenance1.txt[]
endif::VK_KHR_maintenance1[]
ifdef::VK_KHR_maintenance2[]
include::VK_KHR_maintenance2.txt[]
endif::VK_KHR_maintenance2[]
ifdef::VK_KHR_maintenance3[]
include::VK_KHR_maintenance3.txt[]
endif::VK_KHR_maintenance3[]
ifdef::VK_KHR_mir_surface[]
include::VK_KHR_mir_surface.txt[]
endif::VK_KHR_mir_surface[]
ifdef::VK_KHR_multiview[]
include::VK_KHR_multiview.txt[]
endif::VK_KHR_multiview[]
ifdef::VK_KHR_push_descriptor[]
include::VK_KHR_push_descriptor.txt[]
endif::VK_KHR_push_descriptor[]
ifdef::VK_KHR_relaxed_block_layout[]
include::VK_KHR_relaxed_block_layout.txt[]
endif::VK_KHR_relaxed_block_layout[]
include::VK_KHR_sampler_mirror_clamp_to_edge.txt[]
ifdef::VK_KHR_sampler_ycbcr_conversion[]
include::VK_KHR_sampler_ycbcr_conversion.txt[]
endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_shader_draw_parameters[]
include::VK_KHR_shader_draw_parameters.txt[]
endif::VK_KHR_shader_draw_parameters[]
ifdef::VK_KHR_shared_presentable_image[]
include::VK_KHR_shared_presentable_image.txt[]
endif::VK_KHR_shared_presentable_image[]
ifdef::VK_KHR_storage_buffer_storage_class[]
include::VK_KHR_storage_buffer_storage_class.txt[]
endif::VK_KHR_storage_buffer_storage_class[]
ifdef::VK_KHR_surface[]
include::VK_KHR_surface.txt[]
endif::VK_KHR_surface[]
ifdef::VK_KHR_swapchain[]
include::VK_KHR_swapchain.txt[]
endif::VK_KHR_swapchain[]
ifdef::VK_KHR_variable_pointers[]
include::VK_KHR_variable_pointers.txt[]
endif::VK_KHR_variable_pointers[]
ifdef::VK_KHR_wayland_surface[]
include::VK_KHR_wayland_surface.txt[]
endif::VK_KHR_wayland_surface[]
ifdef::VK_KHR_win32_keyed_mutex[]
include::VK_KHR_win32_keyed_mutex.txt[]
endif::VK_KHR_win32_keyed_mutex[]
ifdef::VK_KHR_win32_surface[]
include::VK_KHR_win32_surface.txt[]
endif::VK_KHR_win32_surface[]
ifdef::VK_KHR_xcb_surface[]
include::VK_KHR_xcb_surface.txt[]
endif::VK_KHR_xcb_surface[]
ifdef::VK_KHR_xlib_surface[]
include::VK_KHR_xlib_surface.txt[]
endif::VK_KHR_xlib_surface[]
// == Multivendor `EXT` Extensions
//
// :leveloffset: 2
ifdef::VK_EXT_acquire_xlib_display[]
include::VK_EXT_acquire_xlib_display.txt[]
endif::VK_EXT_acquire_xlib_display[]
ifdef::VK_EXT_blend_operation_advanced[]
include::VK_EXT_blend_operation_advanced.txt[]
endif::VK_EXT_blend_operation_advanced[]
ifdef::VK_EXT_conservative_rasterization[]
include::VK_EXT_conservative_rasterization.txt[]
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_EXT_debug_marker[]
include::VK_EXT_debug_marker.txt[]
endif::VK_EXT_debug_marker[]
ifdef::VK_EXT_debug_report[]
include::VK_EXT_debug_report.txt[]
endif::VK_EXT_debug_report[]
ifdef::VK_EXT_debug_utils[]
include::VK_EXT_debug_utils.txt[]
endif::VK_EXT_debug_utils[]
ifdef::VK_EXT_depth_range_unrestricted[]
include::VK_EXT_depth_range_unrestricted.txt[]
endif::VK_EXT_depth_range_unrestricted[]
ifdef::VK_EXT_descriptor_indexing[]
include::VK_EXT_descriptor_indexing.txt[]
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_direct_mode_display[]
include::VK_EXT_direct_mode_display.txt[]
endif::VK_EXT_direct_mode_display[]
ifdef::VK_EXT_discard_rectangles[]
include::VK_EXT_discard_rectangles.txt[]
endif::VK_EXT_discard_rectangles[]
ifdef::VK_EXT_display_control[]
include::VK_EXT_display_control.txt[]
endif::VK_EXT_display_control[]
ifdef::VK_EXT_display_surface_counter[]
include::VK_EXT_display_surface_counter.txt[]
endif::VK_EXT_display_surface_counter[]
ifdef::VK_EXT_external_memory_dma_buf[]
include::VK_EXT_external_memory_dma_buf.txt[]
endif::VK_EXT_external_memory_dma_buf[]
ifdef::VK_EXT_external_memory_host[]
include::VK_EXT_external_memory_host.txt[]
endif::VK_EXT_external_memory_host[]
ifdef::VK_EXT_global_priority[]
include::VK_EXT_global_priority.txt[]
endif::VK_EXT_global_priority[]
ifdef::VK_EXT_hdr_metadata[]
include::VK_EXT_hdr_metadata.txt[]
endif::VK_EXT_hdr_metadata[]
ifdef::VK_EXT_post_depth_coverage[]
include::VK_EXT_post_depth_coverage.txt[]
endif::VK_EXT_post_depth_coverage[]
ifdef::VK_EXT_queue_family_foreign[]
include::VK_EXT_queue_family_foreign.txt[]
endif::VK_EXT_queue_family_foreign[]
ifdef::VK_EXT_sample_locations[]
include::VK_EXT_sample_locations.txt[]
endif::VK_EXT_sample_locations[]
ifdef::VK_EXT_sampler_filter_minmax[]
include::VK_EXT_sampler_filter_minmax.txt[]
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_EXT_shader_stencil_export[]
include::VK_EXT_shader_stencil_export.txt[]
endif::VK_EXT_shader_stencil_export[]
ifdef::VK_EXT_shader_subgroup_ballot[]
include::VK_EXT_shader_subgroup_ballot.txt[]
endif::VK_EXT_shader_subgroup_ballot[]
ifdef::VK_EXT_shader_subgroup_vote[]
include::VK_EXT_shader_subgroup_vote.txt[]
endif::VK_EXT_shader_subgroup_vote[]
ifdef::VK_EXT_shader_viewport_index_layer[]
include::VK_EXT_shader_viewport_index_layer.txt[]
endif::VK_EXT_shader_viewport_index_layer[]
ifdef::VK_EXT_swapchain_colorspace[]
include::VK_EXT_swapchain_colorspace.txt[]
endif::VK_EXT_swapchain_colorspace[]
ifdef::VK_EXT_validation_flags[]
include::VK_EXT_validation_flags.txt[]
endif::VK_EXT_validation_flags[]
ifdef::VK_EXT_validation_cache[]
include::VK_EXT_validation_cache.txt[]
endif::VK_EXT_validation_cache[]
ifdef::VK_EXT_vertex_attribute_divisor[]
include::VK_EXT_vertex_attribute_divisor.txt[]
endif::VK_EXT_vertex_attribute_divisor[]
// :leveloffset: 1
// == Advanced Micro Devices `AMD` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_AMD_buffer_marker[]
include::VK_AMD_buffer_marker.txt[]
endif::VK_AMD_buffer_marker[]
ifdef::VK_AMD_draw_indirect_count[]
include::VK_AMD_draw_indirect_count.txt[]
endif::VK_AMD_draw_indirect_count[]
ifdef::VK_AMD_gcn_shader[]
include::VK_AMD_gcn_shader.txt[]
endif::VK_AMD_gcn_shader[]
ifdef::VK_AMD_gpu_shader_half_float[]
include::VK_AMD_gpu_shader_half_float.txt[]
endif::VK_AMD_gpu_shader_half_float[]
ifdef::VK_AMD_gpu_shader_int16[]
include::VK_AMD_gpu_shader_int16.txt[]
endif::VK_AMD_gpu_shader_int16[]
ifdef::VK_AMD_mixed_attachment_samples[]
include::VK_AMD_mixed_attachment_samples.txt[]
endif::VK_AMD_mixed_attachment_samples[]
ifdef::VK_AMD_negative_viewport_height[]
include::VK_AMD_negative_viewport_height.txt[]
endif::VK_AMD_negative_viewport_height[]
ifdef::VK_AMD_rasterization_order[]
include::VK_AMD_rasterization_order.txt[]
endif::VK_AMD_rasterization_order[]
ifdef::VK_AMD_shader_ballot[]
include::VK_AMD_shader_ballot.txt[]
endif::VK_AMD_shader_ballot[]
ifdef::VK_AMD_shader_core_properties[]
include::VK_AMD_shader_core_properties.txt[]
endif::VK_AMD_shader_core_properties[]
ifdef::VK_AMD_shader_explicit_vertex_parameter[]
include::VK_AMD_shader_explicit_vertex_parameter.txt[]
endif::VK_AMD_shader_explicit_vertex_parameter[]
ifdef::VK_AMD_shader_fragment_mask[]
include::VK_AMD_shader_fragment_mask.txt[]
endif::VK_AMD_shader_fragment_mask[]
ifdef::VK_AMD_shader_image_load_store_lod[]
include::VK_AMD_shader_image_load_store_lod.txt[]
endif::VK_AMD_shader_image_load_store_lod[]
ifdef::VK_AMD_shader_info[]
include::VK_AMD_shader_info.txt[]
endif::VK_AMD_shader_info[]
ifdef::VK_AMD_shader_trinary_minmax[]
include::VK_AMD_shader_trinary_minmax.txt[]
endif::VK_AMD_shader_trinary_minmax[]
ifdef::VK_AMD_texture_gather_bias_lod[]
include::VK_AMD_texture_gather_bias_lod.txt[]
endif::VK_AMD_texture_gather_bias_lod[]
// :leveloffset: 1
// == Android `ANDROID` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
include::VK_ANDROID_external_memory_android_hardware_buffer.txt[]
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
// :leveloffset: 1
// == Google `GOOGLE` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_GOOGLE_display_timing[]
include::VK_GOOGLE_display_timing.txt[]
endif::VK_GOOGLE_display_timing[]
// :leveloffset: 1
// == Imagination `IMG` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_IMG_filter_cubic[]
include::VK_IMG_filter_cubic.txt[]
endif::VK_IMG_filter_cubic[]
// :leveloffset: 1
// == MoltenVK `MVK` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_MVK_ios_surface[]
include::VK_MVK_ios_surface.txt[]
endif::VK_MVK_ios_surface[]
ifdef::VK_MVK_macos_surface[]
include::VK_MVK_macos_surface.txt[]
endif::VK_MVK_macos_surface[]
// :leveloffset: 1
// == Nintendo `NN` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_NN_vi_surface[]
include::VK_NN_vi_surface.txt[]
endif::VK_NN_vi_surface[]
// == NVIDIA `NV` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_NV_clip_space_w_scaling[]
include::VK_NV_clip_space_w_scaling.txt[]
endif::VK_NV_clip_space_w_scaling[]
ifdef::VK_NV_dedicated_allocation[]
include::VK_NV_dedicated_allocation.txt[]
endif::VK_NV_dedicated_allocation[]
ifdef::VK_NV_external_memory_capabilities[]
include::VK_NV_external_memory_capabilities.txt[]
endif::VK_NV_external_memory_capabilities[]
ifdef::VK_NV_external_memory[]
include::VK_NV_external_memory.txt[]
endif::VK_NV_external_memory[]
ifdef::VK_NV_external_memory_win32[]
include::VK_NV_external_memory_win32.txt[]
endif::VK_NV_external_memory_win32[]
ifdef::VK_NV_fill_rectangle[]
include::VK_NV_fill_rectangle.txt[]
endif::VK_NV_fill_rectangle[]
ifdef::VK_NV_fragment_coverage_to_color[]
include::VK_NV_fragment_coverage_to_color.txt[]
endif::VK_NV_fragment_coverage_to_color[]
ifdef::VK_NV_framebuffer_mixed_samples[]
include::VK_NV_framebuffer_mixed_samples.txt[]
endif::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_NV_geometry_shader_passthrough[]
include::VK_NV_geometry_shader_passthrough.txt[]
endif::VK_NV_geometry_shader_passthrough[]
ifdef::VK_NV_glsl_shader[]
include::VK_NV_glsl_shader.txt[]
endif::VK_NV_glsl_shader[]
ifdef::VK_NV_sample_mask_override_coverage[]
include::VK_NV_sample_mask_override_coverage.txt[]
endif::VK_NV_sample_mask_override_coverage[]
ifdef::VK_NV_shader_subgroup_partitioned[]
include::VK_NV_shader_subgroup_partitioned.txt[]
endif::VK_NV_shader_subgroup_partitioned[]
ifdef::VK_NV_viewport_array2[]
include::VK_NV_viewport_array2.txt[]
endif::VK_NV_viewport_array2[]
ifdef::VK_NV_viewport_swizzle[]
include::VK_NV_viewport_swizzle.txt[]
endif::VK_NV_viewport_swizzle[]
ifdef::VK_NV_win32_keyed_mutex[]
include::VK_NV_win32_keyed_mutex.txt[]
endif::VK_NV_win32_keyed_mutex[]
// :leveloffset: 1
// == NVIDIA `NVX` Vendor Extensions
//
// :leveloffset: 2
ifdef::VK_NVX_device_generated_commands[]
include::VK_NVX_device_generated_commands.txt[]
endif::VK_NVX_device_generated_commands[]
ifdef::VK_NVX_multiview_per_view_attributes[]
include::VK_NVX_multiview_per_view_attributes.txt[]
endif::VK_NVX_multiview_per_view_attributes[]
// :leveloffset: 1
include::meta/current_extensions_appendix.txt[]
include::meta/deprecated_extensions_appendix.txt[]

View File

@ -28,31 +28,10 @@ ifdef::VK_VERSION_1_1[]
[[versions-1.1]]
== Version 1.1
[[versions-1.1-promotions]]
Vulkan Version 1.1 _promoted_ a number of key extensions into the core API:
* <<VK_KHR_16bit_storage>>
* <<VK_KHR_bind_memory2>>
* <<VK_KHR_dedicated_allocation>>
* <<VK_KHR_descriptor_update_template>>
* <<VK_KHR_device_group>>
* <<VK_KHR_device_group_creation>>
* <<VK_KHR_external_memory>>
* <<VK_KHR_external_memory_capabilities>>
* <<VK_KHR_external_semaphore>>
* <<VK_KHR_external_semaphore_capabilities>>
* <<VK_KHR_external_fence>>
* <<VK_KHR_external_fence_capabilities>>
* <<VK_KHR_get_memory_requirements2>>
* <<VK_KHR_get_physical_device_properties2>>
* <<VK_KHR_maintenance1>>
* <<VK_KHR_maintenance2>>
* <<VK_KHR_maintenance3>>
* <<VK_KHR_multiview>>
* <<VK_KHR_relaxed_block_layout>>
* <<VK_KHR_sampler_ycbcr_conversion>>
* <<VK_KHR_shader_draw_parameters>>
* <<VK_KHR_storage_buffer_storage_class>>
* <<VK_KHR_variable_pointers>>
include::meta/promoted_extensions_VK_VERSION_1_1.txt[]
The only changes to the functionality added by these extensions were to
`VK_KHR_shader_draw_parameters`, which had a
@ -62,6 +41,7 @@ support in the core API, and
pname:variablePointersStorageBuffer>> from `VK_KHR_variable_pointers` was
made optional.
[[versions-1.1-new-features]]
Additionally, Vulkan 1.1 added support for
<<VkPhysicalDeviceSubgroupProperties, subgroup operations>>,
<<VkPhysicalDeviceProtectedMemoryFeatures, protected memory>>, and a new

View File

@ -1100,6 +1100,15 @@ be implemented against.
tag:feature tags. When the extension tag is just reserving an extension
number, and no interfaces are yet defined, use `supported="disabled"` to
indicate this extension should never be processed.
* attr:promotedto - optional. A Vulkan version or a name of an extension
that this extension was _promoted_ to; e.g. 'VK_VERSION_1_1', or
'VK_KHR_draw_indirect_county'.
* attr:deprecatedby - optional. A Vulkan version or a name of an extension
that _deprecates_ this extension. It may be an empty string. e.g.
'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''.
* attr:obsoletedby - optional. A Vulkan version or a name of an extension
that _obsoletes_ this extension. It may be an empty string. e.g.
'VK_VERSION_1_1', or 'VK_KHR_maintenance1', or ''.
* attr:comment - optional. Arbitrary string (unused).

View File

@ -14,8 +14,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os,re,sys
import os,re,sys,functools
from generator import *
from functools import total_ordering
# ExtensionMetaDocGeneratorOptions - subclass of GeneratorOptions.
class ExtensionMetaDocGeneratorOptions(GeneratorOptions):
@ -37,16 +38,236 @@ class ExtensionMetaDocGeneratorOptions(GeneratorOptions):
addExtensions, removeExtensions,
emitExtensions, sortProcedure)
@total_ordering
class Extension:
def __init__(self,
generator, # needed for logging
filename,
name,
number,
type,
requires,
requiresCore,
contact,
promotedTo,
deprecatedBy,
obsoletedBy,
revision ):
self.generator = generator
self.filename = filename
self.name = name
self.number = number
self.type = type
self.requires = requires
self.requiresCore = requiresCore
self.contact = contact
self.promotedTo = promotedTo
self.deprecatedBy = deprecatedBy
self.obsoletedBy = obsoletedBy
self.revision = revision
self.deprecationType = None
self.supercedingVkVersion = None
self.supercedingExtension = None
if self.promotedTo is not None and self.deprecatedBy is not None and self.obsoletedBy is not None:
self.generator.logMsg('warn', 'All \'promotedto\', \'deprecatedby\' and \'obsoletedby\' attributes used on extension ' + self.name + '! Ignoring \'promotedto\' and \'deprecatedby\'.')
elif self.promotedTo is not None and self.deprecatedBy is not None:
self.generator.logMsg('warn', 'Both \'promotedto\' and \'deprecatedby\' attributes used on extension ' + self.name + '! Ignoring \'deprecatedby\'.')
elif self.promotedTo is not None and self.obsoletedBy is not None:
self.generator.logMsg('warn', 'Both \'promotedto\' and \'obsoletedby\' attributes used on extension ' + self.name + '! Ignoring \'promotedto\'.')
elif self.deprecatedBy is not None and self.obsoletedBy is not None:
self.generator.logMsg('warn', 'Both \'deprecatedby\' and \'obsoletedby\' attributes used on extension ' + self.name + '! Ignoring \'deprecatedby\'.')
superceededBy = None
if self.promotedTo is not None:
self.deprecationType = 'promotion'
superceededBy = promotedTo
elif self.deprecatedBy is not None:
self.deprecationType = 'deprecation'
superceededBy = deprecatedBy
elif self.obsoletedBy is not None:
self.deprecationType = 'obsoletion'
superceededBy = obsoletedBy
if superceededBy is not None:
if superceededBy == '' and not self.deprecationType == 'promotion':
pass # supercedingVkVersion, supercedingExtension == None
elif superceededBy.startswith('VK_VERSION_'):
self.supercedingVkVersion = superceededBy
elif superceededBy.startswith('VK_'):
self.supercedingExtension = superceededBy
else:
self.generator.logMsg('error', 'Unrecognized ' + self.deprecationType + ' attribute value \'' + superceededBy + '\'!')
def __str__(self): return self.name
def __eq__(self, other): return self.name == other.name
def __ne__(self, other): return self.name != other.name
def __lt__(self, other):
me_is_KHR = self.name.startswith( 'VK_KHR' )
me_is_EXT = self.name.startswith( 'VK_EXT' )
he_is_KHR = other.name.startswith( 'VK_KHR' )
he_is_EXT = other.name.startswith( 'VK_EXT' )
swap = False
if me_is_KHR and not he_is_KHR:
return not swap
elif he_is_KHR and not me_is_KHR:
return swap
elif me_is_EXT and not he_is_EXT:
return not swap
elif he_is_EXT and not me_is_EXT:
return swap
else:
return self.name < other.name
def typeToStr(self):
if self.type == 'instance':
return 'Instance extension'
elif self.type == 'device':
return 'Device extension'
elif self.type != None:
self.generator.logMsg('warn', 'The type attribute of ' + self.name + ' extension is neither \'instance\' nor \'device\'. That is invalid (at the time this script was written).')
write(' ' + type.capitalize(), file=fp)
else: # should be unreachable
self.generator.logMsg('error', 'Logic error in typeToStr(): Missing type attribute!')
def conditionalLinkCoreVk(self, vulkanVersion, linkSuffix):
versionMatch = re.match(r'VK_VERSION_(\d+)_(\d+)', vulkanVersion)
major = versionMatch.group(1)
minor = versionMatch.group(2)
dottedVersion = major + '.' + minor
doc = 'ifdef::' + vulkanVersion + '[]\n'
doc += ' <<versions-' + dottedVersion + linkSuffix + ', Vulkan ' + dottedVersion + '>>\n'
doc += 'endif::' + vulkanVersion + '[]\n'
doc += 'ifndef::' + vulkanVersion + '[]\n'
doc += ' Vulkan ' + dottedVersion + '\n'
doc += 'endif::' + vulkanVersion + '[]\n'
return doc
def conditionalLinkExt(self, extName, indent = ' '):
doc = 'ifdef::' + extName + '[]\n'
doc += indent + '<<' + extName + '>>\n'
doc += 'endif::' + extName + '[]\n'
doc += 'ifndef::' + extName + '[]\n'
doc += indent + '`' + extName + '`\n'
doc += 'endif::' + extName + '[]\n'
return doc
def resolveDeprecationChain(self, extensionsList, succeededBy, file):
ext = next(x for x in extensionsList if x.name == succeededBy)
if ext.deprecationType:
if ext.deprecationType == 'promotion':
if ext.supercedingVkVersion:
write(' ** Which in turn was _promoted_ to\n' + ext.conditionalLinkCoreVk(ext.supercedingVkVersion, '-promotions'), file=file)
else: # ext.supercedingExtension
write(' ** Which in turn was _promoted_ to extension\n' + ext.conditionalLinkExt(ext.supercedingExtension), file=file)
ext.resolveDeprecationChain(extensionsList, ext.supercedingExtension, file)
elif ext.deprecationType == 'deprecation':
if ext.supercedingVkVersion:
write(' ** Which in turn was _deprecated_ by\n' + ext.conditionalLinkCoreVk(ext.supercedingVkVersion, '-new-feature'), file=file)
elif ext.supercedingExtension:
write(' ** Which in turn was _deprecated_ by\n' + ext.conditionalLinkExt(ext.supercedingExtension) + ' extension', file=file)
ext.resolveDeprecationChain(extensionsList, ext.supercedingExtension, file)
else:
write(' ** Which in turn was _deprecated_ without replacement', file=file)
elif ext.deprecationType == 'obsoletion':
if ext.supercedingVkVersion:
write(' ** Which in turn was _obsoleted_ by\n' + ext.conditionalLinkCoreVk(ext.supercedingVkVersion, '-new-feature'), file=file)
elif ext.supercedingExtension:
write(' ** Which in turn was _obsoleted_ by\n' + ext.conditionalLinkExt(ext.supercedingExtension) + ' extension', file=file)
ext.resolveDeprecationChain(extensionsList, ext.supercedingExtension, file)
else:
write(' ** Which in turn was _obsoleted_ without replacement', file=file)
else: # should be unreachable
self.generator.logMsg('error', 'Logic error in resolveDeprecationChain(): deprecationType is neither \'promotion\', \'deprecation\' nor \'obsoletion\'!')
def makeMetafile(self, extensionsList):
fp = self.generator.newFile(self.filename)
write('[[' + self.name + ']]', file=fp)
write('=== ' + self.name, file=fp)
write('', file=fp)
write('*Name String*::', file=fp)
write(' `' + self.name + '`', file=fp)
write('*Extension Type*::', file=fp)
write(' ' + self.typeToStr(), file=fp)
write('*Registered Extension Number*::', file=fp)
write(' ' + self.number, file=fp)
write('*Revision*::', file=fp)
write(' ' + self.revision, file=fp)
# Only Vulkan extension dependencies are coded in XML, others are explicit
write('*Extension and Version Dependencies*::', file=fp)
write(' * Requires Vulkan ' + self.requiresCore, file=fp)
if self.requires:
for dep in self.requires.split(','):
write(' * Requires `<<' + dep + '>>`', file=fp)
if self.deprecationType:
write('*Deprecation state*::', file=fp)
if self.deprecationType == 'promotion':
if self.supercedingVkVersion:
write(' * _Promoted_ to\n' + self.conditionalLinkCoreVk(self.supercedingVkVersion, '-promotions'), file=fp)
else: # ext.supercedingExtension
write(' * _Promoted_ to\n' + self.conditionalLinkExt(self.supercedingExtension) + ' extension', file=fp)
self.resolveDeprecationChain(extensionsList, self.supercedingExtension, fp)
elif self.deprecationType == 'deprecation':
if self.supercedingVkVersion:
write(' * _Deprecated_ by\n' + self.conditionalLinkCoreVk(self.supercedingVkVersion, '-new-features'), file=fp)
elif self.supercedingExtension:
write(' * _Deprecated_ by\n' + self.conditionalLinkExt(self.supercedingExtension) + ' extension' , file=fp)
self.resolveDeprecationChain(extensionsList, self.supercedingExtension, fp)
else:
write(' * _Deprecated_ without replacement' , file=fp)
elif self.deprecationType == 'obsoletion':
if self.supercedingVkVersion:
write(' * _Obsoleted_ by\n' + self.conditionalLinkCoreVk(self.supercedingVkVersion, '-new-features'), file=fp)
elif self.supercedingExtension:
write(' * _Obsoleted_ by\n' + self.conditionalLinkExt(self.supercedingExtension) + ' extension' , file=fp)
self.resolveDeprecationChain(extensionsList, self.supercedingExtension, fp)
else:
# TODO: Does not make sense to retroactively ban use of extensions from 1.0.
# Needs some tweaks to the semantics and this message, when such extension(s) occur.
write(' * _Obsoleted_ without replacement' , file=fp)
else: # should be unreachable
self.generator.logMsg('error', 'Logic error in makeMetafile(): deprecationType is neither \'promotion\', \'deprecation\' nor \'obsoletion\'!')
write('*Contact*::', file=fp)
contacts = self.contact.split(',')
for c in contacts:
write(' * ' + c, file=fp)
fp.close()
# ExtensionMetaDocOutputGenerator - subclass of OutputGenerator.
# Generates AsciiDoc includes with metainformation for the Vulkan extension
# appendices. The fields used from <extension> tags in vk.xml are:
#
# name extension name string
# number extension number (optional)
# type 'instance' | 'device' (optional)
# requires list of comma-separate requires Vulkan extensions (optional)
# requiresCore required core version of Vulkan (optional)
# contact name and github login or email address (optional)
# name extension name string
# number extension number (optional)
# contact name and github login or email address (optional)
# type 'instance' | 'device' (optional)
# requires list of comma-separate requires Vulkan extensions (optional)
# requiresCore required core version of Vulkan (optional)
# promotedTo extension or Vulkan version it was promoted to
# deprecatedBy extension or Vulkan version which deprecated this extension,
# or empty string if deprecated without replacement
# obsoletedBy extension or Vulkan version which obsoleted this extension,
# or empty string if obsoleted without replacement
#
# ---- methods ----
# ExtensionMetaDocOutputGenerator(errFile, warnFile, diagFile) - args as for
@ -63,96 +284,193 @@ class ExtensionMetaDocOutputGenerator(OutputGenerator):
warnFile = sys.stderr,
diagFile = sys.stdout):
OutputGenerator.__init__(self, errFile, warnFile, diagFile)
#
self.extensions = []
def newFile(self, filename):
self.logMsg('diag', '# Generating include file:', filename)
fp = open(filename, 'w', encoding='utf-8')
write('// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry', file=fp)
return fp
def beginFile(self, genOpts):
OutputGenerator.beginFile(self, genOpts)
self.directory = self.genOpts.directory
# Create subdirectory, if needed
self.makeDir(self.directory)
def conditionalExt(self, extName, content, ifdef = None, condition = None):
doc = ''
innerdoc = 'ifdef::' + extName + '[]\n'
innerdoc += content + '\n'
innerdoc += 'endif::' + extName + '[]\n'
if ifdef:
if ifdef == 'ifndef':
doc += 'ifndef::' + condition + '[]\n'
doc += innerdoc
doc += 'endif::' + condition + '[]\n'
elif ifdef == 'ifdef':
doc += 'ifdef::' + condition + '+' + extName + '[]\n'
doc += content + '\n'
doc += 'endif::' + condition + '+' + extName + '[]\n'
else: # should be unreachable
self.generator.logMsg('error', 'Logic error in conditionalExt(): ifdef is neither \'ifdef \' nor \'ifndef\'!')
else:
doc += innerdoc
return doc
def endFile(self):
self.extensions.sort()
for ext in self.extensions:
ext.makeMetafile(self.extensions)
promotedExtensions = {}
for ext in self.extensions:
if ext.deprecationType == 'promotion' and ext.supercedingVkVersion:
promotedExtensions.setdefault(ext.supercedingVkVersion, []).append(ext)
for coreVersion, extensions in promotedExtensions.items():
promoted_extensions_fp = self.newFile(self.directory + '/promoted_extensions_' + coreVersion + '.txt')
for ext in extensions:
indent = ''
write(' * {blank}\n+\n' + ext.conditionalLinkExt(ext.name, indent), file=promoted_extensions_fp)
promoted_extensions_fp.close()
current_extensions_appendix_fp = self.newFile(self.directory + '/current_extensions_appendix.txt')
deprecated_extensions_appendix_fp = self.newFile(self.directory + '/deprecated_extensions_appendix.txt')
current_extension_appendices_fp = self.newFile(self.directory + '/current_extension_appendices.txt')
current_extension_appendices_toc_fp = self.newFile(self.directory + '/current_extension_appendices_toc.txt')
deprecated_extension_appendices_fp = self.newFile(self.directory + '/deprecated_extension_appendices.txt')
deprecated_extension_appendices_toc_fp = self.newFile(self.directory + '/deprecated_extension_appendices_toc.txt')
deprecated_extensions_guard_macro_fp = self.newFile(self.directory + '/deprecated_extensions_guard_macro.txt')
write('include::deprecated_extensions_guard_macro.txt[]', file=current_extensions_appendix_fp)
write('', file=current_extensions_appendix_fp)
write('ifndef::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
write('[[extension-appendices-list]]', file=current_extensions_appendix_fp)
write('== List of Extensions', file=current_extensions_appendix_fp)
write('endif::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
write('ifdef::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
write('[[extension-appendices-list]]', file=current_extensions_appendix_fp)
write('== List of Current Extensions', file=current_extensions_appendix_fp)
write('endif::HAS_DEPRECATED_EXTENSIONS[]', file=current_extensions_appendix_fp)
write('', file=current_extensions_appendix_fp)
write('include::current_extension_appendices_toc.txt[]', file=current_extensions_appendix_fp)
write('<<<', file=current_extensions_appendix_fp)
write('include::current_extension_appendices.txt[]', file=current_extensions_appendix_fp)
write('include::deprecated_extensions_guard_macro.txt[]', file=deprecated_extensions_appendix_fp)
write('', file=deprecated_extensions_appendix_fp)
write('ifdef::HAS_DEPRECATED_EXTENSIONS[]', file=deprecated_extensions_appendix_fp)
write('[[deprecated-extension-appendices-list]]', file=deprecated_extensions_appendix_fp)
write('== List of Deprecated Extensions', file=deprecated_extensions_appendix_fp)
write('include::deprecated_extension_appendices_toc.txt[]', file=deprecated_extensions_appendix_fp)
write('<<<', file=deprecated_extensions_appendix_fp)
write('include::deprecated_extension_appendices.txt[]', file=deprecated_extensions_appendix_fp)
write('endif::HAS_DEPRECATED_EXTENSIONS[]', file=deprecated_extensions_appendix_fp)
# add include guard to allow multiple includes
write('ifndef::DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[]', file=deprecated_extensions_guard_macro_fp)
write(':DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD:\n', file=deprecated_extensions_guard_macro_fp)
for ext in self.extensions:
include = 'include::../' + ext.name + '.txt[]'
link = ' * <<' + ext.name + '>>'
if ext.deprecationType is None:
write(self.conditionalExt(ext.name, include), file=current_extension_appendices_fp)
write(self.conditionalExt(ext.name, link), file=current_extension_appendices_toc_fp)
else:
condition = ext.supercedingVkVersion if ext.supercedingVkVersion else ext.supercedingExtension
write(self.conditionalExt(ext.name, include, 'ifndef', condition), file=current_extension_appendices_fp)
write(self.conditionalExt(ext.name, link, 'ifndef', condition), file=current_extension_appendices_toc_fp)
write(self.conditionalExt(ext.name, include, 'ifdef', condition), file=deprecated_extension_appendices_fp)
write(self.conditionalExt(ext.name, link, 'ifdef', condition), file=deprecated_extension_appendices_toc_fp)
write(self.conditionalExt(ext.name, ':HAS_DEPRECATED_EXTENSIONS:', 'ifdef', condition), file=deprecated_extensions_guard_macro_fp)
current_extensions_appendix_fp.close()
deprecated_extensions_appendix_fp.close()
current_extension_appendices_fp.close()
current_extension_appendices_toc_fp.close()
deprecated_extension_appendices_fp.close()
deprecated_extension_appendices_toc_fp.close()
write('endif::DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[]', file=deprecated_extensions_guard_macro_fp)
deprecated_extensions_guard_macro_fp.close()
OutputGenerator.endFile(self)
def beginFeature(self, interface, emit):
# Start processing in superclass
OutputGenerator.beginFeature(self, interface, emit)
# These attributes must exist
name = interface.get('name')
if interface.tag != 'extension':
self.logMsg('diag',
'beginFeature: ignoring non-extension feature',
name)
self.logMsg('diag', 'beginFeature: ignoring non-extension feature', self.featureName)
return
# These attributes must exist
name = self.featureName
number = self.getAttrib(interface, 'number')
type = self.getAttrib(interface, 'type')
revision = self.getSpecVersion(interface, name)
# These attributes are optional
number = self.getAttrib(interface, 'number', 'UNKNOWN')
type = self.getAttrib(interface, 'type', None)
requires = self.getAttrib(interface, 'requires', None)
requiresCore = self.getAttrib(interface, 'requiresCore', '1.0')
contact = self.getAttrib(interface, 'contact', 'UNKNOWN')
revision = self.getSpecVersion(interface, name, 'UNKNOWN')
OPTIONAL = False
requires = self.getAttrib(interface, 'requires', OPTIONAL)
requiresCore = self.getAttrib(interface, 'requiresCore', OPTIONAL, '1.0')
contact = self.getAttrib(interface, 'contact', OPTIONAL)
promotedTo = self.getAttrib(interface, 'promotedto', OPTIONAL)
deprecatedBy = self.getAttrib(interface, 'deprecatedby', OPTIONAL)
obsoletedBy = self.getAttrib(interface, 'obsoletedby', OPTIONAL)
# Create subdirectory, if needed
directory = self.genOpts.directory
self.makeDir(directory)
filename = self.directory + '/' + name + '.txt'
# Create file
filename = directory + '/' + name + '.txt'
self.logMsg('diag', '# Generating include file:', filename)
fp = open(filename, 'w', encoding='utf-8')
self.extensions.append( Extension(self, filename, name, number, type, requires, requiresCore, contact, promotedTo, deprecatedBy, obsoletedBy, revision) )
# Asciidoc anchor
write('// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry', file=fp)
write('[[' + name + ']]', file=fp)
write('== ' + name, file=fp)
write('', file=fp)
write('*Name String*::', file=fp)
write(' `' + name + '`', file=fp)
write('*Extension Type*::', file=fp)
if type == 'instance':
write(' Instance extension', file=fp)
elif type == 'device':
write(' Device extension', file=fp)
elif type != None:
write(' UNRECOGNIZED extension type: ' + type, file=fp)
else:
self.logMsg('warn',
'ExtensionMetaInformation::beginFeature:',
'required type attribute missing for extension',
name)
write(' UNKNOWN extension type (*this should never happen*)', file=fp)
write('*Registered Extension Number*::', file=fp)
write(' ' + number, file=fp)
write('*Revision*::', file=fp)
write(' ' + revision, file=fp)
# @@ Need to determine *Revision*:: number from enum attributes
# Only Vulkan extension dependencies are coded in XML, others are explicit
write('*Extension and Version Dependencies*::', file=fp)
write(' - Requires Vulkan ' + requiresCore, file=fp)
if requires != None:
for dep in requires.split(','):
write(' - Requires `<<' + dep + '>>`', file=fp)
write('*Contact*::', file=fp)
write(' - ' + contact, file=fp)
fp.close()
def endFeature(self):
# Finish processing in superclass
OutputGenerator.endFeature(self)
#
# Query an attribute from an element, or return a default value
# elem - element to query
# attribute - attribute name
# required - whether attribute must exist
# default - default value if attribute not present
def getAttrib(self, elem, attribute, default=None):
if attribute in elem.keys():
return elem.get(attribute)
else:
return default
def getAttrib(self, elem, attribute, required=True, default=None):
attrib = elem.get(attribute, default)
if required and (attrib is None):
name = elem.get('name', 'UNKNOWN')
self.logMsg('error', 'While processing \'' + self.featureName + ', <' + elem.tag + '> \'' + name + '\' does not contain required attribute \'' + attribute + '\'')
return attrib
def content(tag, ET):
return tag.text + ''.join(ET.tostring(e) for e in tag)
def numbersToWords(self, name):
whitelist = ['WIN32', 'INT16']
# temporarily replace whitelist items
for i, w in enumerate(whitelist):
name = re.sub(w, '{' + str(i) + '}', name)
name = re.sub(r'(?<=[A-Z])(\d+)(?![A-Z])', '_\g<1>', name)
# undo whitelist substitution
for i, w in enumerate(whitelist):
name = re.sub('\\{' + str(i) + '}', w, name)
return name
#
# Determine the extension revision from the EXTENSION_NAME_SPEC_VERSION
# enumerant.
@ -162,24 +480,18 @@ class ExtensionMetaDocOutputGenerator(OutputGenerator):
# default - default value if SPEC_VERSION token not present
def getSpecVersion(self, elem, extname, default=None):
# The literal enumerant name to match
enumName = extname.upper() + '_SPEC_VERSION'
# A possible revision number if no literal match is found
specVersion = 'UNKNOWN'
versioningEnumName = self.numbersToWords(extname.upper()) + '_SPEC_VERSION'
for enum in elem.findall('.//enum'):
thisName = enum.get('name')
thisValue = self.getAttrib(enum, 'value', 'UNKNOWN')
if thisName == enumName:
# Exact match
specVersion = thisValue
break
elif thisName[-13:] == '_SPEC_VERSION':
self.logMsg('diag',
'Potential name mismatch between extension',
extname, 'and version token', thisName)
specVersion = thisValue
# Otherwise, ignore the enum
for enum in elem.findall('./require/enum'):
enumName = self.getAttrib(enum, 'name')
if enumName == versioningEnumName:
return self.getAttrib(enum, 'value')
if specVersion == 'UNKNOWN':
print('UNKNOWN SPEC_VERSION for', extname)
return specVersion
#if not found:
for enum in elem.findall('./require/enum'):
enumName = self.getAttrib(enum, 'name')
if enumName.find('SPEC_VERSION') != -1:
self.logMsg('warn', 'Missing ' + versioningEnumName + '! Potential misnamed candidate ' + enumName + '.')
return self.getAttrib(enum, 'value')
self.logMsg('error', 'Missing ' + versioningEnumName + '!')

View File

@ -405,6 +405,15 @@ Extensions = element extensions {
# "1.1". Defaults to "1.0".
# supported - profile name(s) supporting this extension, e.g. 'vulkan'
# or 'disabled' to never generate output.
# promotedto - Vulkan version or a name of an extension that this
# extension was promoted to; e.g. 'VK_VERSION_1_1', or
# 'VK_KHR_draw_indirect_county'
# deprecatedby - Vulkan version or a name of an extension that deprecates
# this extension. It may be empty string.
# e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''
# obsoletedby - Vulkan version or a name of an extension that obsoletes
# this extension. It may be empty string.
# e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''
# In addition, <require> / <remove> tags also support an api attribute:
# api - only require/remove these features for the matching API.
# Not a regular expression.
@ -419,6 +428,9 @@ Extension = element extension {
attribute requires { text } ? ,
attribute requiresCore { text } ? ,
attribute supported { StringGroup } ? ,
attribute promotedto { text } ? ,
attribute deprecatedby { text } ? ,
attribute obsoletedby { text } ? ,
Comment ? ,
(
element require {

View File

@ -6834,7 +6834,7 @@ server.
<command name="vkQueueSignalReleaseImageANDROID"/>
</require>
</extension>
<extension name="VK_EXT_debug_report" number="12" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" supported="vulkan">
<extension name="VK_EXT_debug_report" number="12" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" supported="vulkan" deprecatedby="VK_EXT_debug_utils">
<require>
<enum value="9" name="VK_EXT_DEBUG_REPORT_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_debug_report&quot;" name="VK_EXT_DEBUG_REPORT_EXTENSION_NAME"/>
@ -6922,7 +6922,7 @@ server.
<enum value="&quot;VK_AMD_shader_explicit_vertex_parameter&quot;" name="VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_debug_marker" number="23" type="device" requires="VK_EXT_debug_report" author="Baldur Karlsson" contact="Baldur Karlsson @baldurk" supported="vulkan">
<extension name="VK_EXT_debug_marker" number="23" type="device" requires="VK_EXT_debug_report" author="Baldur Karlsson" contact="Baldur Karlsson @baldurk" supported="vulkan" promotedto="VK_EXT_debug_utils">
<require>
<enum value="4" name="VK_EXT_DEBUG_MARKER_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_debug_marker&quot;" name="VK_EXT_DEBUG_MARKER_EXTENSION_NAME"/>
@ -6958,7 +6958,7 @@ server.
<enum value="&quot;VK_AMD_gcn_shader&quot;" name="VK_AMD_GCN_SHADER_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_NV_dedicated_allocation" number="27" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
<extension name="VK_NV_dedicated_allocation" number="27" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan" deprecatedby="VK_KHR_dedicated_allocation">
<require>
<enum value="1" name="VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION"/>
<enum value="&quot;VK_NV_dedicated_allocation&quot;" name="VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME"/>
@ -7006,7 +7006,7 @@ server.
<enum value="&quot;VK_AMD_extension_33&quot;" name="VK_AMD_EXTENSION_33_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_AMD_draw_indirect_count" number="34" type="device" author="AMD" contact="Daniel Rakos @drakos-amd" supported="vulkan">
<extension name="VK_AMD_draw_indirect_count" number="34" type="device" author="AMD" contact="Daniel Rakos @drakos-amd" supported="vulkan" promotedto="VK_KHR_draw_indirect_count">
<require>
<enum value="1" name="VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_draw_indirect_count&quot;" name="VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME"/>
@ -7020,7 +7020,7 @@ server.
<enum value="&quot;VK_AMD_extension_35&quot;" name="VK_AMD_EXTENSION_35_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_AMD_negative_viewport_height" number="36" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan">
<extension name="VK_AMD_negative_viewport_height" number="36" type="device" author="AMD" contact="Matthaeus G. Chajdas @anteru" supported="vulkan" obsoletedby="VK_KHR_maintenance1">
<require>
<enum value="1" name="VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_negative_viewport_height&quot;" name="VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME"/>
@ -7134,7 +7134,7 @@ server.
<enum value="&quot;VK_NV_extension_53&quot;" name="VK_NV_EXTENSION_53_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_multiview" number="54" type="device" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
<extension name="VK_KHR_multiview" number="54" type="device" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_MULTIVIEW_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_multiview&quot;" name="VK_KHR_MULTIVIEW_EXTENSION_NAME"/>
@ -7161,7 +7161,7 @@ server.
<enum offset="7" extends="VkFormat" name="VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"/>
</require>
</extension>
<extension name="VK_NV_external_memory_capabilities" number="56" type="instance" author="NV" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_NV_external_memory_capabilities" number="56" type="instance" author="NV" contact="James Jones @cubanismo" supported="vulkan" deprecatedby="VK_KHR_external_memory_capabilities">
<require>
<enum value="1" name="VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"/>
<enum value="&quot;VK_NV_external_memory_capabilities&quot;" name="VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"/>
@ -7173,7 +7173,7 @@ server.
<command name="vkGetPhysicalDeviceExternalImageFormatPropertiesNV"/>
</require>
</extension>
<extension name="VK_NV_external_memory" number="57" type="device" requires="VK_NV_external_memory_capabilities" author="NV" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_NV_external_memory" number="57" type="device" requires="VK_NV_external_memory_capabilities" author="NV" contact="James Jones @cubanismo" supported="vulkan" deprecatedby="VK_KHR_external_memory">
<require>
<enum value="1" name="VK_NV_EXTERNAL_MEMORY_SPEC_VERSION"/>
<enum value="&quot;VK_NV_external_memory&quot;" name="VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME"/>
@ -7183,7 +7183,7 @@ server.
<type name="VkExportMemoryAllocateInfoNV"/>
</require>
</extension>
<extension name="VK_NV_external_memory_win32" number="58" type="device" requires="VK_NV_external_memory" author="NV" contact="James Jones @cubanismo" platform="win32" supported="vulkan">
<extension name="VK_NV_external_memory_win32" number="58" type="device" requires="VK_NV_external_memory" author="NV" contact="James Jones @cubanismo" platform="win32" supported="vulkan" deprecatedby="VK_KHR_external_memory_win32">
<require>
<enum value="1" name="VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"/>
<enum value="&quot;VK_NV_external_memory_win32&quot;" name="VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"/>
@ -7194,7 +7194,7 @@ server.
<command name="vkGetMemoryWin32HandleNV"/>
</require>
</extension>
<extension name="VK_NV_win32_keyed_mutex" number="59" type="device" requires="VK_NV_external_memory_win32" author="NV" contact="Carsten Rohde @crohde" platform="win32" supported="vulkan">
<extension name="VK_NV_win32_keyed_mutex" number="59" type="device" requires="VK_NV_external_memory_win32" author="NV" contact="Carsten Rohde @crohde" platform="win32" supported="vulkan" promotedto="VK_KHR_win32_keyed_mutex">
<require>
<enum value="1" name="VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION"/>
<enum value="&quot;VK_NV_win32_keyed_mutex&quot;" name="VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME"/>
@ -7202,7 +7202,7 @@ server.
<type name="VkWin32KeyedMutexAcquireReleaseInfoNV"/>
</require>
</extension>
<extension name="VK_KHR_get_physical_device_properties2" number="60" type="instance" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
<extension name="VK_KHR_get_physical_device_properties2" number="60" type="instance" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_get_physical_device_properties2&quot;" name="VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"/>
@ -7233,7 +7233,7 @@ server.
<command name="vkGetPhysicalDeviceSparseImageFormatProperties2KHR"/>
</require>
</extension>
<extension name="VK_KHR_device_group" number="61" type="device" author="KHR" requires="VK_KHR_device_group_creation" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
<extension name="VK_KHR_device_group" number="61" type="device" author="KHR" requires="VK_KHR_device_group_creation" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="3" name="VK_KHR_DEVICE_GROUP_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_device_group&quot;" name="VK_KHR_DEVICE_GROUP_EXTENSION_NAME"/>
@ -7312,7 +7312,7 @@ server.
<command name="vkCreateViSurfaceNN"/>
</require>
</extension>
<extension name="VK_KHR_shader_draw_parameters" number="64" type="device" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan">
<extension name="VK_KHR_shader_draw_parameters" number="64" type="device" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_shader_draw_parameters&quot;" name="VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME"/>
@ -7348,7 +7348,7 @@ server.
<enum value="&quot;VK_IMG_extension_69&quot;" name="VK_IMG_EXTENSION_69_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_maintenance1" number="70" type="device" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
<extension name="VK_KHR_maintenance1" number="70" type="device" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="2" name="VK_KHR_MAINTENANCE1_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_maintenance1&quot;" name="VK_KHR_MAINTENANCE1_EXTENSION_NAME"/>
@ -7360,7 +7360,7 @@ server.
<command name="vkTrimCommandPoolKHR"/>
</require>
</extension>
<extension name="VK_KHR_device_group_creation" number="71" type="instance" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
<extension name="VK_KHR_device_group_creation" number="71" type="instance" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_device_group_creation&quot;" name="VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME"/>
@ -7373,7 +7373,7 @@ server.
<enum extends="VkMemoryHeapFlagBits" name="VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR" alias="VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"/>
</require>
</extension>
<extension name="VK_KHR_external_memory_capabilities" number="72" type="instance" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_KHR_external_memory_capabilities" number="72" type="instance" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_external_memory_capabilities&quot;" name="VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"/>
@ -7406,7 +7406,7 @@ server.
<command name="vkGetPhysicalDeviceExternalBufferPropertiesKHR"/>
</require>
</extension>
<extension name="VK_KHR_external_memory" number="73" type="device" requires="VK_KHR_external_memory_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_KHR_external_memory" number="73" type="device" requires="VK_KHR_external_memory_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_external_memory&quot;" name="VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME"/>
@ -7458,7 +7458,7 @@ server.
<type name="VkWin32KeyedMutexAcquireReleaseInfoKHR"/>
</require>
</extension>
<extension name="VK_KHR_external_semaphore_capabilities" number="77" type="instance" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_KHR_external_semaphore_capabilities" number="77" type="instance" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_external_semaphore_capabilities&quot;" name="VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"/>
@ -7482,7 +7482,7 @@ server.
<command name="vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"/>
</require>
</extension>
<extension name="VK_KHR_external_semaphore" number="78" type="device" requires="VK_KHR_external_semaphore_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_KHR_external_semaphore" number="78" type="device" requires="VK_KHR_external_semaphore_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_external_semaphore&quot;" name="VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME"/>
@ -7547,7 +7547,7 @@ server.
<enum value="&quot;VK_KHR_extension_83&quot;" name="VK_KHR_EXTENSION_83_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_16bit_storage" number="84" type="device" requires="VK_KHR_get_physical_device_properties2,VK_KHR_storage_buffer_storage_class" author="KHR" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan">
<extension name="VK_KHR_16bit_storage" number="84" type="device" requires="VK_KHR_get_physical_device_properties2,VK_KHR_storage_buffer_storage_class" author="KHR" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_16BIT_STORAGE_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_16bit_storage&quot;" name="VK_KHR_16BIT_STORAGE_EXTENSION_NAME"/>
@ -7565,7 +7565,7 @@ server.
<type name="VkRectLayerKHR"/>
</require>
</extension>
<extension name="VK_KHR_descriptor_update_template" number="86" type="device" author="KHR" contact="Markus Tavenrath @mtavenrath" supported="vulkan">
<extension name="VK_KHR_descriptor_update_template" number="86" type="device" author="KHR" contact="Markus Tavenrath @mtavenrath" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_descriptor_update_template&quot;" name="VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME"/>
@ -7871,7 +7871,7 @@ server.
<command name="vkGetSwapchainStatusKHR"/>
</require>
</extension>
<extension name="VK_KHR_external_fence_capabilities" number="113" type="instance" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="Jesse Hall @critsec" supported="vulkan">
<extension name="VK_KHR_external_fence_capabilities" number="113" type="instance" author="KHR" requires="VK_KHR_get_physical_device_properties2" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_external_fence_capabilities&quot;" name="VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"/>
@ -7894,7 +7894,7 @@ server.
<command name="vkGetPhysicalDeviceExternalFencePropertiesKHR"/>
</require>
</extension>
<extension name="VK_KHR_external_fence" number="114" type="device" requires="VK_KHR_external_fence_capabilities" author="KHR" contact="Jesse Hall @critsec" supported="vulkan">
<extension name="VK_KHR_external_fence" number="114" type="device" requires="VK_KHR_external_fence_capabilities" author="KHR" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_EXTERNAL_FENCE_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_external_fence&quot;" name="VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME"/>
@ -7937,7 +7937,7 @@ server.
<enum value="&quot;VK_KHR_extension_117&quot;" name="VK_KHR_EXTENSION_117_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_maintenance2" number="118" type="device" author="KHR" contact="Michael Worcester @michaelworcester" supported="vulkan">
<extension name="VK_KHR_maintenance2" number="118" type="device" author="KHR" contact="Michael Worcester @michaelworcester" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_MAINTENANCE2_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_maintenance2&quot;" name="VK_KHR_MAINTENANCE2_EXTENSION_NAME"/>
@ -7982,7 +7982,7 @@ server.
<command name="vkGetPhysicalDeviceSurfaceFormats2KHR"/>
</require>
</extension>
<extension name="VK_KHR_variable_pointers" number="121" type="device" author="KHR" contact="Jesse Hall @critsec" requires="VK_KHR_get_physical_device_properties2,VK_KHR_storage_buffer_storage_class" supported="vulkan">
<extension name="VK_KHR_variable_pointers" number="121" type="device" author="KHR" contact="Jesse Hall @critsec" requires="VK_KHR_get_physical_device_properties2,VK_KHR_storage_buffer_storage_class" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_variable_pointers&quot;" name="VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"/>
@ -8050,7 +8050,7 @@ server.
<enum name="VK_QUEUE_FAMILY_FOREIGN_EXT"/>
</require>
</extension>
<extension name="VK_KHR_dedicated_allocation" number="128" type="device" author="KHR" requires="VK_KHR_get_memory_requirements2" contact="James Jones @cubanismo" supported="vulkan">
<extension name="VK_KHR_dedicated_allocation" number="128" type="device" author="KHR" requires="VK_KHR_get_memory_requirements2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="3" name="VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_dedicated_allocation&quot;" name="VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME"/>
@ -8121,7 +8121,7 @@ server.
<type name="VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT"/>
</require>
</extension>
<extension name="VK_KHR_storage_buffer_storage_class" number="132" type="device" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan">
<extension name="VK_KHR_storage_buffer_storage_class" number="132" type="device" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_storage_buffer_storage_class&quot;" name="VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME"/>
@ -8216,7 +8216,7 @@ server.
<command name="vkGetPhysicalDeviceMultisamplePropertiesEXT"/>
</require>
</extension>
<extension name="VK_KHR_relaxed_block_layout" number="145" type="device" author="KHR" contact="John Kessenich @johnkslang" supported="vulkan">
<extension name="VK_KHR_relaxed_block_layout" number="145" type="device" author="KHR" contact="John Kessenich @johnkslang" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_relaxed_block_layout&quot;" name="VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME"/>
@ -8224,7 +8224,7 @@ server.
</extension>
<extension name="RESERVED_DO_NOT_USE_146" number="146" supported="disabled" comment="Used for functionality subsumed into Vulkan 1.1 and not published as an extension">
</extension>
<extension name="VK_KHR_get_memory_requirements2" number="147" type="device" author="KHR" contact="Jason Ekstrand @jekstrand" supported="vulkan">
<extension name="VK_KHR_get_memory_requirements2" number="147" type="device" author="KHR" contact="Jason Ekstrand @jekstrand" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_get_memory_requirements2&quot;" name="VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME"/>
@ -8361,7 +8361,7 @@ server.
<enum value="&quot;VK_EXT_post_depth_coverage&quot;" name="VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_sampler_ycbcr_conversion" number="157" type="device" requires="VK_KHR_maintenance1,VK_KHR_bind_memory2,VK_KHR_get_memory_requirements2,VK_KHR_get_physical_device_properties2" author="KHR" contact="Andrew Garrard @fluppeteer" supported="vulkan">
<extension name="VK_KHR_sampler_ycbcr_conversion" number="157" type="device" requires="VK_KHR_maintenance1,VK_KHR_bind_memory2,VK_KHR_get_memory_requirements2,VK_KHR_get_physical_device_properties2" author="KHR" contact="Andrew Garrard @fluppeteer" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_sampler_ycbcr_conversion&quot;" name="VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"/>
@ -8444,7 +8444,7 @@ server.
<enum extends="VkDebugReportObjectTypeEXT" offset="0" name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"/>
</require>
</extension>
<extension name="VK_KHR_bind_memory2" number="158" type="device" author="KHR" contact="Tobias Hector @tobski" supported="vulkan">
<extension name="VK_KHR_bind_memory2" number="158" type="device" author="KHR" contact="Tobias Hector @tobski" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_BIND_MEMORY_2_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_bind_memory2&quot;" name="VK_KHR_BIND_MEMORY_2_EXTENSION_NAME"/>
@ -8543,7 +8543,7 @@ server.
<enum value="&quot;VK_NV_extension_168&quot;" name="VK_EXT_EXTENSION_168_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_maintenance3" number="169" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
<extension name="VK_KHR_maintenance3" number="169" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
<require>
<enum value="1" name="VK_KHR_MAINTENANCE3_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_maintenance3&quot;" name="VK_KHR_MAINTENANCE3_EXTENSION_NAME"/>