Change log for May 25, 2018 Vulkan 1.1.76 spec update:

* Update release number to 76.

Internal Issues:

  * Add an exception clause to the license on `vk.xml`, enabling its use
    with GPL-based projects (internal issue 1017).
  * Remove the generated `vulkan_ext.[ch]` files, which are no longer
    supported. Add `src/ext_loader/README.md` explaining why, and update
    files in `xml/` to not generate them by default (internal issue 1268)

Other Issues:

  * Fix typos in valid usage statements for the
    ftext:vkDrawIndexedIndirectCount* commands, replacing
    sizeof(VkDrawIndirectComment) with sizeof(VkDrawIndexedIndirectCommand).
  * Modify the <<spirvenv-module-validation, Validation Rules within a
    Module>> section to require code:NonReadable or code:NonWriteable in
    SPIR-V code for images with an image format of code:Unknown if one of
    the requisite code:shaderImageReadWithoutFormat or
    code:shaderImageWriteWithoutFormat features is disabled.

New Extensions:

  * `VK_KHR_get_display_properties2`
  * `VK_KHR_draw_indirect_count`
This commit is contained in:
Jon Leech 2018-05-25 04:00:32 -07:00
parent fae3873128
commit ee13fc355f
17 changed files with 1042 additions and 2662 deletions

View File

@ -106,7 +106,7 @@ VERBOSE =
# $(EXTENSIONS))
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 75
PATCHVERSION = 76
ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
SPECREVISION = 1.1.$(PATCHVERSION)
else

View File

@ -0,0 +1,35 @@
// Copyright (c) 2016-2017 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_draw_indirect_count.txt[]
*Status*::
Draft
*Last Modified Date*::
2017-08-25
*IP Status*::
No known IP claims.
*Contributors*::
- Matthaeus G. Chajdas, AMD
- Derrick Owens, AMD
- Graham Sellers, AMD
- Daniel Rakos, AMD
- Dominik Witczak, AMD
- Piers Daniell, NVIDIA
This extension is based off the VK_AMD_draw_indirect_count extension.
This extension allows an application to source the number of draw calls for
indirect draw calls from a buffer.
This enables applications to generate arbitrary amounts of draw commands and
execute them without host intervention.
=== New Functions
* flink:vkCmdDrawIndirectCountKHR
* flink:vkCmdDrawIndexedIndirectCountKHR
=== Version History
* Revision 1, 2017-08-25 (Piers Daniell)
- Initial draft based off VK_AMD_draw_indirect_count

View File

@ -0,0 +1,89 @@
// Copyright (c) 2017-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_display_properties2.txt[]
*Last Modified Date*::
2017-02-21
*IP Status*::
No known IP claims.
*Contributors*::
- Ian Elliott, Google
- James Jones, NVIDIA
This extension provides new entry points to query device display properties
and capabilities in a way that can be easily extended by other extensions,
without introducing any further entry points.
This extension can be considered the <<VK_KHR_display,VK_KHR_display>>
equivalent of the <<VK_KHR_get_physical_device_properties2,
VK_KHR_get_physical_device_properties2>> extension.
=== New Object Types
None.
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR
** ename:VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR
** ename:VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR
** ename:VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR
** ename:VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR
=== New Enums
None.
=== New Structures
* slink:VkDisplayProperties2KHR
* slink:VkDisplayPlaneProperties2KHR
* slink:VkDisplayModeProperties2KHR
* slink:VkDisplayPlaneInfo2KHR
* slink:VkDisplayPlaneCapabilities2KHR
=== New Functions
* flink:vkGetPhysicalDeviceDisplayProperties2KHR
* flink:vkGetPhysicalDeviceDisplayPlaneProperties2KHR
* flink:vkGetDisplayModeProperties2KHR
* flink:vkGetDisplayPlaneCapabilities2KHR
=== Issues
1) What should this extension be named?
*RESOLVED*: VK_KHR_get_display_properties2.
Other alternatives:
* VK_KHR_display2
* One extension, combined with VK_KHR_surface_capabilites2.
2) Should extensible input structs be added for these new functions:
*RESOLVED*:
* flink:vkGetPhysicalDeviceDisplayProperties2KHR: No.
The only current input is a VkPhysicalDevice.
Other inputs wouldn't make sense.
* flink:vkGetPhysicalDeviceDisplayPlaneProperties2KHR: No.
The only current input is a VkPhysicalDevice.
Other inputs wouldn't make sense.
* flink:vkGetDisplayModeProperties2KHR: No.
The only curent inputs are a VkPhysicalDevice and a VkDisplayModeKHR.
Other inputs wouldn't make sense.
3) Should additional display query functions be extended?
*RESOLVED*:
* flink:vkGetDisplayPlaneSupportedDisplaysKHR: No.
Extensions should instead extend
flink:vkGetDisplayPlaneCapabilitiesKHR().
=== Version History
* Revision 1, 2017-02-21 (James Jones)
- Initial draft.

View File

@ -101,6 +101,10 @@ 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[]
@ -149,6 +153,10 @@ 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[]

View File

