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:
parent
fae3873128
commit
ee13fc355f
2
Makefile
2
Makefile
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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.
|
|
@ -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[]
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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>>
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
@ -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
|
14
xml/Makefile
14
xml/Makefile
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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(
|
||||
|
|
101
xml/vk.xml
101
xml/vk.xml
|
@ -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=""VK_KHR_extension_122"" name="VK_KHR_EXTENSION_122_EXTENSION_NAME"/>
|
||||
<enum value="1" name="VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION"/>
|
||||
<enum value=""VK_KHR_get_display_properties2"" 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=""VK_EXT_extension_170"" name="VK_EXT_EXTENSION_170_EXTENSION_NAME"/>
|
||||
<enum value="1" name="VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION"/>
|
||||
<enum value=""VK_KHR_draw_indirect_count"" 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">
|
||||
|
|
Loading…
Reference in New Issue