@ -345,6 +345,9 @@ Drawing Commands::
Commands that provoke work using a graphics pipeline.
Includes flink:vkCmdDraw, flink:vkCmdDrawIndexed,
flink:vkCmdDrawIndirect,
ifdef::VK_KHR_draw_indirect_count[]
flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
@ -608,6 +611,9 @@ Indexed Drawing Commands::
_Drawing commands_ which use an _index buffer_ as the source of index
values used to fetch vertex attributes for a drawing command.
Includes flink:vkCmdDrawIndexed,
ifdef::VK_KHR_draw_indirect_count[]
flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
@ -617,6 +623,9 @@ Indirect Commands::
Drawing or dispatching commands that source some of their parameters
from structures in buffer memory.
Includes flink:vkCmdDrawIndirect, flink:vkCmdDrawIndexedIndirect,
ifdef::VK_KHR_draw_indirect_count[]
flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
@ -636,6 +645,9 @@ Indirect Drawing Commands::
_Drawing commands_ that source some of their parameters from structures
in buffer memory.
Includes flink:vkCmdDrawIndirect,
ifdef::VK_KHR_draw_indirect_count[]
flink:vkCmdDrawIndirectCountKHR, flink:vkCmdDrawIndexedIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
flink:vkCmdDrawIndirectCountAMD, flink:vkCmdDrawIndexedIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]
@ -766,6 +778,9 @@ Non-Indexed Drawing Commands::
order from the vertex input attributes for a drawing command (i.e. they
do not use an _index buffer_).
Includes flink:vkCmdDraw,
ifdef::VK_KHR_draw_indirect_count[]
flink:vkCmdDrawIndirectCountKHR,
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
flink:vkCmdDrawIndirectCountAMD,
endif::VK_AMD_draw_indirect_count[]

View File

@ -394,6 +394,16 @@ endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
the variable holding the result of a sampling instruction.)
** code:OpTypeImage must: have a "`Sampled`" operand of 1 (sampled image)
or 2 (storage image).
** If
<<features-features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
is not enabled and an code:OpTypeImage has "`Image Format`" operand of
code:Unknown, any variables created with the given type must be
decorated with code:NonReadable.
** If
<<features-features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>
is not enabled and an code:OpTypeImage has "`Image Format`" operand of
code:Unknown, any variables created with the given type must be
decorated with code:NonWriteable.
** code:OpImageQuerySizeLod, and code:OpImageQueryLevels must: only
consume an "`Image`" operand whose type has its "`Sampled`" operand set
to 1.

View File

@ -110,6 +110,45 @@ screen needs to be updated in most frames.
include::../../validity/structs/VkDisplayPropertiesKHR.txt[]
--
ifdef::VK_KHR_get_display_properties2[]
[open,refpage='vkGetPhysicalDeviceDisplayProperties2KHR',desc='Query information about the available displays',type='protos']
--
To query information about the available displays, call:
include::../../api/protos/vkGetPhysicalDeviceDisplayProperties2KHR.txt[]
* pname:physicalDevice is a physical device.
* pname:pPropertyCount is a pointer to an integer related to the number of
display devices available or queried, as described below.
* pname:pProperties is either `NULL` or a pointer to an array of
sname:VkDisplayProperties2KHR structures.
fname:vkGetPhysicalDeviceDisplayProperties2KHR behaves similarly to
flink:vkGetPhysicalDeviceDisplayPropertiesKHR, with the ability to return
extended information via chained output structures.
include::../../validity/protos/vkGetPhysicalDeviceDisplayProperties2KHR.txt[]
--
[open,refpage='VkDisplayProperties2KHR',desc='Structure describing an available display device',type='structs']
--
The sname:VkDisplayProperties2KHR structure is defined as:
include::../../api/structs/VkDisplayProperties2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:displayProperties is an instance of the
slink:VkDisplayPropertiesKHR structure.
include::../../validity/structs/VkDisplayProperties2KHR.txt[]
--
endif::VK_KHR_get_display_properties2[]
ifdef::VK_EXT_direct_mode_display[]
include::../VK_EXT_direct_mode_display/acquire_release_displays.txt[]
endif::VK_EXT_direct_mode_display[]
@ -169,6 +208,45 @@ include::../../api/structs/VkDisplayPlanePropertiesKHR.txt[]
include::../../validity/structs/VkDisplayPlanePropertiesKHR.txt[]
--
ifdef::VK_KHR_get_display_properties2[]
[open,refpage='vkGetPhysicalDeviceDisplayPlaneProperties2KHR',desc='Query information about the available display planes.',type='protos']
--
To query the properties of a device's display planes, call:
include::../../api/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.txt[]
* pname:physicalDevice is a physical device.
* pname:pPropertyCount is a pointer to an integer related to the number of
display planes available or queried, as described below.
* pname:pProperties is either `NULL` or a pointer to an array of
sname:VkDisplayPlaneProperties2KHR structures.
fname:vkGetPhysicalDeviceDisplayPlaneProperties2KHR behaves similarly to
flink:vkGetPhysicalDeviceDisplayPlanePropertiesKHR, with the ability to
return extended information via chained output structures.
include::../../validity/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.txt[]
--
[open,refpage='VkDisplayPlaneProperties2KHR',desc='Structure describing an available display plane',type='structs']
--
The sname:VkDisplayPlaneProperties2KHR structure is defined as:
include::../../api/structs/VkDisplayPlaneProperties2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:displayPlaneProperties is an instance of the
slink:VkDisplayPlanePropertiesKHR structure.
include::../../validity/structs/VkDisplayPlaneProperties2KHR.txt[]
--
endif::VK_KHR_get_display_properties2[]
[open,refpage='vkGetDisplayPlaneSupportedDisplaysKHR',desc='Query the list of displays a plane supports',type='protos']
--
@ -275,6 +353,47 @@ include::../../api/structs/VkDisplayModePropertiesKHR.txt[]
include::../../validity/structs/VkDisplayModePropertiesKHR.txt[]
--
ifdef::VK_KHR_get_display_properties2[]
[open,refpage='vkGetDisplayModeProperties2KHR',desc='Query information about the available display modes.',type='protos']
--
To query the properties of a device's built-in display modes, call:
include::../../api/protos/vkGetDisplayModeProperties2KHR.txt[]
* pname:physicalDevice is the physical device associated with
pname:display.
* pname:display is the display to query.
* pname:pPropertyCount is a pointer to an integer related to the number of
display modes available or queried, as described below.
* pname:pProperties is either `NULL` or a pointer to an array of
sname:VkDisplayModeProperties2KHR structures.
fname:vkGetDisplayModeProperties2KHR behaves similarly to
flink:vkGetDisplayModePropertiesKHR, with the ability to return extended
information via chained output structures.
include::../../validity/protos/vkGetDisplayModeProperties2KHR.txt[]
--
[open,refpage='VkDisplayModeProperties2KHR',desc='Structure describing an available display mode',type='structs']
--
The sname:VkDisplayModeProperties2KHR structure is defined as:
include::../../api/structs/VkDisplayModeProperties2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:displayModeProperties is an instance of the
slink:VkDisplayModePropertiesKHR structure.
include::../../validity/structs/VkDisplayModeProperties2KHR.txt[]
--
endif::VK_KHR_get_display_properties2[]
[open,refpage='VkDisplayModeParametersKHR',desc='Structure describing display parameters associated with a display mode',type='structs']
--
@ -432,6 +551,76 @@ combinations.
include::../../validity/structs/VkDisplayPlaneCapabilitiesKHR.txt[]
--
ifdef::VK_KHR_get_display_properties2[]
[open,refpage='vkGetDisplayPlaneCapabilities2KHR',desc='Query capabilities of a mode and plane combination',type='protos']
--
To query the capabilities of a given mode and plane combination, call:
include::../../api/protos/vkGetDisplayPlaneCapabilities2KHR.txt[]
* pname:physicalDevice is the physical device associated with
pname:pDisplayPlaneInfo.
* pname:pDisplayPlaneInfo is a pointer to an instance of the
slink:VkDisplayPlaneInfo2KHR structure describing the plane and mode.
* pname:pCapabilities is a pointer to a
slink:VkDisplayPlaneCapabilities2KHR structure in which the capabilities
are returned.
fname:vkGetDisplayPlaneCapabilities2KHR behaves similarly to
flink:vkGetDisplayPlaneCapabilitiesKHR, with the ability to specify extended
inputs via chained input structures, and to return extended information via
chained output structures.
include::../../validity/protos/vkGetDisplayPlaneCapabilities2KHR.txt[]
--
[open,refpage='VkDisplayPlaneInfo2KHR',desc='Structure defining the intended configuration of a display plane',type='structs']
--
The sname:VkDisplayPlaneInfo2KHR structure is defined as:
include::../../api/structs/VkDisplayPlaneInfo2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:mode is the display mode the application intends to program when
using the specified plane.
[NOTE]
.Note
====
This parameter also implicitly specifies a display.
====
* pname:planeIndex is the plane which the application intends to use with
the display.
The members of sname:VkDisplayPlaneInfo2KHR correspond to the arguments to
flink:vkGetDisplayPlaneCapabilitiesKHR, with pname:sType and pname:pNext
added for extensibility.
include::../../validity/structs/VkDisplayPlaneInfo2KHR.txt[]
--
[open,refpage='VkDisplayPlaneCapabilities2KHR',desc='Structure describing the capabilities of a mode and plane combination',type='structs']
--
The sname:VkDisplayPlaneCapabilities2KHR structure is defined as:
include::../../api/structs/VkDisplayPlaneCapabilities2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:capabilities is an instance of the
slink:VkDisplayPlaneCapabilitiesKHR structure.
include::../../validity/structs/VkDisplayPlaneCapabilities2KHR.txt[]
--
endif::VK_KHR_get_display_properties2[]
ifdef::VK_EXT_display_control[]
include::../VK_EXT_display_control/display_control.txt[]
endif::VK_EXT_display_control[]

View File

@ -416,6 +416,9 @@ Drawing commands fall roughly into two categories:
These commands are:
** flink:vkCmdDraw
** flink:vkCmdDrawIndirect
ifdef::VK_KHR_draw_indirect_count[]
** flink:vkCmdDrawIndirectCountKHR
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
** flink:vkCmdDrawIndirectCountAMD.
endif::VK_AMD_draw_indirect_count[]
@ -424,6 +427,9 @@ endif::VK_AMD_draw_indirect_count[]
These commands are:
** flink:vkCmdDrawIndexed
** flink:vkCmdDrawIndexedIndirect
ifdef::VK_KHR_draw_indirect_count[]
** flink:vkCmdDrawIndexedIndirectCountKHR
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
** flink:vkCmdDrawIndexedIndirectCountAMD.
endif::VK_AMD_draw_indirect_count[]
@ -1182,6 +1188,225 @@ include::../validity/structs/VkDrawIndirectCommand.txt[]
--
ifdef::VK_KHR_draw_indirect_count[]
[open,refpage='vkCmdDrawIndirectCountKHR',desc='Perform an indirect draw with the draw count sourced from a buffer',type='protos']
--
To record a non-indexed draw call with a draw call count sourced from a
buffer, call:
include::../api/protos/vkCmdDrawIndirectCountKHR.txt[]
* pname:commandBuffer is the command buffer into which the command is
recorded.
* pname:buffer is the buffer containing draw parameters.
* pname:offset is the byte offset into pname:buffer where parameters
begin.
* pname:countBuffer is the buffer containing the draw count.
* pname:countBufferOffset is the byte offset into pname:countBuffer where
the draw count begins.
* pname:maxDrawCount specifies the maximum number of draws that will be
executed.
The actual number of executed draw calls is the minimum of the count
specified in pname:countBuffer and pname:maxDrawCount.
* pname:stride is the byte stride between successive sets of draw
parameters.
fname:vkCmdDrawIndirectCountKHR behaves similarly to flink:vkCmdDrawIndirect
except that the draw count is read by the device from a buffer during
execution.
The command will read an unsigned 32-bit integer from pname:countBuffer
located at pname:countBufferOffset and use this as the draw count.
.Valid Usage
****
* [[VUID-vkCmdDrawIndirectCountKHR-buffer-03104]]
If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndirectCountKHR-buffer-03105]]
pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndirectCountKHR-countBuffer-03106]]
If pname:countBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndirectCountKHR-countBuffer-03107]]
pname:countBuffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndirectCountKHR-offset-03108]]
pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirectCountKHR-countBufferOffset-03109]]
pname:countBufferOffset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirectCountKHR-stride-03110]]
pname:stride must: be a multiple of `4` and must: be greater than or
equal to sizeof(sname:VkDrawIndirectCommand)
* [[VUID-vkCmdDrawIndirectCountKHR-maxDrawCount-03111]]
If pname:maxDrawCount is greater than or equal to `1`,
[eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
{plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* [[VUID-vkCmdDrawIndirectCountKHR-firstInstance-03112]]
If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, all the pname:firstInstance members of the
sname:VkDrawIndirectCommand structures accessed by this command must: be
code:0
* [[VUID-vkCmdDrawIndirectCountKHR-renderPass-03113]]
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndirectCountKHR-subpass-03114]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndirectCountKHR-None-03115]]
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndirectCountKHR-None-03116]]
For each push constant that is statically used by the sname:VkPipeline
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndirectCountKHR-None-03117]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndirectCountKHR-None-03118]]
All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* [[VUID-vkCmdDrawIndirectCountKHR-None-03119]]
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndirectCountKHR-None-03120]]
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndirectCountKHR-countBuffer-03121]]
If the count stored in pname:countBuffer is equal to `1`,
[eq]#(pname:offset {plus} sizeof(sname:VkDrawIndirectCommand))# must: be
less than or equal to the size of pname:buffer
* [[VUID-vkCmdDrawIndirectCountKHR-countBuffer-03122]]
If the count stored in pname:countBuffer is greater than `1`,
[eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
{plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* [[VUID-vkCmdDrawIndirectCountKHR-countBuffer-03123]]
The count stored in pname:countBuffer must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
* [[VUID-vkCmdDrawIndirectCountKHR-None-03124]]
Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndirectCountKHR-None-03125]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndirectCountKHR-None-03126]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndirectCountKHR-None-03127]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndirectCountKHR-None-03128]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndirectCountKHR-None-03129]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndirectCountKHR-linearTilingFeatures-03130]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures (for a linear
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* [[VUID-vkCmdDrawIndirectCountKHR-None-03131]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndirectCountKHR-linearTilingFeatures-03169]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkFormatProperties::pname:linearTilingFeatures (for a linear
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* [[VUID-vkCmdDrawIndirectCountKHR-None-03170]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndirectCountKHR-maxMultiviewInstanceIndex-03132]]
If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewProperties::pname:maxMultiviewInstanceIndex.
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndirectCountKHR-commandBuffer-03133]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndirectCountKHR-commandBuffer-03134]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndirectCountKHR-commandBuffer-03135]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndirectCountKHR-sampleLocationsEnable-03171]]
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set
endif::VK_EXT_sample_locations[]
****
include::../validity/protos/vkCmdDrawIndirectCountKHR.txt[]
--
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
[open,refpage='vkCmdDrawIndirectCountAMD',desc='Perform an indirect draw with the draw count sourced from a buffer',type='protos']
--
@ -1676,6 +1901,226 @@ include::../validity/structs/VkDrawIndexedIndirectCommand.txt[]
--
ifdef::VK_KHR_draw_indirect_count[]
[open,refpage='vkCmdDrawIndexedIndirectCountKHR',desc='Perform an indexed indirect draw with the draw count sourced from a buffer',type='protos']
--
To record an indexed draw call with a draw call count sourced from a buffer,
call:
include::../api/protos/vkCmdDrawIndexedIndirectCountKHR.txt[]
* pname:commandBuffer is the command buffer into which the command is
recorded.
* pname:buffer is the buffer containing draw parameters.
* pname:offset is the byte offset into pname:buffer where parameters
begin.
* pname:countBuffer is the buffer containing the draw count.
* pname:countBufferOffset is the byte offset into pname:countBuffer where
the draw count begins.
* pname:maxDrawCount specifies the maximum number of draws that will be
executed.
The actual number of executed draw calls is the minimum of the count
specified in pname:countBuffer and pname:maxDrawCount.
* pname:stride is the byte stride between successive sets of draw
parameters.
fname:vkCmdDrawIndexedIndirectCountKHR behaves similarly to
flink:vkCmdDrawIndexedIndirect except that the draw count is read by the
device from a buffer during execution.
The command will read an unsigned 32-bit integer from pname:countBuffer
located at pname:countBufferOffset and use this as the draw count.
.Valid Usage
****
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-buffer-03136]]
If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-buffer-03137]]
pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03138]]
If pname:countBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03139]]
pname:countBuffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-offset-03140]]
pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-countBufferOffset-03141]]
pname:countBufferOffset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-stride-03142]]
pname:stride must: be a multiple of `4` and must: be greater than or
equal to sizeof(sname:VkDrawIndexedIndirectCommand)
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-maxDrawCount-03143]]
If pname:maxDrawCount is greater than or equal to `1`,
[eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
{plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
or equal to the size of pname:buffer
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-firstInstance-03144]]
If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, all the pname:firstInstance members of the
sname:VkDrawIndexedIndirectCommand structures accessed by this command
must: be code:0
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-renderPass-03145]]
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-subpass-03146]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03147]]
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03148]]
For each push constant that is statically used by the sname:VkPipeline
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03149]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03150]]
All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03151]]
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03152]]
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03153]]
If count stored in pname:countBuffer is equal to `1`, [eq]#(pname:offset
{plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
or equal to the size of pname:buffer
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-countBuffer-03154]]
If count stored in pname:countBuffer is greater than `1`,
[eq]#(pname:stride {times} (pname:drawCount - 1) {plus} pname:offset
{plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
or equal to the size of pname:buffer
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-drawCount-03155]]
pname:drawCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03156]]
Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03157]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03158]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03159]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03160]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03161]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-linearTilingFeatures-03162]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures (for a linear
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03163]]
Image subresources used as attachments in the current render pass must:
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-linearTilingFeatures-03172]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkFormatProperties::pname:linearTilingFeatures (for a linear
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03173]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-maxMultiviewInstanceIndex-03164]]
If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewProperties::pname:maxMultiviewInstanceIndex.
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-03165]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-03166]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-03167]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-sampleLocationsEnable-03174]]
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set
endif::VK_EXT_sample_locations[]
****
include::../validity/protos/vkCmdDrawIndexedIndirectCountKHR.txt[]
--
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_AMD_draw_indirect_count[]
[open,refpage='vkCmdDrawIndexedIndirectCountAMD',desc='Perform an indexed indirect draw with the draw count sourced from a buffer',type='protos']
--
@ -1726,12 +2171,12 @@ located at pname:countBufferOffset and use this as the draw count.
pname:countBufferOffset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-stride-00557]]
pname:stride must: be a multiple of `4` and must: be greater than or
equal to code:sizeof(sname:VkDrawIndirectCommand)
equal to code:sizeof(sname:VkDrawIndexedIndirectCommand)
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-maxDrawCount-00558]]
If pname:maxDrawCount is greater than or equal to `1`,
[eq]#(pname:stride {times} (pname:maxDrawCount - 1) {plus} pname:offset
{plus} code:sizeof(sname:VkDrawIndirectCommand))# must: be less than or
equal to the size of pname:buffer
{plus} code:sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less
than or equal to the size of pname:buffer
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-firstInstance-00559]]
If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
#define VK_HEADER_VERSION 75
#define VK_HEADER_VERSION 76
#define VK_NULL_HANDLE 0
@ -350,6 +350,11 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000,
VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001,
VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002,
VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003,
VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004,
VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000,
@ -5582,6 +5587,70 @@ typedef VkPhysicalDeviceVariablePointerFeatures VkPhysicalDeviceVariablePointerF
#define VK_KHR_get_display_properties2 1
#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1
#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2"
typedef struct VkDisplayProperties2KHR {
VkStructureType sType;
void* pNext;
VkDisplayPropertiesKHR displayProperties;
} VkDisplayProperties2KHR;
typedef struct VkDisplayPlaneProperties2KHR {
VkStructureType sType;
void* pNext;
VkDisplayPlanePropertiesKHR displayPlaneProperties;
} VkDisplayPlaneProperties2KHR;
typedef struct VkDisplayModeProperties2KHR {
VkStructureType sType;
void* pNext;
VkDisplayModePropertiesKHR displayModeProperties;
} VkDisplayModeProperties2KHR;
typedef struct VkDisplayPlaneInfo2KHR {
VkStructureType sType;
const void* pNext;
VkDisplayModeKHR mode;
uint32_t planeIndex;
} VkDisplayPlaneInfo2KHR;
typedef struct VkDisplayPlaneCapabilities2KHR {
VkStructureType sType;
void* pNext;
VkDisplayPlaneCapabilitiesKHR capabilities;
} VkDisplayPlaneCapabilities2KHR;
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties);
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties);
typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties);
typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR(
VkPhysicalDevice physicalDevice,
uint32_t* pPropertyCount,
VkDisplayProperties2KHR* pProperties);
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
VkPhysicalDevice physicalDevice,
uint32_t* pPropertyCount,
VkDisplayPlaneProperties2KHR* pProperties);
VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR(
VkPhysicalDevice physicalDevice,
VkDisplayKHR display,
uint32_t* pPropertyCount,
VkDisplayModeProperties2KHR* pProperties);
VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR(
VkPhysicalDevice physicalDevice,
const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
VkDisplayPlaneCapabilities2KHR* pCapabilities);
#endif
#define VK_KHR_dedicated_allocation 1
#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3
#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
@ -5737,6 +5806,33 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR(
VkDescriptorSetLayoutSupport* pSupport);
#endif
#define VK_KHR_draw_indirect_count 1
#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count"
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR(
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset,
VkBuffer countBuffer,
VkDeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride);
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR(
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset,
VkBuffer countBuffer,
VkDeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride);
#endif
#define VK_EXT_debug_report 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)

28
src/ext_loader/README.md Normal file
View File

@ -0,0 +1,28 @@
# What Happened To The Vulkan Extension Loader?
If you're looking for the files vulkan_ext.[ch] in this directory, they have
been removed. There were two significant problems with these simple
wrappers.
First, vulkan_ext exported all extension entrypoints. However, the Vulkan
loader also exports entrypoints for the window system integration
extensions. If someone tried to compile a project and link it to both the
loader and vulkan_ext, they would get a bunch of redefined symbols. This
linking error is difficult to work around, because vulkan_ext does not have
an easy method of disabling the entrypoints at compile time. It is possible
to remove these entrypoints when generating vulkan_ext, but even then you
have to manually compile a list of every single extension to be disabled.
Second, each entrypoint is only stored once, regardless of how many
instances or devices are created. This means that attempting to use multiple
instances or devices in parallel can result in one device calling function
pointers that are only valid on the other device, which will crash. You may
be able to work around this by never initializing the device dispatch
(vkExtInitDevice), but we haven't tried this.
It is still possible to retrieve the last versions of these files in the
Github KhronosGroup/Vulkan-Docs repository from the 'v1.1.75' release tag.
It is also possible to regenerate them from ../../xml/vk.xml, although we
are no longer maintaining the generator code and it may eventually stop
working correctly. See README.adoc and the `extloader` Makefile target in
that directory.

File diff suppressed because it is too large Load Diff

View File

@ -1,63 +0,0 @@
#ifndef VULKAN_EXT_H
#define VULKAN_EXT_H
#ifdef __cplusplus
extern "C" {
#endif
/*
** Copyright (c) 2015-2018 The Khronos Group Inc.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
/*
** This header is generated from the Khronos Vulkan XML API Registry.
**
*/
/*
** This is a simple extension loader which provides the implementations for the
** extension prototypes declared in vulkan header. It supports loading extensions either
** for a single instance or a single device. Multiple instances are not yet supported.
**
** To use the loader add vulkan_ext.c to your solution and include <vulkan/vulkan_ext.h>.
**
** If your application is using a single instance, but multiple devices callParam
**
** vkExtInitInstance(instance);
**
** after initializing the instance. This way the extension loader will use the loaders
** trampoline functions to call the correct driver for each call. This method is safe
** if your application might use more than one device at the cost of one additional
** indirection, the dispatch table of each dispatchable object.
**
** If your application uses only a single device it's better to use
**
** vkExtInitDevice(device);
**
** once the device has been initialized. This will resolve the function pointers
** upfront and thus removes one indirection for each call into the driver. This *can*
** result in slightly more performance for calling overhead limited cases.
*/
#include <vulkan/vulkan_core.h>
void vkExtInitInstance(VkInstance instance);
void vkExtInitDevice(VkDevice device);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -53,10 +53,8 @@ PLATFORM_HEADERS = \
$(VULKAN)/vulkan_xlib.h \
$(VULKAN)/vulkan_xlib_xrandr.h
HEADERS = $(VULKAN)/vulkan_core.h $(PLATFORM_HEADERS)
EXTLOADER = $(SRC)/ext_loader
EXTSRCS = $(EXTLOADER)/vulkan_ext.c
default install: $(HEADERS) $(EXTSRCS)
default install: $(HEADERS)
################################################
@ -89,10 +87,12 @@ test: $(HEADERS) $(VULKAN)/vulkan.h $(VULKAN)/vk_platform.h
################################################
# Autogenerate extension loader from XML API description
# This also generates $(EXTLOADER)/vulkan_ext.h
# Also generates $(EXTLOADER)/vulkan_ext.h
# No longer supported.
#$(EXTLOADER)/vulkan_ext.c: $(VKH_DEPENDS)
$(EXTSRCS): $(VKH_DEPENDS)
EXTLOADER = $(SRC)/ext_loader
EXTSRCS = $(EXTLOADER)/vulkan_ext.c
extloader $(EXTSRCS): $(VKH_DEPENDS)
$(PYTHON) genvk.py -registry vk.xml -o $(EXTLOADER) vulkan_ext.c
################################################
@ -107,4 +107,4 @@ clean_dirt:
# Clean generated targets as well as intermediates.
clean clobber: clean_dirt
-rm -f $(HEADERS) $(PLATFORM_HEADERS) $(EXTSRCS)
-rm -f $(HEADERS) $(PLATFORM_HEADERS)

View File

@ -24,10 +24,8 @@ version of the API.
* Create a git branch to work in locally
* Edit `vk.xml`
* `make ; make test`
** This generates headers and source in `../include/vulkan` including
`vulkan_core.h`; a set of platform-dependent headers
`vulkan_<platform>.h`; and extension loader code in
`../src/ext_loader/vulkan_ext.[ch]`
** This generates headers in `../include/vulkan` including `vulkan_core.h`
and a set of platform-dependent headers `vulkan_<platform>.h`.
* `(cd .. && make generated)`
** This generates asciidoc includes for the spec. There are many ways to
invoke the Makefile in the spec directory; this simple recipe only
@ -61,6 +59,9 @@ processing XML.
* generator.py - output generator base class.
** cgenerator.py - C header output generator.
** docgenerator.py - Asciidoc interface language include generator.
** extensionmetadocgenerator.py - Generator for Asciidoc extension
descriptions in spec appendices.
** extensionStubSource.py - Simple loader C source generator. Unsupported.
** hostsyncgenerator.py - Asciidoc host sync table generator.
** pygenerator.py - Generates python encoding of the API description.
** validitygenerator.py - Asciidoc validity language generator.
@ -68,7 +69,6 @@ processing XML.
header.
* ../include/vulkan/vulkan_<platform>.h - Generated Vulkan platform API
headers.
* ../src/ext_loader/vulkan_ext.[ch] - Extension loader code
* indexExt.py - generate HTML index of all extensions for inclusion into
the Vulkan registry index page.
* extDependency.py - generate extension dependencies in Bash and Python
@ -87,6 +87,8 @@ processing XML.
* `clean_dirt` - remove intermediate files.
* `clean` - remove generated files. Usually done when preparing to merge
to `master` branch via ```make clean ; make install```.
* `extloader` - generate simple extension loader source code in
`../src/vulkan_ext/`. Unsupported.
If you have trouble running the Makefile on your platform, the following
steps will build `vulkan_core.h` and test that it compiles:
@ -135,14 +137,18 @@ Windows is:
[[history]]
== Revision History
* 2018/05/21 -
Don't generate vulkan_ext.[ch] from the `install` target. Add a new
shortcut `extloader` target for people still using this code and needing
to regenerate it.
* 2018/03/13 -
Update for new directory structure.
* 2018/03/06 -
Update for Vulkan 1.1 release and `master` branch.
* 2015/09/18 -
Split platform-specific headers into their own vulkan_<platform>.h files,
move vulkan.h to vulkan_core.h, and add a new (static) vulkan.h which
includes appropriate combinations of the other headers.
Split platform-specific headers into their own vulkan_<platform>.h
files, move vulkan.h to vulkan_core.h, and add a new (static) vulkan.h
which includes appropriate combinations of the other headers.
* 2015/06/01 -
The header that is generated has been improved relative to the first
version. Function arguments are indented like the hand-generated header,
@ -154,8 +160,8 @@ Windows is:
* 2015/06/02 -
Per WG signoff, converted hex constant values to decimal (for
non-bitmasks) and VK_BIT macros to 'bitpos' attributes in the XML and
hex constants in the header. Updated schema to match. Changed <ptype> tag
to <type>.
hex constants in the header. Updated schema to match. Changed <ptype>
tag to <type>.
* 2015/06/03 -
Moved into new 'vulkan' tree (did not bother preserving history in
previous repo). Added semantic knowledge about structs and unions to

View File

@ -19,6 +19,9 @@ from generator import *
doc = """
/*
** This target is no longer maintained and supported.
** See README.adoc for discussion.
**
** This is a simple extension loader which provides the implementations for the
** extension prototypes declared in vulkan header. It supports loading extensions either
** for a single instance or a single device. Multiple instances are not yet supported.

View File

@ -198,6 +198,8 @@ def makeGenOpts(args):
]
# Extension stub source dispatcher
# This target is no longer maintained and supported.
# See README.adoc for discussion.
genOpts['vulkan_ext.c'] = [
ExtensionStubSourceOutputGenerator,
CGeneratorOptions(

View File

@ -153,7 +153,7 @@ server.
<type category="define">// Vulkan 1.1 version number
#define <name>VK_API_VERSION_1_1</name> <type>VK_MAKE_VERSION</type>(1, 1, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 75</type>
#define <name>VK_HEADER_VERSION</name> 76</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -2544,6 +2544,32 @@ server.
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkSurfaceFormatKHR</type> <name>surfaceFormat</name></member>
</type>
<type category="struct" name="VkDisplayProperties2KHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkDisplayPropertiesKHR</type> <name>displayProperties</name></member>
</type>
<type category="struct" name="VkDisplayPlaneProperties2KHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkDisplayPlanePropertiesKHR</type> <name>displayPlaneProperties</name></member>
</type>
<type category="struct" name="VkDisplayModeProperties2KHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkDisplayModePropertiesKHR</type> <name>displayModeProperties</name></member>
</type>
<type category="struct" name="VkDisplayPlaneInfo2KHR">
<member values="VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member externsync="true"><type>VkDisplayModeKHR</type> <name>mode</name></member>
<member><type>uint32_t</type> <name>planeIndex</name></member>
</type>
<type category="struct" name="VkDisplayPlaneCapabilities2KHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkDisplayPlaneCapabilitiesKHR</type> <name>capabilities</name></member>
</type>
<type category="struct" name="VkSharedPresentSurfaceCapabilitiesKHR" returnedonly="true" structextends="VkSurfaceCapabilities2KHR">
<member values="VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
@ -5837,6 +5863,31 @@ server.
<param optional="false,true"><type>uint32_t</type>* <name>pSurfaceFormatCount</name></param>
<param optional="true" len="pSurfaceFormatCount"><type>VkSurfaceFormat2KHR</type>* <name>pSurfaceFormats</name></param>
</command>
<command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<proto><type>VkResult</type> <name>vkGetPhysicalDeviceDisplayProperties2KHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
<param optional="true" len="pPropertyCount"><type>VkDisplayProperties2KHR</type>* <name>pProperties</name></param>
</command>
<command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<proto><type>VkResult</type> <name>vkGetPhysicalDeviceDisplayPlaneProperties2KHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
<param optional="true" len="pPropertyCount"><type>VkDisplayPlaneProperties2KHR</type>* <name>pProperties</name></param>
</command>
<command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<proto><type>VkResult</type> <name>vkGetDisplayModeProperties2KHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param><type>VkDisplayKHR</type> <name>display</name></param>
<param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
<param optional="true" len="pPropertyCount"><type>VkDisplayModeProperties2KHR</type>* <name>pProperties</name></param>
</command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<proto><type>VkResult</type> <name>vkGetDisplayPlaneCapabilities2KHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param>const <type>VkDisplayPlaneInfo2KHR</type>* <name>pDisplayPlaneInfo</name></param>
<param><type>VkDisplayPlaneCapabilities2KHR</type>* <name>pCapabilities</name></param>
</command>
<command>
<proto><type>void</type> <name>vkGetBufferMemoryRequirements2</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
@ -6031,6 +6082,26 @@ server.
<param>const <type>VkMemoryGetAndroidHardwareBufferInfoANDROID</type>* <name>pInfo</name></param>
<param>struct <type>AHardwareBuffer</type>** <name>pBuffer</name></param>
</command>
<command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
<proto><type>void</type> <name>vkCmdDrawIndirectCountKHR</name></proto>
<param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
<param><type>VkBuffer</type> <name>buffer</name></param>
<param><type>VkDeviceSize</type> <name>offset</name></param>
<param><type>VkBuffer</type> <name>countBuffer</name></param>
<param><type>VkDeviceSize</type> <name>countBufferOffset</name></param>
<param><type>uint32_t</type> <name>maxDrawCount</name></param>
<param><type>uint32_t</type> <name>stride</name></param>
</command>
<command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
<proto><type>void</type> <name>vkCmdDrawIndexedIndirectCountKHR</name></proto>
<param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
<param><type>VkBuffer</type> <name>buffer</name></param>
<param><type>VkDeviceSize</type> <name>offset</name></param>
<param><type>VkBuffer</type> <name>countBuffer</name></param>
<param><type>VkDeviceSize</type> <name>countBufferOffset</name></param>
<param><type>uint32_t</type> <name>maxDrawCount</name></param>
<param><type>uint32_t</type> <name>stride</name></param>
</command>
</commands>
<feature api="vulkan" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions">
@ -7913,10 +7984,24 @@ server.
<type name="VkPhysicalDeviceVariablePointerFeaturesKHR"/>
</require>
</extension>
<extension name="VK_KHR_extension_122" number="122" author="KHR" contact="James Jones @cubanismo" supported="disabled">
<extension name="VK_KHR_get_display_properties2" number="122" type="instance" requires="VK_KHR_display" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
<require>
<enum value="0" name="VK_KHR_EXTENSION_122_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_122&quot;" name="VK_KHR_EXTENSION_122_EXTENSION_NAME"/>
<enum value="1" name="VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_get_display_properties2&quot;" name="VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR"/>
<enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR"/>
<enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR"/>
<type name="VkDisplayProperties2KHR"/>
<type name="VkDisplayPlaneProperties2KHR"/>
<type name="VkDisplayModeProperties2KHR"/>
<type name="VkDisplayPlaneInfo2KHR"/>
<type name="VkDisplayPlaneCapabilities2KHR"/>
<command name="vkGetPhysicalDeviceDisplayProperties2KHR"/>
<command name="vkGetPhysicalDeviceDisplayPlaneProperties2KHR"/>
<command name="vkGetDisplayModeProperties2KHR"/>
<command name="vkGetDisplayPlaneCapabilities2KHR"/>
</require>
</extension>
<extension name="VK_MVK_ios_surface" number="123" type="instance" requires="VK_KHR_surface" platform="ios" supported="vulkan" author="MVK" contact="Bill Hollings @billhollings">
@ -8463,10 +8548,12 @@ server.
<command name="vkGetDescriptorSetLayoutSupportKHR"/>
</require>
</extension>
<extension name="VK_EXT_extension_170" number="170" author="NV" contact="Piers Daniell @pdaniell-nv" supported="disabled">
<extension name="VK_KHR_draw_indirect_count" number="170" type="device" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
<require>
<enum value="0" name="VK_EXT_EXTENSION_170_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_extension_170&quot;" name="VK_EXT_EXTENSION_170_EXTENSION_NAME"/>
<enum value="1" name="VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_draw_indirect_count&quot;" name="VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME"/>
<command name="vkCmdDrawIndirectCountKHR"/>
<command name="vkCmdDrawIndexedIndirectCountKHR"/>
</require>
</extension>
<extension name="VK_QCOM_extension_171" number="171" author="QCOM" contact="Bill Licea-Kane @wwlk" supported="disabled">