Merge branch '1.0' into 1.0-VK_KHR_xlib_surface

This commit is contained in:
Jon Leech 2016-08-05 05:21:08 -07:00
commit 1a0e1d20a4
41 changed files with 750 additions and 377 deletions

View File

@ -33,8 +33,8 @@ Status
Version Version
Last Modified Date: 20-Jul-2016 Last Modified Date: 1-Aug-2016
Revision: 31 Revision: 32
Number Number
@ -62,7 +62,7 @@ Overview
The following features are removed: The following features are removed:
* default uniforms (uniform variables not inside a uniform block), * default uniforms (uniform variables not inside a uniform block),
except for opaque types except for opaque types
* atomic-counter bindings: atomic counters form a one-dimensional space * atomic-counters (those based on atomic_uint)
* subroutines * subroutines
* shared and packed block layouts * shared and packed block layouts
* the already deprecated texturing functions (e.g., texture2D()) * the already deprecated texturing functions (e.g., texture2D())
@ -219,7 +219,7 @@ Overview
The constant_id can only be applied to a scalar *int*, a scalar *float* The constant_id can only be applied to a scalar *int*, a scalar *float*
or a scalar *bool*. or a scalar *bool*.
Only basic operators and constructors can be applied to a specialization Only basic operators and constructors can be applied to a specialization
constant and still result in a specialization constant: constant and still result in a specialization constant:
@ -324,7 +324,7 @@ Overview
in / out variable -> Input/Output, possibly with block (below) in / out variable -> Input/Output, possibly with block (below)
in / out block... -> Input/Output, with Block decoration in / out block... -> Input/Output, with Block decoration
buffer blockN { ... } ...; -> Uniform, with BufferBlock decoration buffer blockN { ... } ...; -> Uniform, with BufferBlock decoration
... uniform atomic_uint ... -> AtomicCounter N/A -> AtomicCounter
shared -> Workgroup shared -> Workgroup
<normal global> -> Private <normal global> -> Private
@ -417,7 +417,7 @@ Overview
Mapping of layouts Mapping of layouts
std140/std430 -> explicit offsets/strides on struct std140/std430 -> explicit offsets/strides on struct
shared/packed -> not allowed shared/packed -> not allowed
<default> -> not shared, but std140 or std430 <default> -> not shared, but std140 or std430
max_vertices -> OutputVertices max_vertices -> OutputVertices
@ -426,13 +426,13 @@ Overview
% -> OpUMod/OpSMod % -> OpUMod/OpSMod
mod() -> OpFMod mod() -> OpFMod
NA -> OpSRem/OpFRem N/A -> OpSRem/OpFRem
atomicExchange() -> OpAtomicExchange atomicExchange() -> OpAtomicExchange
imageAtomicExchange() -> OpAtomicExchange imageAtomicExchange() -> OpAtomicExchange
atomicCompSwap() -> OpAtomicCompareExchange atomicCompSwap() -> OpAtomicCompareExchange
imageAtomicCompSwap() -> OpAtomicCompareExchange imageAtomicCompSwap() -> OpAtomicCompareExchange
NA -> OpAtomicCompareExchangeWeak N/A -> OpAtomicCompareExchangeWeak
Changes to Chapter 1 of the OpenGL Shading Language Specification Changes to Chapter 1 of the OpenGL Shading Language Specification
@ -442,7 +442,7 @@ Changes to Chapter 1 of the OpenGL Shading Language Specification
Add a paragraph: "The Vulkan API will specify the Vulkan entry points used Add a paragraph: "The Vulkan API will specify the Vulkan entry points used
to manipulate SPIR-V shaders. Independent offline tool chains will compile to manipulate SPIR-V shaders. Independent offline tool chains will compile
GLSL down to the SPIR-V intermediate language. Vulkan use is not enabled GLSL down to the SPIR-V intermediate language. Vulkan use is not enabled
with a #extension, #version, or a profile. Instead, use of GLSL for Vulkan with a #extension, #version, or a profile. Instead, use of GLSL for Vulkan
is determined by offline tool-chain use. See the documentation of such is determined by offline tool-chain use. See the documentation of such
tools to see how to request generation of SPIR-V for Vulkan." tools to see how to request generation of SPIR-V for Vulkan."
@ -480,7 +480,7 @@ Changes to Chapter 3 of the OpenGL Shading Language Specification
textureCube texture2DRect texture1DArray textureCube texture2DRect texture1DArray
texture2DArray textureBuffer texture2DMS texture2DArray textureBuffer texture2DMS
texture2DMSArray textureCubeArray texture2DMSArray textureCubeArray
itexture1D itexture2D itexture3D itexture1D itexture2D itexture3D
itextureCube itexture2DRect itexture1DArray itextureCube itexture2DRect itexture1DArray
itexture2DArray itextureBuffer itexture2DArray itextureBuffer
@ -497,10 +497,17 @@ Changes to Chapter 3 of the OpenGL Shading Language Specification
subpassInput isubpassInput usubpassInput subpassInput isubpassInput usubpassInput
subpassInputMS isubpassInputMS usubpassInputMS subpassInputMS isubpassInputMS usubpassInputMS
Move the following keywords in section 3.6 Keywords to the reserved
section:
atomic_uint
subroutine
Changes to Chapter 4 of the OpenGL Shading Language Specification Changes to Chapter 4 of the OpenGL Shading Language Specification
Add into the tables in section 4.1, interleaved with the existing types, Add into the tables in section 4.1 Basic Types, interleaved with the
using the existing descriptions (when not supplied below): existing types, using the existing descriptions (when not supplied
below):
Floating-Point Opaque Types Floating-Point Opaque Types
@ -555,6 +562,10 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
usubpassInputMS | a handle for accessing a multi-sampled unsigned usubpassInputMS | a handle for accessing a multi-sampled unsigned
| integer subpass input | integer subpass input
Remove the entry from the table in section 4.1 Basic Types:
atomic_uint
Add a new category in this section Add a new category in this section
"Sampler Opaque Types "Sampler Opaque Types
@ -590,7 +601,7 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
and unsigned integer data types. Textures can be combined with a and unsigned integer data types. Textures can be combined with a
variable of type *sampler* or *samplerShadow* to create a sampler type variable of type *sampler* or *samplerShadow* to create a sampler type
(e.g., sampler2D, or sampler2DShadow). This is done with a constructor, (e.g., sampler2D, or sampler2DShadow). This is done with a constructor,
e.g., sampler2D(texture2D, sampler) or e.g., sampler2D(texture2D, sampler) or
sampler2DShadow(texture2D, samplerShadow), sampler2DShadow(texture2D, samplerShadow),
and is described in more detail in section 5.4 "Constructors"." and is described in more detail in section 5.4 "Constructors"."
@ -608,11 +619,7 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
"Subpass input types are only available in fragment shaders. It is a "Subpass input types are only available in fragment shaders. It is a
compile-time error to use them in any other stage." compile-time error to use them in any other stage."
Add to section 4.1.7.3 Atomic Counters: Remove the section 4.1.7.3 Atomic Counters
"It is an error to declare an atomic type with a different precision or
to specify the default precision for an atomic type to be lowp or
mediump."
Change section 4.3.3 Constant Expressions: Change section 4.3.3 Constant Expressions:
@ -723,14 +730,14 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
returned for the lowerleft-most pixel in a window. The origin can be returned for the lowerleft-most pixel in a window. The origin can be
changed by redeclaring gl_FragCoord with the changed by redeclaring gl_FragCoord with the
origin_upper_left identifier." origin_upper_left identifier."
To To
"The gl_FragCoord built-in variable assumes an upper-left origin for "The gl_FragCoord built-in variable assumes an upper-left origin for
window coordinates ... For example, the (x, y) location (0.5, 0.5) is window coordinates ... For example, the (x, y) location (0.5, 0.5) is
returned for the upper-left-most pixel in a window. The origin can be returned for the upper-left-most pixel in a window. The origin can be
explicitly set by redeclaring gl_FragCoord with the origin_upper_left explicitly set by redeclaring gl_FragCoord with the origin_upper_left
identifier. It is a compile-time error to change it to identifier. It is a compile-time error to change it to
origin_lower_left." origin_lower_left."
Add to the end of section 4.4.3 Uniform Variable Layout Qualifiers: Add to the end of section 4.4.3 Uniform Variable Layout Qualifiers:
@ -765,6 +772,9 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
"It is a compile-time error for either the /set/ or /binding/ value "It is a compile-time error for either the /set/ or /binding/ value
to exceed a front-end-configuration supplied maximum value." to exceed a front-end-configuration supplied maximum value."
Remove mention of subroutine throughout section 4.4 Layout Qualifiers,
including removal of section 4.4.4 Subroutine Function Layout Qualifiers.
Change section 4.4.6 Opaque-Uniform Layout Qualifiers: Change section 4.4.6 Opaque-Uniform Layout Qualifiers:
Change Change
@ -779,6 +789,8 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
takes just the provided binding number. The next consecutive binding takes just the provided binding number. The next consecutive binding
number is available for a different object." number is available for a different object."
Remove section 4.4.6.1 Atomic Counter Layout Qualifiers
Add a new subsection at the end of section 4.4: Add a new subsection at the end of section 4.4:
"4.4.x Specialization-Constant Qualifier "4.4.x Specialization-Constant Qualifier
@ -809,22 +821,22 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
"The built-in constant vector gl_WorkGroupSize can be specialized using "The built-in constant vector gl_WorkGroupSize can be specialized using
the local_size_{xyz}_id qualifiers, to individually give the components the local_size_{xyz}_id qualifiers, to individually give the components
an id. For example: an id. For example:
layout(local_size_x_id = 18, local_size_z_id = 19) in; layout(local_size_x_id = 18, local_size_z_id = 19) in;
"This leaves gl_WorkGroupSize.y as a non-specialization constant, with "This leaves gl_WorkGroupSize.y as a non-specialization constant, with
gl_WorkGroupSize being a partially specialized vector. Its x and z gl_WorkGroupSize being a partially specialized vector. Its x and z
components can be later specialized using the ids 18 and 19. These ids components can be later specialized using the ids 18 and 19. These ids
are declared independently from declaring the work-group size: are declared independently from declaring the work-group size:
layout(local_size_x = 32, local_size_y = 32) in; // size is (32,32,1) layout(local_size_x = 32, local_size_y = 32) in; // size is (32,32,1)
layout(local_size_x_id = 18) in; // constant_id for x layout(local_size_x_id = 18) in; // constant_id for x
layout(local_size_z_id = 19) in; // constant_id for z layout(local_size_z_id = 19) in; // constant_id for z
"Existing rules for declaring local_size_x, local_size_y, and "Existing rules for declaring local_size_x, local_size_y, and
local_size_z are not changed by this extension. For the local-size ids, local_size_z are not changed by this extension. For the local-size ids,
it is a compile-time error to provide different id values for the same it is a compile-time error to provide different id values for the same
local-size id, or to provide them after any use. Otherwise, order, local-size id, or to provide them after any use. Otherwise, order,
placement, number of statements, and replication do not cause errors. placement, number of statements, and replication do not cause errors.
"Two arrays sized with specialization constants are the same type only if "Two arrays sized with specialization constants are the same type only if
@ -871,7 +883,7 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
in the implicit input_attachment_index consumed by array declarations. in the implicit input_attachment_index consumed by array declarations.
"It is a compile-time error if the value assigned to an "It is a compile-time error if the value assigned to an
input_attachment_index is greater than or equal to input_attachment_index is greater than or equal to
gl_MaxInputAttachments." gl_MaxInputAttachments."
Remove all mention of the 'shared' and 'packed' layout qualifiers. Remove all mention of the 'shared' and 'packed' layout qualifiers.
@ -1023,6 +1035,11 @@ Changes to Chapter 5 of the OpenGL Shading Language Specification
* logical operations ( && , || , ^^ ) * logical operations ( && , || , ^^ )
* comparison ( == , != ) * comparison ( == , != )
Changes to Chapter 6 of the OpenGL Shading Language Specification
Remove mention of subroutine throughout, including removal of
section 6.1.2 Subroutines.
Changes to Chapter 7 of the OpenGL Shading Language Specification Changes to Chapter 7 of the OpenGL Shading Language Specification
Changes to section 7.1 Built-In Language Variables Changes to section 7.1 Built-In Language Variables
@ -1100,11 +1117,10 @@ Changes to Chapter 8 of the OpenGL Shading Language Specification
- For prototypes that do specify a resulting precision qualifier, - For prototypes that do specify a resulting precision qualifier,
the specified precision qualifier is the precision qualification of the specified precision qualifier is the precision qualification of
the result." the result."
Add precision qualifiers to the following in desktop versions: Add precision qualifiers to the following in desktop versions:
genIType floatBitsToInt (highp genFType value) genIType floatBitsToInt (highp genFType value)
genUType floatBitsToUint(highp genFType value) genUType floatBitsToUint(highp genFType value)
genFType intBitsToFloat (highp genIType value) genFType intBitsToFloat (highp genIType value)
@ -1134,6 +1150,8 @@ Changes to Chapter 8 of the OpenGL Shading Language Specification
void imulExtended(highp genIType x, highp genIType y, void imulExtended(highp genIType x, highp genIType y,
out highp genIType msb, out highp genIType lsb) out highp genIType msb, out highp genIType lsb)
Remove section 8.10 Atomic-Counter Functions
Add a section Add a section
"8.X Subpass Functions "8.X Subpass Functions
@ -1161,7 +1179,7 @@ Changes to the grammar
| LEFT_BRACKET constant_expression RIGHT_BRACKET | LEFT_BRACKET constant_expression RIGHT_BRACKET
to to
| LEFT_BRACKET conditional_expression RIGHT_BRACKET | LEFT_BRACKET conditional_expression RIGHT_BRACKET
@ -1169,10 +1187,14 @@ Changes to the grammar
| array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET | array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET
to to
| array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET | array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET
Remove the ATOMIC_UINT type_specifier_nonarray.
Remove all instances of the SUBROUTINE keyword.
Issues Issues
1. Can we have specialization sizes in an array in a block? That prevents 1. Can we have specialization sizes in an array in a block? That prevents
@ -1286,6 +1308,7 @@ Revision History
Rev. Date Author Changes Rev. Date Author Changes
---- ----------- ------- -------------------------------------------- ---- ----------- ------- --------------------------------------------
32 1-Aug-2016 JohnK Remove atomic_uint and more fully subroutine
31 20-Jul-2016 JohnK Have desktop versions respect mediump/lowp 31 20-Jul-2016 JohnK Have desktop versions respect mediump/lowp
30 12-Apr-2016 JohnK Restrict spec-const operations to non-float 30 12-Apr-2016 JohnK Restrict spec-const operations to non-float
29 5-Apr-2016 JohnK Clarify disallowance of spec-const arrays in 29 5-Apr-2016 JohnK Clarify disallowance of spec-const arrays in

View File

@ -134,7 +134,7 @@ GENDEPENDS = api/timeMarker validity/timeMarker hostsynctable/timeMarker
COMMONDOCS = $(CHAPTERS) $(GENINCLUDE) $(GENDEPENDS) COMMONDOCS = $(CHAPTERS) $(GENINCLUDE) $(GENDEPENDS)
# A generated included file with the spec version, date, and git commit # A generated included file with the spec version, date, and git commit
SPECVERSION = specversion.txt SPECVERSION = specversion.txt
SPECREVISION = 1.0.22 SPECREVISION = 1.0.23
SPECREMARK = SPECREMARK =
# Spec targets # Spec targets

View File

@ -8,6 +8,6 @@ ifdef::doctype-manpage[]
endif::doctype-manpage[] endif::doctype-manpage[]
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
// Version of this file // Version of this file
#define VK_HEADER_VERSION 22 #define VK_HEADER_VERSION 23
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

View File

@ -225,3 +225,90 @@ handle. It may be passed to and returned from Vulkan commands only when
include::../api/defines/VK_NULL_HANDLE.txt[] include::../api/defines/VK_NULL_HANDLE.txt[]
// refEnd VK_NULL_HANDLE // refEnd VK_NULL_HANDLE
[[boilerplate-platform-macros]]
== Platform-Specific Macro Definitions in +vk_platform.h+
In addition to the macros described for +vulkan.h+, platform-specific macros
specified and used in the included +vk_platform.h+ file are described in
this section. These macros are specifically used to control
platform-dependent behavior and their exact definitions are under the
control of specific platforms and Vulkan implementations.
=== Platform-Specific Calling Conventions
// @refBegin VKAPI_ATTR - Vulkan function attributes
dname:VKAPI_ATTR is a macro placed before the return type in Vulkan API
function declarations. If not empty, the interpretation of this macro
depends on the platform and compiler in use, but normally controls calling
conventions for C++11 and GCC/Clang-style compilers.
// @refEnd VKAPI_ATTR VKAPI_CALL VKAPI_PTR
// @refBegin VKAPI_CALL - Vulkan function calling conventions
dname:VKAPI_CALL is a macro placed after the return type in Vulkan API
function declarations. If not empty, the interpretation of this macro
depends on the platform and compiler in use, but normally controls calling
conventions for MSVC-style compilers.
// @refEnd VKAPI_CALL VKAPI_ATTR VKAPI_PTR
// @refBegin VKAPI_PTR - Vulkan function pointer calling conventions
dname:VKAPI_PTR is a macro placed between the '(' and '*' in Vulkan API
function pointer declarations. If not empty, the interpretation of this
macro depends on the platform and compiler in use, and normally controls
calling conventions. dname:VKAPI_PTR typically has the same definition as
dname:VKAPI_ATTR or dname:VKAPI_CALL, depending on the compiler.
// @refEnd VKAPI_PTR VKAPI_ATTR VKAPI_CALL
=== Platform-Specific Header Control
// @refBegin VK_NO_STDINT_H - control definition of +<stdint.h>+ types
If the +VK_NO_STDINT_H+ macro is defined at compile time, it indicates that
the system +<stdint.h>+ does not define some required integer types, and
+vk_platform.h+ will declare fallback definitions of those types. This is
included for backwards compatibility with very old compilers, such as
Microsoft Visual Studio version 2008 or before.
// @refEnd VK_NO_STDINT_H
=== Window System-Specific Header Control
// @refBegin WSIheaders - control inclusion of window system interface extensions
When using different window systems with Khronos extensions, header files
for those window systems must: be included at compile time in order for the
corresponding extension definitions to compile. The Vulkan header files
cannot determine whether or not an external header is available at compile
time, so applications must: include macros enabling those headers. If this is
not done, the corresponding extension interfaces will not be defined and
they will be unusable.
The extensions, required compile-time symbols to enable them, and window
systems they correspond to are defined in the
<<boilerplate-wsi-header-table,following table>>.
[[boilerplate-wsi-header-table]]
.Window System Extensions and Required Compile-Time Symbol Definitions
[options="header"]
|====
| Extension Name | Required Compile-Time Symbol | Window System Name
| +VK_KHR_xlib_surface+ | +VK_USE_PLATFORM_XLIB_KHR+ | X11 Xlib library
| +VK_KHR_xcb_surface+ | +VK_USE_PLATFORM_XCB_KHR+ | X11 Xcb library
| +VK_KHR_wayland_surface+ | +VK_USE_PLATFORM_WAYLAND_KHR+ | Wayland
| +VK_KHR_mir_surface+ | +VK_USE_PLATFORM_MIR_KHR+ | Mir
| +VK_KHR_android_surface+ | +VK_USE_PLATFORM_ANDROID_KHR+ | Android Native
| +VK_KHR_win32_surface+ | +VK_USE_PLATFORM_WIN32_KHR+ | Windows Win32
|====
// @refEnd WSIheaders

View File

@ -22,5 +22,5 @@ specific Vulkan extensions and layers, but rather specifies the processes by
which extensions and layers are created. As of version 1.0.21 of the Vulkan which extensions and layers are created. As of version 1.0.21 of the Vulkan
Specification, this content has been migrated to the <<vulkan-styleguide, Specification, this content has been migrated to the <<vulkan-styleguide,
Vulkan Documentation and Extensions>> Vulkan Documentation and Extensions>>
document. Authors creating extensions and layers must follow the mandatory document. Authors creating extensions and layers must: follow the mandatory
procedures in that document. procedures in that document.

View File

@ -471,7 +471,7 @@ Memory Dependency::
A sequence of operations that makes writes available, performs an A sequence of operations that makes writes available, performs an
execution dependency between the writes and subsequent accesses, and execution dependency between the writes and subsequent accesses, and
makes available writes visible to later accesses. In order for the makes available writes visible to later accesses. In order for the
effects of a write to be coherent with later accesses, it must be made effects of a write to be coherent with later accesses, it must: be made
available from the old access type and then made visible to the new available from the old access type and then made visible to the new
access type. access type.
@ -484,7 +484,7 @@ Memory Type::
Mip Tail Region:: Mip Tail Region::
The set of mipmap levels of a sparse residency texture that are too The set of mipmap levels of a sparse residency texture that are too
small to fill a sparse block, and that must all be bound to memory small to fill a sparse block, and that must: all be bound to memory
collectively and opaquely. collectively and opaquely.
Non-Dispatchable Handle:: Non-Dispatchable Handle::

View File

@ -92,7 +92,7 @@ A SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
following rules: following rules:
* Every entry point must: have no return value and accept no arguments. * Every entry point must: have no return value and accept no arguments.
* Recursion: The static function-call graph for an entry point must not contain cycles. * Recursion: The static function-call graph for an entry point mustnot: contain cycles.
* The *Logical* addressing model must: be selected. * The *Logical* addressing model must: be selected.
* *Scope* for execution must: be limited to: * *Scope* for execution must: be limited to:
** *Workgroup* ** *Workgroup*

View File

@ -100,7 +100,7 @@ include::../api/protos/vkCreateCommandPool.txt[]
* pname:pCreateInfo contains information used to create the command pool. * pname:pCreateInfo contains information used to create the command pool.
* pname:pAllocator controls host memory allocation as described in the * pname:pAllocator controls host memory allocation as described in the
<<memory-allocation, Memory Allocation>> chapter. <<memory-allocation, Memory Allocation>> chapter.
* pname:pCommandPool points to an sname:VkCommandPool handle in which the * pname:pCommandPool points to a sname:VkCommandPool handle in which the
created pool is returned. created pool is returned.
include::../validity/protos/vkCreateCommandPool.txt[] include::../validity/protos/vkCreateCommandPool.txt[]

View File

@ -282,7 +282,7 @@ include::../api/structs/VkBufferImageCopy.txt[]
in buffer memory. If either of these values is zero, that aspect of the in buffer memory. If either of these values is zero, that aspect of the
buffer memory is considered to be tightly packed according to the buffer memory is considered to be tightly packed according to the
pname:imageExtent. pname:imageExtent.
* pname:imageSubresource is an slink:VkImageSubresourceLayers used to * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
specify the specific image subresources of the image used for the source specify the specific image subresources of the image used for the source
or destination image data. or destination image data.
* pname:imageOffset selects the initial x, y, z offsets in texels of the * pname:imageOffset selects the initial x, y, z offsets in texels of the

View File

@ -598,7 +598,7 @@ include::../api/structs/VkDescriptorSetLayoutBinding.txt[]
* pname:binding is the binding number of this entry and corresponds * pname:binding is the binding number of this entry and corresponds
to a resource of the same binding number in the shader stages. to a resource of the same binding number in the shader stages.
* pname:descriptorType is an elink:VkDescriptorType specifying which type * pname:descriptorType is a elink:VkDescriptorType specifying which type
of resource descriptors are used for this binding. of resource descriptors are used for this binding.
* pname:descriptorCount is the number of descriptors contained in the * pname:descriptorCount is the number of descriptors contained in the
binding, accessed in a shader as an array. If pname:descriptorCount is binding, accessed in a shader as an array. If pname:descriptorCount is
@ -1228,7 +1228,7 @@ behavior. This means applications need not populate unused entries with dummy
descriptors. descriptors.
If an allocation fails due to fragmentation, an indeterminate error is If an allocation fails due to fragmentation, an indeterminate error is
returned with an unspecified error code. Any returned error other than returned with an unspecified error code. Any returned error other than
ename:VK_ERROR_FRAGMENTED_POOL does not imply its usual meaning: ename:VK_ERROR_FRAGMENTED_POOL does not imply its usual meaning:
applications should: assume that the allocation failed due to fragmentation, applications should: assume that the allocation failed due to fragmentation,
and create a new descriptor pool. and create a new descriptor pool.

View File

@ -24,6 +24,8 @@ include::../api/structs/VkPipelineInputAssemblyStateCreateInfo.txt[]
* pname:sType is the type of this structure. * pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is reserved for future use. * pname:flags is reserved for future use.
* pname:topology is a elink:VkPrimitiveTopology defining the primitive
topology, as described below.
* pname:primitiveRestartEnable controls whether a special vertex index * pname:primitiveRestartEnable controls whether a special vertex index
value is treated as restarting the assembly of primitives. This enable value is treated as restarting the assembly of primitives. This enable
only applies to indexed draws (flink:vkCmdDrawIndexed and only applies to indexed draws (flink:vkCmdDrawIndexed and
@ -32,8 +34,6 @@ include::../api/structs/VkPipelineInputAssemblyStateCreateInfo.txt[]
fname:vkCmdBindIndexBuffer is equal to ename:VK_INDEX_TYPE_UINT32, or fname:vkCmdBindIndexBuffer is equal to ename:VK_INDEX_TYPE_UINT32, or
0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16. 0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16.
Primitive restart is not allowed for ``list'' topologies. Primitive restart is not allowed for ``list'' topologies.
* pname:topology is a elink:VkPrimitiveTopology defining the primitive
topology, as described below.
Restarting the assembly of primitives discards the most recent index values Restarting the assembly of primitives discards the most recent index values
if those elements formed an incomplete primitive, and restarts the primitive if those elements formed an incomplete primitive, and restarts the primitive

View File

@ -14,7 +14,7 @@ or any of its child objects.
Extensions can operate at either the instance or device scope. Enabled instance Extensions can operate at either the instance or device scope. Enabled instance
extensions are able to affect the operation of the instance and any of its extensions are able to affect the operation of the instance and any of its
child objects, while device extensions may: only be available on a subset of child objects, while device extensions may: only be available on a subset of
physical devices, must be individually enabled per-device, and only affect the physical devices, must: be individually enabled per-device, and only affect the
operation of the devices where they are enabled. operation of the devices where they are enabled.
Examples of these might be: Examples of these might be:

View File

@ -89,21 +89,66 @@ The members of the sname:VkPhysicalDeviceFeatures structure describe the
following features: following features:
* [[features-features-robustBufferAccess]] pname:robustBufferAccess * [[features-features-robustBufferAccess]] pname:robustBufferAccess
indicates that out of bounds accesses to buffers via shader operations indicates that accesses to buffers are bounds-checked against the range of
are well-defined. the buffer descriptor (as determined by
** When enabled, out-of-bounds buffer reads will return any of the sname:VkDescriptorBufferInfo::pname:range,
following values: sname:VkBufferViewCreateInfo::pname:range, or the size of the buffer). Out
*** Values from anywhere within the buffer object. of bounds accesses mustnot: cause application termination, and the effects
of shader loads, stores, and atomics must: conform to an
implementation-dependent behavior as described below.
** A buffer access is considered to be out of bounds if any of the following
are true:
*** The pointer was formed by code:OpImageTexelPointer and the coordinate is
less than zero or greater than or equal to the number of whole elements
in the bound range.
*** The pointer was not formed by code:OpImageTexelPointer and the object
pointed to is not wholly contained within the bound range.
+
--
[NOTE]
.Note
====
If a SPIR-V code:OpLoad instruction loads a structure and the tail end of the
structure is out of bounds, then all members of the structure are considered
out of bounds even if the members at the end are not statically used.
====
--
+
*** If any buffer access in a given SPIR-V block is determined to be
out of bounds, then any other access of the same type (load, store, or
atomic) in the same SPIR-V block that accesses an address less
than 16 bytes away from the out of bounds address may: also be
considered out of bounds.
** Out-of-bounds buffer loads will return any of the following values:
*** Values from anywhere within the memory range(s) bound to the buffer
(possibly including bytes of memory past the end of the buffer, up to
the end of the bound range).
*** Zero values, or (0,0,0,x) vectors for vector reads where x is a valid *** Zero values, or (0,0,0,x) vectors for vector reads where x is a valid
value represented in the type of the vector components and may: be any value represented in the type of the vector components and may: be any
of: of:
**** 0, 1, or the maximum representable positive integer value, for signed **** 0, 1, or the maximum representable positive integer value, for signed
or unsigned integer components or unsigned integer components
**** 0.0 or 1.0, for floating-point components **** 0.0 or 1.0, for floating-point components
** When enabled, out-of-bounds writes may: modify values within the buffer ** Out-of-bounds writes may: modify values within the memory range(s) bound
object or be ignored. to the buffer, but mustnot: modify any other memory.
** If not enabled, out of bounds accesses may: cause undefined behaviour ** Out-of-bounds atomics may: modify values within the memory range(s) bound
up-to and including process termination. to the buffer, but mustnot: modify any other memory, and return an
undefined value.
** Vertex input attributes are considered out of bounds if the address of the
attribute plus the size of the attribute is greater than the size of the
bound buffer. Further, if any vertex input attribute using a specific
vertex input binding is out of bounds, then all vertex input attributes
using that vertex input binding for that vertex shader invocation are
considered out of bounds.
*** If a vertex input attribute is out of bounds, it will be assigned one
of the following values:
**** Values from anywhere within the memory range(s) bound to the buffer,
converted according to the format of the attribute.
**** Zero values, format converted according to the format of the attribute.
**** Zero values, or (0,0,0,x) vectors, as described above.
** If pname:robustBufferAccess is not enabled, out of bounds accesses may:
corrupt any memory within the process and cause undefined behaviour up
to and including application termination.
* [[features-features-fullDrawIndexUint32]] pname:fullDrawIndexUint32 * [[features-features-fullDrawIndexUint32]] pname:fullDrawIndexUint32
indicates the full 32-bit range of indices is supported for indexed draw indicates the full 32-bit range of indices is supported for indexed draw
calls when using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32. calls when using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32.

View File

@ -19,7 +19,7 @@ command:
include::../api/protos/vkGetInstanceProcAddr.txt[] include::../api/protos/vkGetInstanceProcAddr.txt[]
* pname:instance is the instance that the function pointer will be * pname:instance is the instance that the function pointer will be
compatible with. compatible with, or `NULL` for commands not dependent on any instance.
* pname:pName is the name of the command to obtain. * pname:pName is the name of the command to obtain.
fname:vkGetInstanceProcAddr itself is obtained in a platform- and loader- fname:vkGetInstanceProcAddr itself is obtained in a platform- and loader-
@ -30,25 +30,36 @@ Loaders are encouraged to export function symbols for all other core
Vulkan commands as well; if this is done, then applications that use only Vulkan commands as well; if this is done, then applications that use only
the core Vulkan commands have no need to use fname:vkGetInstanceProcAddr. the core Vulkan commands have no need to use fname:vkGetInstanceProcAddr.
Function pointers to commands that do not operate on a specific instance can: The table below defines the various use cases for fname:vkGetInstanceProcAddr
be obtained by using this command with pname:instance equal to `NULL`. The and expected return value ("fp" is function pointer) for each case.
following commands can: be accessed this way:
* flink:vkEnumerateInstanceExtensionProperties
* flink:vkEnumerateInstanceLayerProperties
* flink:vkCreateInstance
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
be cast to the type of the command being queried. be cast to the type of the command being queried.
If pname:instance is a valid sname:VkInstance, function pointers to any .vkGetInstanceProcAddr behavior
commands that operate on pname:instance or a child of pname:instance can: be [width="80%",options="header",align="center"]
obtained. The returned function pointer must: only be called with a |=====
dispatchable object (the first parameter) that is a child of pname:instance. | pname:instance | pname:pName | return value
| * | NULL | undefined
| invalid instance | * | undefined
| NULL | flink:vkEnumerateInstanceExtensionProperties | fp
| NULL | flink:vkEnumerateInstanceLayerProperties | fp
| NULL | flink:vkCreateInstance | fp
| NULL | * (any pname:pName not covered above) | NULL
| instance | core Vulkan command | fp^1^
| instance | enabled instance extension commands for pname:instance | fp^1^
| instance | available device extension commands for pname:instance | fp^1,2^
| instance | * (any pname:pName not covered above) | NULL
|=====
If pname:pName is not the name of a core Vulkan command, or is an 1::
extension command for any extension not supported by any available layer or The returned function pointer must: only be called with a dispatchable object
implementation, then fname:vkGetInstanceProcAddr will return `NULL`. (the first parameter) that is a child of pname:instance.
e.g. sname:VkInstance, sname:VkPhysicalDevice, sname:VkDevice, sname:VkQueue, or
sname:VkCommandBuffer.
2::
available extension is an extension function supported by any of the loader, ICD or layer.
ifdef::editing-notes[] ifdef::editing-notes[]
[NOTE] [NOTE]
@ -87,29 +98,36 @@ command:
include::../api/protos/vkGetDeviceProcAddr.txt[] include::../api/protos/vkGetDeviceProcAddr.txt[]
* pname:device is the logical device that provides the function pointer. The table below defines the various use cases for fname:vkGetDeviceProcAddr
* pname:pName is the name of any Vulkan command whose first parameter and expected return value for each case.
is one of
** sname:VkDevice
** sname:VkQueue
** sname:VkCommandBuffer
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
be cast to the type of the command being queried. be cast to the type of the command being queried.
If pname:pName is not the name of one of these Vulkan commands, and is .vkGetDeviceProcAddr behavior
not the name of an extension command belonging to an extension enabled for [width="80%",options="header",align="center"]
pname:device, then fname:vkGetDeviceProcAddr will return `NULL`. |=====
| pname:device | pname:pName | return value
| NULL | * | undefined
| invalid device | * | undefined
| device | NULL | undefined
| device | core Vulkan command^1^ | fp
| device | enabled device extension commands for pname:device | fp
| device | * (any pname:pName not covered above) | NULL
|=====
1::
pname:pName is the name of any Vulkan command whose first parameter
is sname:VkDevice or any of its dispatchable children (e.g. sname:VkQueue,
sname:vkCommandBuffer).
include::../validity/protos/vkGetDeviceProcAddr.txt[] include::../validity/protos/vkGetDeviceProcAddr.txt[]
// refEnd vkGetInstanceProcAddr PFN_vkVoidFunction // refEnd vkGetDeviceProcAddr PFN_vkVoidFunction
// refBegin PFN_vkVoidFunction Dummy function pointer type returned by queries // refBegin PFN_vkVoidFunction Dummy function pointer type returned by queries
The function pointer type returned from the flink:vkGetInstanceProcAddr and The definition of tlink:PFN_vkVoidFunction is:
flink:vkGetDeviceProcAddr is a dummy type not corresponding to any actual
Vulkan function:
include::../api/funcpointers/PFN_vkVoidFunction.txt[] include::../api/funcpointers/PFN_vkVoidFunction.txt[]

View File

@ -145,6 +145,13 @@ The sname:VkAttachmentDescription structure is defined as:
include::../api/structs/VkAttachmentDescription.txt[] include::../api/structs/VkAttachmentDescription.txt[]
* pname:flags is a bitmask describing additional properties of the
attachment. Bits which can: be set include:
+
--
// refBegin VkAttachmentDescriptionFlagBits - Bitmask specifying additional properties of an attachment
include::../api/enums/VkAttachmentDescriptionFlagBits.txt[]
--
* pname:format is a elink:VkFormat value specifying the format of the * pname:format is a elink:VkFormat value specifying the format of the
image that will be used for the attachment. image that will be used for the attachment.
* pname:samples is the number of samples of the image as defined * pname:samples is the number of samples of the image as defined
@ -196,13 +203,6 @@ include::../api/enums/VkAttachmentStoreOp.txt[]
transitioned to when a render pass instance ends. During a render pass transitioned to when a render pass instance ends. During a render pass
instance, an attachment can: use a different layout in each subpass, if instance, an attachment can: use a different layout in each subpass, if
desired. desired.
* pname:flags is a bitmask describing additional properties of the
attachment. Bits which can: be set include:
+
--
// refBegin VkAttachmentDescriptionFlagBits - Bitmask specifying additional properties of an attachment
include::../api/enums/VkAttachmentDescriptionFlagBits.txt[]
--
If the attachment uses a color format, then pname:loadOp and pname:storeOp If the attachment uses a color format, then pname:loadOp and pname:storeOp
are used, and pname:stencilLoadOp and pname:stencilStoreOp are ignored. If are used, and pname:stencilLoadOp and pname:stencilStoreOp are ignored. If

View File

@ -744,7 +744,8 @@ include::../api/structs/VkImageViewCreateInfo.txt[]
* pname:components specifies a remapping of color components (or of depth * pname:components specifies a remapping of color components (or of depth
or stencil components after they have been converted into color or stencil components after they have been converted into color
components). See slink:VkComponentMapping. components). See slink:VkComponentMapping.
* pname:subresourceRange selects the set of mipmap levels and array layers * pname:subresourceRange is a slink:VkImageSubresourceRange
selecting the set of mipmap levels and array layers
to be accessible to the view. to be accessible to the view.
If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
@ -759,101 +760,101 @@ Classes>> section.
|======================================== |========================================
| Dim, Arrayed, MS | Image parameters | View parameters | Dim, Arrayed, MS | Image parameters | View parameters
| 1D, 0, 0 | | 1D, 0, 0 |
imageType = IMAGE_TYPE_1D + imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 + width >= 1 +
height = 1 + height = 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_1D + viewType = ename:VK_VIEW_TYPE_1D +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 1 layerCount = 1
| 1D, 1, 0 | | 1D, 1, 0 |
imageType = IMAGE_TYPE_1D + imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 + width >= 1 +
height = 1 + height = 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_1D_ARRAY + viewType = ename:VK_VIEW_TYPE_1D_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers >= 1 layerCount >= 1
| 2D, 0, 0 | | 2D, 0, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_2D + viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 1 layerCount = 1
| 2D, 1, 0 | | 2D, 1, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_2D_ARRAY + viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers >= 1 layerCount >= 1
| 2D, 0, 1 | | 2D, 0, 1 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples > 1 | samples > 1 |
viewType = VIEW_TYPE_2D + viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 1 layerCount = 1
| 2D, 1, 1 | | 2D, 1, 1 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples > 1 | samples > 1 |
viewType = VIEW_TYPE_2D_ARRAY + viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers >= 1 layerCount >= 1
| CUBE, 0, 0 | | CUBE, 0, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height = width + height = width +
depth = 1 + depth = 1 +
arrayLayers >= 6 + arrayLayers >= 6 +
samples = 1 + samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT | flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE + viewType = ename:VK_VIEW_TYPE_CUBE +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 6 layerCount = 6
| CUBE, 1, 0 | | CUBE, 1, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height = width + height = width +
depth = 1 + depth = 1 +
arrayLayers >= 6×N + N >= 1 +
arrayLayers >= latexmath:[$6 \times N$] +
samples = 1 + samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT | flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE_ARRAY + viewType = ename:VK_VIEW_TYPE_CUBE_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 6×N N >= 1 +
layerCount = latexmath:[$6 \times N$]
| 3D, 0, 0 | | 3D, 0, 0 |
imageType = IMAGE_TYPE_3D + imageType = ename:VK_IMAGE_TYPE_3D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth >= 1 + depth >= 1 +
arrayLayers = 1 + arrayLayers = 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_3D + viewType = ename:VK_VIEW_TYPE_3D +
baseArrayLayer = 0 + baseArrayLayer = 0 +
arrayLayers = 1 layerCount = 1
|======================================== |========================================
The pname:subresourceRange member is of type slink:VkImageSubresourceRange.
include::../validity/structs/VkImageViewCreateInfo.txt[] include::../validity/structs/VkImageViewCreateInfo.txt[]
// refBegin VkImageSubresourceRange - Structure specifying a image subresource range // refBegin VkImageSubresourceRange - Structure specifying a image subresource range
@ -1285,9 +1286,10 @@ multiple resources simultaneously, via flink:vkBindImageMemory,
flink:vkBindBufferMemory, or via <<sparsememory-resource-binding,sparse flink:vkBindBufferMemory, or via <<sparsememory-resource-binding,sparse
memory bindings>>. A memory range aliased between two images or two buffers memory bindings>>. A memory range aliased between two images or two buffers
is defined to be the intersection of the memory ranges bound to the two is defined to be the intersection of the memory ranges bound to the two
resources. A memory range aliased between an image and a buffer is defined resources. A memory range aliased between two resources where one is a
buffer or a linear image, and the other is an optimal image, is defined
to be the intersection of the memory ranges bound to the two resources, to be the intersection of the memory ranges bound to the two resources,
where each range is first bloated to be aligned to the where each range is first padded to be aligned to the
pname:bufferImageGranularity. Applications can: alias memory, but use of pname:bufferImageGranularity. Applications can: alias memory, but use of
multiple aliases is subject to several constraints. multiple aliases is subject to several constraints.

View File

@ -334,7 +334,7 @@ operation. For example, a sname:VkImageMemoryBarrier could use:
* pname:oldLayout = etext:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR * pname:oldLayout = etext:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
* pname:newLayout = ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL * pname:newLayout = ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
Alternativeely, pname:oldLayout can: be ename:VK_IMAGE_LAYOUT_UNDEFINED, if Alternatively, pname:oldLayout can: be ename:VK_IMAGE_LAYOUT_UNDEFINED, if
the image's contents need not be preserved. the image's contents need not be preserved.
This barrier accomplishes a dependency chain between previous presentation This barrier accomplishes a dependency chain between previous presentation

View File

@ -89,6 +89,33 @@ def seeAlsoList(apiName, explicitRefs = None):
else: else:
return None return None
# Remap include directives in a list of lines so they can be extracted to a
# different directory. Returns remapped lines.
#
# lines - text to remap
# baseDir - target directory
# specDir - source directory
def remapIncludes(lines, baseDir, specDir):
# This should be compiled only once
includePat = re.compile('^include::(?P<path>.*)\[\]')
newLines = []
for line in lines:
matches = includePat.search(line)
if (matches != None):
path = matches.group('path')
# Relative path to include file from here
incPath = specDir + '/' + path
# Remap to be relative to baseDir
newPath = os.path.relpath(incPath, baseDir)
newLine = 'include::' + newPath + '[]\n'
logDiag('remapIncludes: remapping from:\n\t', line, 'to:\n\t', newLine)
newLines.append(newLine)
else:
newLines.append(line)
return newLines
# Generate header of a reference page # Generate header of a reference page
# pageName - string name of the page # pageName - string name of the page
# pageDesc - string short description of the page # pageDesc - string short description of the page
@ -180,11 +207,12 @@ def refPageTail(pageName, seeAlso, fp, auto = False):
printCopyrightBlock(fp, comment=False) printCopyrightBlock(fp, comment=False)
# Emit a single reference page in baseDir # Extract a single reference page into baseDir
# baseDir - base directory to emit page into # baseDir - base directory to emit page into
# specDir - directory extracted page source came from
# pi - pageInfo for this page relative to file # pi - pageInfo for this page relative to file
# file - list of strings making up the file, indexed by pi # file - list of strings making up the file, indexed by pi
def emitPage(baseDir, pi, file): def emitPage(baseDir, specDir, pi, file):
pageName = baseDir + '/' + pi.name + '.txt' pageName = baseDir + '/' + pi.name + '.txt'
fp = open(pageName, 'w') fp = open(pageName, 'w')
@ -198,7 +226,8 @@ def emitPage(baseDir, pi, file):
pi.desc = '(no short description available)' pi.desc = '(no short description available)'
# Specification text # Specification text
specText = ''.join(file[pi.begin:pi.include+1]) lines = remapIncludes(file[pi.begin:pi.include+1], baseDir, specDir)
specText = ''.join(lines)
# Member/parameter list, if there is one # Member/parameter list, if there is one
field = None field = None
@ -211,10 +240,12 @@ def emitPage(baseDir, pi, file):
else: else:
logWarn('PyOutputGenerator::emitPage: unknown field type:', pi.type, logWarn('PyOutputGenerator::emitPage: unknown field type:', pi.type,
'for', pi.name) 'for', pi.name)
fieldText = ''.join(file[pi.param:pi.body]) lines = remapIncludes(file[pi.param:pi.body], baseDir, specDir)
fieldText = ''.join(lines)
# Description text # Description text
descText = ''.join(file[pi.body:pi.end+1]) lines = remapIncludes(file[pi.body:pi.end+1], baseDir, specDir)
descText = ''.join(lines)
refPageHead(pi.name, refPageHead(pi.name,
pi.desc, pi.desc,
@ -350,6 +381,10 @@ def genRef(specFile, baseDir):
file = loadFile(specFile) file = loadFile(specFile)
if (file == None): if (file == None):
return return
# Save the path to this file for later use in rewriting relative includes
specDir = os.path.dirname(os.path.abspath(specFile))
pageMap = findRefs(file) pageMap = findRefs(file)
logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages') logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
@ -369,7 +404,7 @@ def genRef(specFile, baseDir):
logDiag('genRef:', pi.name + ':', pi.Warning) logDiag('genRef:', pi.name + ':', pi.Warning)
if (pi.extractPage): if (pi.extractPage):
emitPage(baseDir, pi, file) emitPage(baseDir, specDir, pi, file)
elif (pi.type == 'enums'): elif (pi.type == 'enums'):
autoGenEnumsPage(baseDir, pi, file) autoGenEnumsPage(baseDir, pi, file)
elif (pi.type == 'flags'): elif (pi.type == 'flags'):

View File

@ -14,9 +14,7 @@ C Specification
// refBegin PFN_vkVoidFunction Dummy function pointer type returned by queries // refBegin PFN_vkVoidFunction Dummy function pointer type returned by queries
The function pointer type returned from the flink:vkGetInstanceProcAddr and The definition of tlink:PFN_vkVoidFunction is:
flink:vkGetDeviceProcAddr is a dummy type not corresponding to any actual
Vulkan function:
include::../api/funcpointers/PFN_vkVoidFunction.txt[] include::../api/funcpointers/PFN_vkVoidFunction.txt[]

View File

@ -22,6 +22,13 @@ include::../api/structs/VkAttachmentDescription.txt[]
Members Members
------- -------
* pname:flags is a bitmask describing additional properties of the
attachment. Bits which can: be set include:
+
--
// refBegin VkAttachmentDescriptionFlagBits - Bitmask specifying additional properties of an attachment
include::../api/enums/VkAttachmentDescriptionFlagBits.txt[]
--
* pname:format is a elink:VkFormat value specifying the format of the * pname:format is a elink:VkFormat value specifying the format of the
image that will be used for the attachment. image that will be used for the attachment.
* pname:samples is the number of samples of the image as defined * pname:samples is the number of samples of the image as defined
@ -73,13 +80,6 @@ include::../api/enums/VkAttachmentStoreOp.txt[]
transitioned to when a render pass instance ends. During a render pass transitioned to when a render pass instance ends. During a render pass
instance, an attachment can: use a different layout in each subpass, if instance, an attachment can: use a different layout in each subpass, if
desired. desired.
* pname:flags is a bitmask describing additional properties of the
attachment. Bits which can: be set include:
+
--
// refBegin VkAttachmentDescriptionFlagBits - Bitmask specifying additional properties of an attachment
include::../api/enums/VkAttachmentDescriptionFlagBits.txt[]
--
Description Description

View File

@ -31,7 +31,7 @@ Members
in buffer memory. If either of these values is zero, that aspect of the in buffer memory. If either of these values is zero, that aspect of the
buffer memory is considered to be tightly packed according to the buffer memory is considered to be tightly packed according to the
pname:imageExtent. pname:imageExtent.
* pname:imageSubresource is an slink:VkImageSubresourceLayers used to * pname:imageSubresource is a slink:VkImageSubresourceLayers used to
specify the specific image subresources of the image used for the source specify the specific image subresources of the image used for the source
or destination image data. or destination image data.
* pname:imageOffset selects the initial x, y, z offsets in texels of the * pname:imageOffset selects the initial x, y, z offsets in texels of the

View File

@ -24,7 +24,7 @@ Members
* pname:binding is the binding number of this entry and corresponds * pname:binding is the binding number of this entry and corresponds
to a resource of the same binding number in the shader stages. to a resource of the same binding number in the shader stages.
* pname:descriptorType is an elink:VkDescriptorType specifying which type * pname:descriptorType is a elink:VkDescriptorType specifying which type
of resource descriptors are used for this binding. of resource descriptors are used for this binding.
* pname:descriptorCount is the number of descriptors contained in the * pname:descriptorCount is the number of descriptors contained in the
binding, accessed in a shader as an array. If pname:descriptorCount is binding, accessed in a shader as an array. If pname:descriptorCount is

View File

@ -32,7 +32,8 @@ Members
* pname:components specifies a remapping of color components (or of depth * pname:components specifies a remapping of color components (or of depth
or stencil components after they have been converted into color or stencil components after they have been converted into color
components). See slink:VkComponentMapping. components). See slink:VkComponentMapping.
* pname:subresourceRange selects the set of mipmap levels and array layers * pname:subresourceRange is a slink:VkImageSubresourceRange
selecting the set of mipmap levels and array layers
to be accessible to the view. to be accessible to the view.
@ -51,101 +52,101 @@ Classes>> section.
|======================================== |========================================
| Dim, Arrayed, MS | Image parameters | View parameters | Dim, Arrayed, MS | Image parameters | View parameters
| 1D, 0, 0 | | 1D, 0, 0 |
imageType = IMAGE_TYPE_1D + imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 + width >= 1 +
height = 1 + height = 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_1D + viewType = ename:VK_VIEW_TYPE_1D +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 1 layerCount = 1
| 1D, 1, 0 | | 1D, 1, 0 |
imageType = IMAGE_TYPE_1D + imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 + width >= 1 +
height = 1 + height = 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_1D_ARRAY + viewType = ename:VK_VIEW_TYPE_1D_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers >= 1 layerCount >= 1
| 2D, 0, 0 | | 2D, 0, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_2D + viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 1 layerCount = 1
| 2D, 1, 0 | | 2D, 1, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_2D_ARRAY + viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers >= 1 layerCount >= 1
| 2D, 0, 1 | | 2D, 0, 1 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples > 1 | samples > 1 |
viewType = VIEW_TYPE_2D + viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 1 layerCount = 1
| 2D, 1, 1 | | 2D, 1, 1 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth = 1 + depth = 1 +
arrayLayers >= 1 + arrayLayers >= 1 +
samples > 1 | samples > 1 |
viewType = VIEW_TYPE_2D_ARRAY + viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers >= 1 layerCount >= 1
| CUBE, 0, 0 | | CUBE, 0, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height = width + height = width +
depth = 1 + depth = 1 +
arrayLayers >= 6 + arrayLayers >= 6 +
samples = 1 + samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT | flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE + viewType = ename:VK_VIEW_TYPE_CUBE +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 6 layerCount = 6
| CUBE, 1, 0 | | CUBE, 1, 0 |
imageType = IMAGE_TYPE_2D + imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 + width >= 1 +
height = width + height = width +
depth = 1 + depth = 1 +
arrayLayers >= 6×N + N >= 1 +
arrayLayers >= latexmath:[$6 \times N$] +
samples = 1 + samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT | flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE_ARRAY + viewType = ename:VK_VIEW_TYPE_CUBE_ARRAY +
baseArrayLayer >= 0 + baseArrayLayer >= 0 +
arrayLayers = 6×N N >= 1 +
layerCount = latexmath:[$6 \times N$]
| 3D, 0, 0 | | 3D, 0, 0 |
imageType = IMAGE_TYPE_3D + imageType = ename:VK_IMAGE_TYPE_3D +
width >= 1 + width >= 1 +
height >= 1 + height >= 1 +
depth >= 1 + depth >= 1 +
arrayLayers = 1 + arrayLayers = 1 +
samples = 1 | samples = 1 |
viewType = VIEW_TYPE_3D + viewType = ename:VK_VIEW_TYPE_3D +
baseArrayLayer = 0 + baseArrayLayer = 0 +
arrayLayers = 1 layerCount = 1
|======================================== |========================================
The pname:subresourceRange member is of type slink:VkImageSubresourceRange.
include::../validity/structs/VkImageViewCreateInfo.txt[] include::../validity/structs/VkImageViewCreateInfo.txt[]

View File

@ -30,21 +30,66 @@ Description
----------- -----------
* [[features-features-robustBufferAccess]] pname:robustBufferAccess * [[features-features-robustBufferAccess]] pname:robustBufferAccess
indicates that out of bounds accesses to buffers via shader operations indicates that accesses to buffers are bounds-checked against the range of
are well-defined. the buffer descriptor (as determined by
** When enabled, out-of-bounds buffer reads will return any of the sname:VkDescriptorBufferInfo::pname:range,
following values: sname:VkBufferViewCreateInfo::pname:range, or the size of the buffer). Out
*** Values from anywhere within the buffer object. of bounds accesses mustnot: cause application termination, and the effects
of shader loads, stores, and atomics must: conform to an
implementation-dependent behavior as described below.
** A buffer access is considered to be out of bounds if any of the following
are true:
*** The pointer was formed by code:OpImageTexelPointer and the coordinate is
less than zero or greater than or equal to the number of whole elements
in the bound range.
*** The pointer was not formed by code:OpImageTexelPointer and the object
pointed to is not wholly contained within the bound range.
+
--
[NOTE]
.Note
====
If a SPIR-V code:OpLoad instruction loads a structure and the tail end of the
structure is out of bounds, then all members of the structure are considered
out of bounds even if the members at the end are not statically used.
====
--
+
*** If any buffer access in a given SPIR-V block is determined to be
out of bounds, then any other access of the same type (load, store, or
atomic) in the same SPIR-V block that accesses an address less
than 16 bytes away from the out of bounds address may: also be
considered out of bounds.
** Out-of-bounds buffer loads will return any of the following values:
*** Values from anywhere within the memory range(s) bound to the buffer
(possibly including bytes of memory past the end of the buffer, up to
the end of the bound range).
*** Zero values, or (0,0,0,x) vectors for vector reads where x is a valid *** Zero values, or (0,0,0,x) vectors for vector reads where x is a valid
value represented in the type of the vector components and may: be any value represented in the type of the vector components and may: be any
of: of:
**** 0, 1, or the maximum representable positive integer value, for signed **** 0, 1, or the maximum representable positive integer value, for signed
or unsigned integer components or unsigned integer components
**** 0.0 or 1.0, for floating-point components **** 0.0 or 1.0, for floating-point components
** When enabled, out-of-bounds writes may: modify values within the buffer ** Out-of-bounds writes may: modify values within the memory range(s) bound
object or be ignored. to the buffer, but mustnot: modify any other memory.
** If not enabled, out of bounds accesses may: cause undefined behaviour ** Out-of-bounds atomics may: modify values within the memory range(s) bound
up-to and including process termination. to the buffer, but mustnot: modify any other memory, and return an
undefined value.
** Vertex input attributes are considered out of bounds if the address of the
attribute plus the size of the attribute is greater than the size of the
bound buffer. Further, if any vertex input attribute using a specific
vertex input binding is out of bounds, then all vertex input attributes
using that vertex input binding for that vertex shader invocation are
considered out of bounds.
*** If a vertex input attribute is out of bounds, it will be assigned one
of the following values:
**** Values from anywhere within the memory range(s) bound to the buffer,
converted according to the format of the attribute.
**** Zero values, format converted according to the format of the attribute.
**** Zero values, or (0,0,0,x) vectors, as described above.
** If pname:robustBufferAccess is not enabled, out of bounds accesses may:
corrupt any memory within the process and cause undefined behaviour up
to and including application termination.
* [[features-features-fullDrawIndexUint32]] pname:fullDrawIndexUint32 * [[features-features-fullDrawIndexUint32]] pname:fullDrawIndexUint32
indicates the full 32-bit range of indices is supported for indexed draw indicates the full 32-bit range of indices is supported for indexed draw
calls when using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32. calls when using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32.

View File

@ -29,6 +29,8 @@ Members
* pname:sType is the type of this structure. * pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is reserved for future use. * pname:flags is reserved for future use.
* pname:topology is a elink:VkPrimitiveTopology defining the primitive
topology, as described below.
* pname:primitiveRestartEnable controls whether a special vertex index * pname:primitiveRestartEnable controls whether a special vertex index
value is treated as restarting the assembly of primitives. This enable value is treated as restarting the assembly of primitives. This enable
only applies to indexed draws (flink:vkCmdDrawIndexed and only applies to indexed draws (flink:vkCmdDrawIndexed and
@ -37,8 +39,6 @@ Members
fname:vkCmdBindIndexBuffer is equal to ename:VK_INDEX_TYPE_UINT32, or fname:vkCmdBindIndexBuffer is equal to ename:VK_INDEX_TYPE_UINT32, or
0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16. 0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16.
Primitive restart is not allowed for ``list'' topologies. Primitive restart is not allowed for ``list'' topologies.
* pname:topology is a elink:VkPrimitiveTopology defining the primitive
topology, as described below.
Description Description

View File

@ -50,7 +50,7 @@ behavior. This means applications need not populate unused entries with dummy
descriptors. descriptors.
If an allocation fails due to fragmentation, an indeterminate error is If an allocation fails due to fragmentation, an indeterminate error is
returned with an unspecified error code. Any returned error other than returned with an unspecified error code. Any returned error other than
ename:VK_ERROR_FRAGMENTED_POOL does not imply its usual meaning: ename:VK_ERROR_FRAGMENTED_POOL does not imply its usual meaning:
applications should: assume that the allocation failed due to fragmentation, applications should: assume that the allocation failed due to fragmentation,
and create a new descriptor pool. and create a new descriptor pool.

View File

@ -26,7 +26,7 @@ Parameters
* pname:pCreateInfo contains information used to create the command pool. * pname:pCreateInfo contains information used to create the command pool.
* pname:pAllocator controls host memory allocation as described in the * pname:pAllocator controls host memory allocation as described in the
<<memory-allocation, Memory Allocation>> chapter. <<memory-allocation, Memory Allocation>> chapter.
* pname:pCommandPool points to an sname:VkCommandPool handle in which the * pname:pCommandPool points to a sname:VkCommandPool handle in which the
created pool is returned. created pool is returned.

View File

@ -30,12 +30,8 @@ include::../api/protos/vkGetDeviceProcAddr.txt[]
Parameters Parameters
---------- ----------
* pname:device is the logical device that provides the function pointer. The table below defines the various use cases for fname:vkGetDeviceProcAddr
* pname:pName is the name of any Vulkan command whose first parameter and expected return value for each case.
is one of
** sname:VkDevice
** sname:VkQueue
** sname:VkCommandBuffer
Description Description
@ -44,17 +40,32 @@ Description
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
be cast to the type of the command being queried. be cast to the type of the command being queried.
If pname:pName is not the name of one of these Vulkan commands, and is .vkGetDeviceProcAddr behavior
not the name of an extension command belonging to an extension enabled for [width="80%",options="header",align="center"]
pname:device, then fname:vkGetDeviceProcAddr will return `NULL`. |=====
| pname:device | pname:pName | return value
| NULL | * | undefined
| invalid device | * | undefined
| device | NULL | undefined
| device | core Vulkan command^1^ | fp
| device | enabled device extension commands for pname:device | fp
| device | * (any pname:pName not covered above) | NULL
|=====
1::
pname:pName is the name of any Vulkan command whose first parameter
is sname:VkDevice or any of its dispatchable children (e.g. sname:VkQueue,
sname:vkCommandBuffer).
include::../validity/protos/vkGetDeviceProcAddr.txt[] include::../validity/protos/vkGetDeviceProcAddr.txt[]
// refEnd vkGetDeviceProcAddr PFN_vkVoidFunction
See Also See Also
-------- --------
slink:VkDevice tlink:PFN_vkVoidFunction, slink:VkDevice
Document Notes Document Notes

View File

@ -25,7 +25,7 @@ Parameters
---------- ----------
* pname:instance is the instance that the function pointer will be * pname:instance is the instance that the function pointer will be
compatible with. compatible with, or `NULL` for commands not dependent on any instance.
* pname:pName is the name of the command to obtain. * pname:pName is the name of the command to obtain.
@ -40,25 +40,36 @@ Loaders are encouraged to export function symbols for all other core
Vulkan commands as well; if this is done, then applications that use only Vulkan commands as well; if this is done, then applications that use only
the core Vulkan commands have no need to use fname:vkGetInstanceProcAddr. the core Vulkan commands have no need to use fname:vkGetInstanceProcAddr.
Function pointers to commands that do not operate on a specific instance can: The table below defines the various use cases for fname:vkGetInstanceProcAddr
be obtained by using this command with pname:instance equal to `NULL`. The and expected return value ("fp" is function pointer) for each case.
following commands can: be accessed this way:
* flink:vkEnumerateInstanceExtensionProperties
* flink:vkEnumerateInstanceLayerProperties
* flink:vkCreateInstance
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
be cast to the type of the command being queried. be cast to the type of the command being queried.
If pname:instance is a valid sname:VkInstance, function pointers to any .vkGetInstanceProcAddr behavior
commands that operate on pname:instance or a child of pname:instance can: be [width="80%",options="header",align="center"]
obtained. The returned function pointer must: only be called with a |=====
dispatchable object (the first parameter) that is a child of pname:instance. | pname:instance | pname:pName | return value
| * | NULL | undefined
| invalid instance | * | undefined
| NULL | flink:vkEnumerateInstanceExtensionProperties | fp
| NULL | flink:vkEnumerateInstanceLayerProperties | fp
| NULL | flink:vkCreateInstance | fp
| NULL | * (any pname:pName not covered above) | NULL
| instance | core Vulkan command | fp^1^
| instance | enabled instance extension commands for pname:instance | fp^1^
| instance | available device extension commands for pname:instance | fp^1,2^
| instance | * (any pname:pName not covered above) | NULL
|=====
If pname:pName is not the name of a core Vulkan command, or is an 1::
extension command for any extension not supported by any available layer or The returned function pointer must: only be called with a dispatchable object
implementation, then fname:vkGetInstanceProcAddr will return `NULL`. (the first parameter) that is a child of pname:instance.
e.g. sname:VkInstance, sname:VkPhysicalDevice, sname:VkDevice, sname:VkQueue, or
sname:VkCommandBuffer.
2::
available extension is an extension function supported by any of the loader, ICD or layer.
ifdef::editing-notes[] ifdef::editing-notes[]
[NOTE] [NOTE]

View File

@ -187,23 +187,28 @@ looks as it does.
[[sample-command]] [[sample-command]]
== Sample Command Description: Creating Command Pools == Sample Command Description: Creating Command Pools
To create a command pool, call: // refBegin vkCreateCommandPool Create a new command pool object.
[NOTE] To create a command pool, call:
.Guideline
====
Use a short, active sentence when describing what commands do, instead of
more passive phrasing like ``A command pool is created by calling:'' or ``The
application may create a command pool by calling:''.
====
include::../api/protos/vkCreateCommandPool.txt[] include::../api/protos/vkCreateCommandPool.txt[]
[NOTE] [NOTE]
.Guideline .Guideline
==== ====
After the description, include the autogenerated prototype for the command Begin the command description with a comment delimiting the language for
from the `../protos/` directory: <<writing-refpages,automatic extraction into a reference page>>.
Use a short, active sentence when describing what commands do, instead of
more passive phrasing like ``A command pool is created by calling:'' or ``The
application may create a command pool by calling:''.
After the description, include the autogenerated prototype for the
command from the `../protos/` directory:
// refBegin vkCreateCommandPool Create a new command pool object.
To create a command pool, call:
include::../api/protos/vkCreateCommandPool.txt[] include::../api/protos/vkCreateCommandPool.txt[]
@ -254,8 +259,13 @@ Parameter and member validation language for commands and structures is also
autogenerated from vk.xml, and included from the `../validity/` directories: autogenerated from vk.xml, and included from the `../validity/` directories:
include::../validity/protos/vkCreateCommandPool.txt[] include::../validity/protos/vkCreateCommandPool.txt[]
Structures and enumerations first used as parameters of a command are
described next.
==== ====
// refBegin VkCommandPoolCreateInfo - Structure specifying parameters of a newly created command pool
The sname:VkCommandPoolCreateInfo structure is defined as: The sname:VkCommandPoolCreateInfo structure is defined as:
include::../api/structs/VkCommandPoolCreateInfo.txt[] include::../api/structs/VkCommandPoolCreateInfo.txt[]
@ -263,9 +273,18 @@ include::../api/structs/VkCommandPoolCreateInfo.txt[]
[NOTE] [NOTE]
.Guideline .Guideline
==== ====
Structures and enumerations first used as parameters of a command are Begin the structure description with a comment delimiting the language for
described next, by including the autogenerated interface file for that <<writing-refpages,automatic extraction into a reference page>>.
structure or enumeration:
Use a short, active paragraph to introduce the structure, usually just
``The sname:VkStructureName structure is defined as:''.
After the description, include the autogenerated definition for the
structure from the `../structs/` directory:
// refBegin VkCommandPoolCreateInfo - Structure specifying parameters of a newly created command pool
The sname:VkCommandPoolCreateInfo structure is defined as:
include::../api/structs/VkCommandPoolCreateInfo.txt[] include::../api/structs/VkCommandPoolCreateInfo.txt[]
==== ====
@ -277,13 +296,14 @@ structure or enumeration:
include: include:
+ +
-- --
// refBegin VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a command pool
include::../api/enums/VkCommandPoolCreateFlagBits.txt[] include::../api/enums/VkCommandPoolCreateFlagBits.txt[]
** ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT indicates that command buffers
allocated from the pool will be short-lived.
** ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT controls whether
command buffers allocated from the pool can: be individually reset.
-- --
+
** ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT indicates that command buffers
allocated from the pool will be short-lived.
** ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT controls whether
command buffers allocated from the pool can: be individually reset.
* pname:queueFamilyIndex designates a queue family. Command buffers in * pname:queueFamilyIndex designates a queue family. Command buffers in
this command pool must: be submitted on queues from the same family. this command pool must: be submitted on queues from the same family.
@ -297,8 +317,7 @@ specific to the structure.
---- ----
* pname:sType is the type of this structure. * pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an * pname:pNext is `NULL` or a pointer to an extension-specific structure.
extension-specific structure.
---- ----
In some cases, such as when the type of a member is itself a new type, the In some cases, such as when the type of a member is itself a new type, the
@ -308,20 +327,20 @@ asciidoc parser. It is usually best to append a block following the first
paragraph of such a list item: paragraph of such a list item:
---- ----
* pname:flags is a combination of bitmask flags * pname:flags is a bitmask indicating usage behavior for the pool and
indicating usage behavior for the pool and command buffers allocated from it. Bits which can: be set include:
command buffers allocated from it. Possible
values include:
+ +
-- --
\include::../api/enums/VkCommandPoolCreateFlagBits.txt[] // refBegin VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a command pool
include::../api/enums/VkCommandPoolCreateFlagBits.txt[]
** ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT --
indicates that command buffers allocated +
from the pool will be short-lived. ** ename:VK_COMMAND_POOL_CREATE_TRANSIENT_BIT
** ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT indicates that command buffers allocated
controls whether command buffers allocated from from the pool will be short-lived.
the pool can: be individually reset. ** ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
controls whether command buffers allocated from
the pool can: be individually reset.
-- --
---- ----
==== ====
@ -336,3 +355,56 @@ for this structure:
include::../validity/structs/VkCommandPoolCreateInfo.txt[] include::../validity/structs/VkCommandPoolCreateInfo.txt[]
==== ====
[[writing-refpages]]
== Markup For Automatic Reference Page Extraction
The Vulkan reference pages are (mostly) being extracted from
corresponding sections of the API Specification. This requires that the
markup and writing conventions described above be adhered to rigidly.
The extraction scripts for a given page rely on the existence of the
asciidoc +include+ of the autogenerated definition of that command,
structure, or other API interface element. Various heuristics are used
to determine which text to extract for that page; the general model is:
* Optional (but usually specified) comment line specifying the
interface name and the short description used in the title of the
corresponding ref page:
+
----
// refBegin name - description
----
+
* A paragraph of text introducing the definition of the interface. If
the +refBegin+ comment does not exist, this paragraph must be
present.
* The +include+ line for the interface, which must be consistent
with the interface name in the comment line.
* A bullet list describing function parameters, structure members,
enumerants in an enumerated type, etc. This list should contain no
empty lines, as the extraction script classifies the uninterrupted
block of text following the +include+ directive as the +Parameters+
or +Members+ section of the ref page.
* Optional paragraphs of text making up the +Description+ section of
the ref page.
* The +include+ line for the validity statement of commands and
structures. Other interfaces such as enumerated types do not have
validity statements.
* Comment line specifying the end of the extracted text for the
reference page and optional page names to link to in the +See Also+
section of the page. If the validity +include+ is not present, this
line must be present:
+
----
// refEnd name [seeAlsoNames]*
----
All elements specifying an interface name (+refBegin+ and +refEnd+
comments, interface +include+ line, and validity +include+ line) must
use the same interface name, if present. Otherwise the extraction script
is either unable to extract that page, or will extract the wrong text.
The extraction process is somewhat fragile, so care should be taken and
the results of reference page extraction verified after making changes
to that portion of the specification source.

View File

@ -153,6 +153,8 @@ include::style/writing.txt[]
= Revision History = Revision History
* July 26, 2016 - Add section describing <<writing-refpages,markup for
automatic reference page extraction>>.
* July 18, 2016 - Add examples of function-parameter and structure-member * July 18, 2016 - Add examples of function-parameter and structure-member
markup (based on public issue 286). markup (based on public issue 286).
* July 11, 2016 - Change the document title. * July 11, 2016 - Change the document title.

View File

@ -18,6 +18,7 @@ endif::doctype-manpage[]
* Each of pname:commandBuffer, pname:layout, and the elements of pname:pDescriptorSets must: have been created, allocated, or retrieved from the same sname:VkDevice * Each of pname:commandBuffer, pname:layout, and the elements of pname:pDescriptorSets must: have been created, allocated, or retrieved from the same sname:VkDevice
* Any given element of pname:pDescriptorSets must: have been created with a sname:VkDescriptorSetLayout that matches (is the same as, or defined identically to) the sname:VkDescriptorSetLayout at set _n_ in pname:layout, where _n_ is the sum of pname:firstSet and the index into pname:pDescriptorSets * Any given element of pname:pDescriptorSets must: have been created with a sname:VkDescriptorSetLayout that matches (is the same as, or defined identically to) the sname:VkDescriptorSetLayout at set _n_ in pname:layout, where _n_ is the sum of pname:firstSet and the index into pname:pDescriptorSets
* pname:dynamicOffsetCount must: be equal to the total number of dynamic descriptors in pname:pDescriptorSets * pname:dynamicOffsetCount must: be equal to the total number of dynamic descriptors in pname:pDescriptorSets
* The sum of pname:firstSet and pname:descriptorSetCount must: be less than or equal to sname:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when pname:layout was created
* pname:pipelineBindPoint must: be supported by the pname:commandBuffer's parent sname:VkCommandPool's queue family * pname:pipelineBindPoint must: be supported by the pname:commandBuffer's parent sname:VkCommandPool's queue family
* Any given element of pname:pDynamicOffsets must: satisfy the required alignment for the corresponding descriptor binding's descriptor type * Any given element of pname:pDynamicOffsets must: satisfy the required alignment for the corresponding descriptor binding's descriptor type
ifndef::doctype-manpage[] ifndef::doctype-manpage[]

View File

@ -19,6 +19,7 @@ endif::doctype-manpage[]
* Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag * Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag
* Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag * Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag
* Any given element of pname:pCommandBuffers must: be in the executable state * Any given element of pname:pCommandBuffers must: be in the executable state
* Any given element of pname:pCommandBuffers must: have been allocated from a sname:VkCommandPool that was created for the same queue family as the sname:VkCommandPool from which pname:commandBuffer was allocated
* If fname:vkCmdExecuteCommands is being called within a render pass instance, that render pass instance must: have been begun with the pname:contents parameter of fname:vkCmdBeginRenderPass set to ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS * If fname:vkCmdExecuteCommands is being called within a render pass instance, that render pass instance must: have been begun with the pname:contents parameter of fname:vkCmdBeginRenderPass set to ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
* If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT * If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
* If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the index of the subpass which the given command buffer will be executed in * If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the index of the subpass which the given command buffer will be executed in

View File

@ -9,8 +9,6 @@ Valid Usage
endif::doctype-manpage[] endif::doctype-manpage[]
* If pname:instance is not `NULL`, pname:instance must: be a valid sname:VkInstance handle * If pname:instance is not `NULL`, pname:instance must: be a valid sname:VkInstance handle
* pname:pName must: be a null-terminated string * pname:pName must: be a null-terminated string
* If pname:instance is `NULL`, pname:pName must: be "vkEnumerateInstanceExtensionProperties", "vkEnumerateInstanceLayerProperties", or "vkCreateInstance"
* If pname:instance is not `NULL`, pname:pName mustnot: be "vkEnumerateInstanceExtensionProperties", "vkEnumerateInstanceLayerProperties", or "vkCreateInstance"
ifndef::doctype-manpage[] ifndef::doctype-manpage[]
******************************************************************************** ********************************************************************************
endif::doctype-manpage[] endif::doctype-manpage[]

View File

@ -33,7 +33,7 @@ endif::doctype-manpage[]
* pname:subresourceRange must: be a valid image subresource range for pname:image (see <<resources-image-views>>) * pname:subresourceRange must: be a valid image subresource range for pname:image (see <<resources-image-views>>)
* If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be compatible with the pname:format used to create pname:image, as defined in <<features-formats-compatibility-classes,Format Compatibility Classes>> * If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be compatible with the pname:format used to create pname:image, as defined in <<features-formats-compatibility-classes,Format Compatibility Classes>>
* If pname:image was not created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be identical to the pname:format used to create pname:image * If pname:image was not created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be identical to the pname:format used to create pname:image
* pname:subResourceRange and pname:viewType must: be compatible with the image, as described in the <<resources-image-views-compatibility,table below>> * pname:subResourceRange and pname:viewType must: be compatible with the image, as described in the <<resources-image-views-compatibility,compatibility table>>
ifndef::doctype-manpage[] ifndef::doctype-manpage[]
******************************************************************************** ********************************************************************************
endif::doctype-manpage[] endif::doctype-manpage[]

View File

@ -19,14 +19,16 @@ When patches to the header or the includes are needed, follow this workflow:
- Edit vk.xml - Edit vk.xml
- make ; make test - make ; make test
(this just generates ../vulkan/vulkan.h) (this just generates ../vulkan/vulkan.h)
- make full_install - make install doc_install
(this generates all targets) (this generates header and registry documentation)
- (cd ../../doc/specs/vulkan && make generated)
(this generates asciidoc includes)
- Repeat until the header and/or includes are correct - Repeat until the header and/or includes are correct
- Commit your changes to your local git branch - Commit your changes to your local git branch
- Push the branch to the git server and create a merge request against the - Push the branch to the git server and create a merge request against the
specification branch ("1.0") or other appropriate target. specification branch ("1.0") or other appropriate target.
See 'readme.pdf' for a detailed description of the schema, and some examples See 'readme.txt' for a detailed description of the schema, and some examples
of how to make simple changes in the API via the XML. of how to make simple changes in the API via the XML.
The generator scripts are written in Python 3, using the etree package for The generator scripts are written in Python 3, using the etree package for
@ -40,14 +42,16 @@ FILES
Makefile - generates header and JSON from XML (see below) Makefile - generates header and JSON from XML (see below)
vk.xml - XML API description vk.xml - XML API description
genvk.py - Python script to generate vulkan.h and other targets. genvk.py - Python script to generate vulkan.h and other targets.
readme.tex - Source for detailed description of the XML schema readme.txt - Source for detailed description of the XML schema
readme.pdf - Generated document describing the XML schema and giving
some examples of making simple changes to add API features
registry.rnc - RelaxNG compact schema for validating XML against the registry.rnc - RelaxNG compact schema for validating XML against the
schema schema
reg.py - Python tools to read XML file and convert it into C headers reg.py - Python tools to read XML file and convert it into C headers
generator.py - output generator for C. Others are possible, although generator.py - output generator base class.
vk.xml contains C-isms which would have to be factored out. cgenerator.py - C output generator for vulkan.h
docgenerator.py - Asciidoc interface language include generator
hostsyncgenerator.py - Asciidoc host sync table generator
pygenerator.py - Generates python encoding of the API description
validitygenerator.py - Asciidoc validity language generator
../vulkan/vulkan.h - Generated header ../vulkan/vulkan.h - Generated header
MAKEFILE TARGETS MAKEFILE TARGETS
@ -55,21 +59,14 @@ MAKEFILE TARGETS
install or ../vulkan/vulkan.h (default target) - regenerate vulkan.h in install or ../vulkan/vulkan.h (default target) - regenerate vulkan.h in
../vulkan . ../vulkan .
vulkan-docs - regenerate spec/ref page API include .txt files and doc_install - generates detailed description of the XML schema from
install under ../../doc/specs/vulkan/*/ . In general, this should be registry.txt in $(OUTDIR)/registry.html . In general this should be
left until a branch is merged to master. left until a branch is merged to 1.0.
full_install - combination of 'install' and 'vulkan-docs' targets.
Again, in general this should be left until a branch is merged to
master.
readme.pdf - detailed description of the XML schema. Normally this need
not be rebuilt unless you are changing the schema and updating
readme.tex.
test - make sure ../vulkan/vulkan.h compiles. Important! test - make sure ../vulkan/vulkan.h compiles. Important!
validate - validate vk.xml against the schema. Requires 'jing' tool validate - validate vk.xml against the schema. Requires 'jing' tool
installed. installed.
clobber - remove generated and cache files, including the API include clobber - remove generated files. Usually done when to merging to 1.0
files. Usually done while merging to master via 'make clobber ; make via 'make clobber ; make install doc_install'.
full_install'
If you have trouble running the Makefile on your platorm, try using If you have trouble running the Makefile on your platorm, try using
the command line: the command line:
@ -173,3 +170,7 @@ CHANGE LOG
2016/05/31 2016/05/31
Remove dependency on lxml. Remove dependency on lxml.
2016/07/27
Update documentation for changes to schema and generator scripts.

View File

@ -106,6 +106,8 @@ Types = element types {
# optional - whether this value can be omitted by providing NULL (for # optional - whether this value can be omitted by providing NULL (for
# pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values) # pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values)
# noautovalidity - tag stating that no automatic validity language should be generated # noautovalidity - tag stating that no automatic validity language should be generated
# validextensionstructs - comma-separate list of legal structure types in pNext chain
# values - comma-separated list of legal values, usually used only for sType enums
# #
# *** There's a problem here: I'm not sure how to represent the <type> # *** There's a problem here: I'm not sure how to represent the <type>
# syntax where it may contain arbitrarily interleaved text, <type>, and # syntax where it may contain arbitrarily interleaved text, <type>, and
@ -141,6 +143,8 @@ Type = element type {
attribute externsync { text } ? , attribute externsync { text } ? ,
attribute optional { text } ? , attribute optional { text } ? ,
attribute noautovalidity { text } ? , attribute noautovalidity { text } ? ,
attribute validextensionstructs { text } ? ,
attribute values { text } ? ,
mixed { mixed {
element type { TypeName } ? , element type { TypeName } ? ,
element name { text }, element name { text },

View File

@ -366,6 +366,9 @@ member.
* attr:validextensionstructs - only valid on the +pNext+ member of a * attr:validextensionstructs - only valid on the +pNext+ member of a
struct. This is a comma-separated list of structures that may be struct. This is a comma-separated list of structures that may be
accepted by +pNext+ instead of +NULL+ accepted by +pNext+ instead of +NULL+
* attr:values - only valid on the +sType+ member of a struct. This is a
comma-separated list of enumerant values that are valid for the
structure type; usually there is only a single value.
* attr:len - if the member is an array, len may be one or more of the * attr:len - if the member is an array, len may be one or more of the
following things, separated by commas (one for each array following things, separated by commas (one for each array
indirection): another member of that struct; +"null-terminated"+ for indirection): another member of that struct; +"null-terminated"+ for

View File

@ -203,7 +203,7 @@ class ValidityOutputGenerator(OutputGenerator):
# Check if the parameter passed in is a pointer to an array # Check if the parameter passed in is a pointer to an array
def paramIsArray(self, param): def paramIsArray(self, param):
return param.attrib.get('len') is not None return param.attrib.get('len') is not None
# #
# Get the parent of a handle object # Get the parent of a handle object
def getHandleParent(self, typename): def getHandleParent(self, typename):
@ -224,7 +224,7 @@ class ValidityOutputGenerator(OutputGenerator):
if current is None: if current is None:
return ancestors return ancestors
ancestors.append(current) ancestors.append(current)
# #
# Get the ancestors of a handle object # Get the ancestors of a handle object
def getHandleDispatchableAncestors(self, typename): def getHandleDispatchableAncestors(self, typename):
@ -236,7 +236,7 @@ class ValidityOutputGenerator(OutputGenerator):
return ancestors return ancestors
if self.isHandleTypeDispatchable(current): if self.isHandleTypeDispatchable(current):
ancestors.append(current) ancestors.append(current)
# #
# Check if a parent object is dispatchable or not # Check if a parent object is dispatchable or not
def isHandleTypeDispatchable(self, handlename): def isHandleTypeDispatchable(self, handlename):
@ -585,70 +585,70 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += '\n' asciidoc += '\n'
return asciidoc return asciidoc
# #
# Make an asciidoc validity entry for a common ancestors between handles # Make an asciidoc validity entry for a common ancestors between handles
def makeAsciiDocHandlesCommonAncestor(self, handles, params): def makeAsciiDocHandlesCommonAncestor(self, handles, params):
asciidoc = '' asciidoc = ''
if len(handles) > 1: if len(handles) > 1:
ancestormap = {} ancestormap = {}
anyoptional = False anyoptional = False
# Find all the ancestors # Find all the ancestors
for param in handles: for param in handles:
paramname = param.find('name') paramname = param.find('name')
paramtype = param.find('type') paramtype = param.find('type')
ancestors = self.getHandleDispatchableAncestors(paramtype.text) ancestors = self.getHandleDispatchableAncestors(paramtype.text)
ancestormap[param] = ancestors ancestormap[param] = ancestors
anyoptional |= self.isHandleOptional(param, params) anyoptional |= self.isHandleOptional(param, params)
# Remove redundant ancestor lists # Remove redundant ancestor lists
for param in handles: for param in handles:
paramname = param.find('name') paramname = param.find('name')
paramtype = param.find('type') paramtype = param.find('type')
removals = [] removals = []
for ancestors in ancestormap.items(): for ancestors in ancestormap.items():
if paramtype.text in ancestors[1]: if paramtype.text in ancestors[1]:
removals.append(ancestors[0]) removals.append(ancestors[0])
if removals != []: if removals != []:
for removal in removals: for removal in removals:
del(ancestormap[removal]) del(ancestormap[removal])
# Intersect # Intersect
if len(ancestormap.values()) > 1: if len(ancestormap.values()) > 1:
current = list(ancestormap.values())[0] current = list(ancestormap.values())[0]
for ancestors in list(ancestormap.values())[1:]: for ancestors in list(ancestormap.values())[1:]:
current = [val for val in current if val in ancestors] current = [val for val in current if val in ancestors]
if len(current) > 1: if len(current) > 1:
commonancestor = current[0] commonancestor = current[0]
if len(ancestormap.keys()) > 1: if len(ancestormap.keys()) > 1:
asciidoc += '* ' asciidoc += '* '
parametertexts = [] parametertexts = []
for param in ancestormap.keys(): for param in ancestormap.keys():
paramname = param.find('name') paramname = param.find('name')
parametertext = self.makeParameterName(paramname.text) parametertext = self.makeParameterName(paramname.text)
if self.paramIsArray(param): if self.paramIsArray(param):
parametertext = 'the elements of ' + parametertext parametertext = 'the elements of ' + parametertext
parametertexts.append(parametertext) parametertexts.append(parametertext)
parametertexts.sort() parametertexts.sort()
if len(parametertexts) > 2: if len(parametertexts) > 2:
asciidoc += 'Each of ' asciidoc += 'Each of '
else: else:
asciidoc += 'Both of ' asciidoc += 'Both of '
asciidoc += ", ".join(parametertexts[:-1]) asciidoc += ", ".join(parametertexts[:-1])
asciidoc += ', and ' asciidoc += ', and '
asciidoc += parametertexts[-1] asciidoc += parametertexts[-1]
@ -657,9 +657,9 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += ' must: have been created, allocated, or retrieved from the same ' asciidoc += ' must: have been created, allocated, or retrieved from the same '
asciidoc += self.makeStructName(commonancestor) asciidoc += self.makeStructName(commonancestor)
asciidoc += '\n' asciidoc += '\n'
return asciidoc return asciidoc
# #
# Generate an asciidoc validity line for the sType value of a struct # Generate an asciidoc validity line for the sType value of a struct
def makeStructureType(self, blockname, param): def makeStructureType(self, blockname, param):
@ -670,15 +670,28 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += self.makeParameterName(paramname.text) asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be ' asciidoc += ' must: be '
structuretype = '' values = param.attrib.get('values')
for elem in re.findall(r'(([A-Z][a-z]+)|([A-Z][A-Z]+))', blockname): if values:
if elem[0] == 'Vk': # Extract each enumerant value. They could be validated in the
structuretype += 'VK_STRUCTURE_TYPE_' # same fashion as validextensionstructs in
else: # makeStructureExtensionPointer, although that's not relevant in
structuretype += elem[0].upper() # the current extension struct model.
structuretype += '_' valuelist = [ self.makeEnumerantName(v) for v in values.split(',') ]
else:
structuretype = ''
for elem in re.findall(r'(([A-Z][a-z]+)|([A-Z][A-Z]+))', blockname):
if elem[0] == 'Vk':
structuretype += 'VK_STRUCTURE_TYPE_'
else:
structuretype += elem[0].upper()
structuretype += '_'
valuelist = [ self.makeEnumerantName(structuretype[:-1]) ]
asciidoc += self.makeEnumerantName(structuretype[:-1]) if len(valuelist) > 0:
if len(valuelist) == 1:
asciidoc += valuelist[0]
else:
asciidoc += (', ').join(valuelist[:-1]) + ', or ' + valuelist[-1]
asciidoc += '\n' asciidoc += '\n'
return asciidoc return asciidoc
@ -860,21 +873,21 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += self.makeParameterName(arraylength) asciidoc += self.makeParameterName(arraylength)
asciidoc += ' must: be greater than `0`' asciidoc += ' must: be greater than `0`'
asciidoc += '\n' asciidoc += '\n'
# Find the parents of all objects referenced in this command # Find the parents of all objects referenced in this command
for param in handles: for param in handles:
paramtype = param.find('type') paramtype = param.find('type')
# Don't detect a parent for return values! # Don't detect a parent for return values!
if not self.paramIsPointer(param) or (param.text is not None and 'const' in param.text): if not self.paramIsPointer(param) or (param.text is not None and 'const' in param.text):
parent = self.getHandleParent(paramtype.text) parent = self.getHandleParent(paramtype.text)
if parent is not None: if parent is not None:
asciidoc += self.makeAsciiDocHandleParent(param, params) asciidoc += self.makeAsciiDocHandleParent(param, params)
# Find the common ancestor of all objects referenced in this command # Find the common ancestor of all objects referenced in this command
asciidoc += self.makeAsciiDocHandlesCommonAncestor(handles, params) asciidoc += self.makeAsciiDocHandlesCommonAncestor(handles, params)
# Add in any plain-text validation language that should be added # Add in any plain-text validation language that should be added
for usage in usages: for usage in usages:
asciidoc += '* ' asciidoc += '* '

View File

@ -101,7 +101,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<type category="define">// Vulkan 1.0 version number <type category="define">// Vulkan 1.0 version number
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)</type> <!-- The patch version here should never be set to anything other than 0 --> #define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)</type> <!-- The patch version here should never be set to anything other than 0 -->
<type category="define">// Version of this file <type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 22</type> #define <name>VK_HEADER_VERSION</name> 23</type>
<type category="define"> <type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type> #define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -455,7 +455,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> <!-- Free-form description of the layer --> <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> <!-- Free-form description of the layer -->
</type> </type>
<type category="struct" name="VkApplicationInfo"> <type category="struct" name="VkApplicationInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO --> <member values="VK_STRUCTURE_TYPE_APPLICATION_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true" len="null-terminated">const <type>char</type>* <name>pApplicationName</name></member> <member optional="true" len="null-terminated">const <type>char</type>* <name>pApplicationName</name></member>
<member><type>uint32_t</type> <name>applicationVersion</name></member> <member><type>uint32_t</type> <name>applicationVersion</name></member>
@ -481,7 +481,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDeviceQueueCreateInfo"> <type category="struct" name="VkDeviceQueueCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkDeviceQueueCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkDeviceQueueCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>uint32_t</type> <name>queueFamilyIndex</name></member> <member><type>uint32_t</type> <name>queueFamilyIndex</name></member>
@ -494,7 +494,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDeviceCreateInfo"> <type category="struct" name="VkDeviceCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkDeviceCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkDeviceCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>uint32_t</type> <name>queueCreateInfoCount</name></member> <member><type>uint32_t</type> <name>queueCreateInfoCount</name></member>
@ -509,7 +509,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkInstanceCreateInfo"> <type category="struct" name="VkInstanceCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkInstanceCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkInstanceCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member optional="true">const <type>VkApplicationInfo</type>* <name>pApplicationInfo</name></member> <member optional="true">const <type>VkApplicationInfo</type>* <name>pApplicationInfo</name></member>
@ -533,7 +533,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkMemoryHeap</type> <name>memoryHeaps</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member> <member><type>VkMemoryHeap</type> <name>memoryHeaps</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member>
</type> </type>
<type category="struct" name="VkMemoryAllocateInfo"> <type category="struct" name="VkMemoryAllocateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO --> <member values="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkDedicatedAllocationMemoryAllocateInfoNV">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member validextensionstructs="VkDedicatedAllocationMemoryAllocateInfoNV">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDeviceSize</type> <name>allocationSize</name></member> <!-- Size of memory allocation --> <member><type>VkDeviceSize</type> <name>allocationSize</name></member> <!-- Size of memory allocation -->
<member><type>uint32_t</type> <name>memoryTypeIndex</name></member> <!-- Index of the of the memory type to allocate from --> <member><type>uint32_t</type> <name>memoryTypeIndex</name></member> <!-- Index of the of the memory type to allocate from -->
@ -568,7 +568,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member optional="true"><type>VkMemoryHeapFlags</type> <name>flags</name></member> <!-- Flags for the heap--> <member optional="true"><type>VkMemoryHeapFlags</type> <name>flags</name></member> <!-- Flags for the heap-->
</type> </type>
<type category="struct" name="VkMappedMemoryRange"> <type category="struct" name="VkMappedMemoryRange">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE --> <member values="VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDeviceMemory</type> <name>memory</name></member> <!-- Mapped memory object --> <member><type>VkDeviceMemory</type> <name>memory</name></member> <!-- Mapped memory object -->
<member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Offset within the memory object where the range starts --> <member><type>VkDeviceSize</type> <name>offset</name></member> <!-- Offset within the memory object where the range starts -->
@ -609,7 +609,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member noautovalidity="true"><type>VkImageLayout</type> <name>imageLayout</name></member> <!-- Layout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE). --> <member noautovalidity="true"><type>VkImageLayout</type> <name>imageLayout</name></member> <!-- Layout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE). -->
</type> </type>
<type category="struct" name="VkWriteDescriptorSet"> <type category="struct" name="VkWriteDescriptorSet">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET --> <member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDescriptorSet</type> <name>dstSet</name></member> <!-- Destination descriptor set --> <member><type>VkDescriptorSet</type> <name>dstSet</name></member> <!-- Destination descriptor set -->
<member><type>uint32_t</type> <name>dstBinding</name></member> <!-- Binding within the destination descriptor set to write --> <member><type>uint32_t</type> <name>dstBinding</name></member> <!-- Binding within the destination descriptor set to write -->
@ -640,7 +640,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkCopyDescriptorSet"> <type category="struct" name="VkCopyDescriptorSet">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET --> <member values="VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDescriptorSet</type> <name>srcSet</name></member> <!-- Source descriptor set --> <member><type>VkDescriptorSet</type> <name>srcSet</name></member> <!-- Source descriptor set -->
<member><type>uint32_t</type> <name>srcBinding</name></member> <!-- Binding within the source descriptor set to copy from --> <member><type>uint32_t</type> <name>srcBinding</name></member> <!-- Binding within the source descriptor set to copy from -->
@ -658,7 +658,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkBufferCreateInfo"> <type category="struct" name="VkBufferCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkDedicatedAllocationBufferCreateInfoNV">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member validextensionstructs="VkDedicatedAllocationBufferCreateInfoNV">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>VkBufferCreateFlags</type> <name>flags</name></member> <!-- Buffer creation flags --> <member optional="true"><type>VkBufferCreateFlags</type> <name>flags</name></member> <!-- Buffer creation flags -->
<member><type>VkDeviceSize</type> <name>size</name></member> <!-- Specified in bytes --> <member><type>VkDeviceSize</type> <name>size</name></member> <!-- Specified in bytes -->
@ -677,7 +677,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkBufferViewCreateInfo"> <type category="struct" name="VkBufferViewCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>VkBufferViewCreateFlags</type><name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkBufferViewCreateFlags</type><name>flags</name></member> <!-- Reserved -->
<member><type>VkBuffer</type> <name>buffer</name></member> <member><type>VkBuffer</type> <name>buffer</name></member>
@ -730,13 +730,13 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkMemoryBarrier"> <type category="struct" name="VkMemoryBarrier">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER --> <member values="VK_STRUCTURE_TYPE_MEMORY_BARRIER"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>VkAccessFlags</type> <name>srcAccessMask</name></member> <!-- Memory accesses from the source of the dependency to synchronize --> <member optional="true"><type>VkAccessFlags</type> <name>srcAccessMask</name></member> <!-- Memory accesses from the source of the dependency to synchronize -->
<member optional="true"><type>VkAccessFlags</type> <name>dstAccessMask</name></member> <!-- Memory accesses from the destination of the dependency to synchronize --> <member optional="true"><type>VkAccessFlags</type> <name>dstAccessMask</name></member> <!-- Memory accesses from the destination of the dependency to synchronize -->
</type> </type>
<type category="struct" name="VkBufferMemoryBarrier"> <type category="struct" name="VkBufferMemoryBarrier">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER --> <member values="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>VkAccessFlags</type> <name>srcAccessMask</name></member> <!-- Memory accesses from the source of the dependency to synchronize --> <member optional="true"><type>VkAccessFlags</type> <name>srcAccessMask</name></member> <!-- Memory accesses from the source of the dependency to synchronize -->
<member optional="true"><type>VkAccessFlags</type> <name>dstAccessMask</name></member> <!-- Memory accesses from the destination of the dependency to synchronize --> <member optional="true"><type>VkAccessFlags</type> <name>dstAccessMask</name></member> <!-- Memory accesses from the destination of the dependency to synchronize -->
@ -755,7 +755,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkImageMemoryBarrier"> <type category="struct" name="VkImageMemoryBarrier">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER --> <member values="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>VkAccessFlags</type> <name>srcAccessMask</name></member> <!-- Memory accesses from the source of the dependency to synchronize --> <member optional="true"><type>VkAccessFlags</type> <name>srcAccessMask</name></member> <!-- Memory accesses from the source of the dependency to synchronize -->
<member optional="true"><type>VkAccessFlags</type> <name>dstAccessMask</name></member> <!-- Memory accesses from the destination of the dependency to synchronize --> <member optional="true"><type>VkAccessFlags</type> <name>dstAccessMask</name></member> <!-- Memory accesses from the destination of the dependency to synchronize -->
@ -782,7 +782,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkImageCreateInfo"> <type category="struct" name="VkImageCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkDedicatedAllocationImageCreateInfoNV">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member validextensionstructs="VkDedicatedAllocationImageCreateInfoNV">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>VkImageCreateFlags</type> <name>flags</name></member> <!-- Image creation flags --> <member optional="true"><type>VkImageCreateFlags</type> <name>flags</name></member> <!-- Image creation flags -->
<member><type>VkImageType</type> <name>imageType</name></member> <member><type>VkImageType</type> <name>imageType</name></member>
@ -850,7 +850,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkDeviceSize</type> <name>depthPitch</name></member> <!-- Specified in bytes --> <member><type>VkDeviceSize</type> <name>depthPitch</name></member> <!-- Specified in bytes -->
</type> </type>
<type category="struct" name="VkImageViewCreateInfo"> <type category="struct" name="VkImageViewCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkImageViewCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkImageViewCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkImage</type> <name>image</name></member> <member><type>VkImage</type> <name>image</name></member>
@ -877,7 +877,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>pname:subresourceRange must: be a valid image subresource range for pname:image (see &lt;&lt;resources-image-views&gt;&gt;)</usage> <usage>pname:subresourceRange must: be a valid image subresource range for pname:image (see &lt;&lt;resources-image-views&gt;&gt;)</usage>
<usage>If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be compatible with the pname:format used to create pname:image, as defined in &lt;&lt;features-formats-compatibility-classes,Format Compatibility Classes&gt;&gt;</usage> <usage>If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be compatible with the pname:format used to create pname:image, as defined in &lt;&lt;features-formats-compatibility-classes,Format Compatibility Classes&gt;&gt;</usage>
<usage>If pname:image was not created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be identical to the pname:format used to create pname:image</usage> <usage>If pname:image was not created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be identical to the pname:format used to create pname:image</usage>
<usage>pname:subResourceRange and pname:viewType must: be compatible with the image, as described in the &lt;&lt;resources-image-views-compatibility,table below&gt;&gt;</usage> <usage>pname:subResourceRange and pname:viewType must: be compatible with the image, as described in the &lt;&lt;resources-image-views-compatibility,compatibility table&gt;&gt;</usage>
</validity> </validity>
</type> </type>
<type category="struct" name="VkBufferCopy"> <type category="struct" name="VkBufferCopy">
@ -939,7 +939,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member len="bindCount">const <type>VkSparseImageMemoryBind</type>* <name>pBinds</name></member> <member len="bindCount">const <type>VkSparseImageMemoryBind</type>* <name>pBinds</name></member>
</type> </type>
<type category="struct" name="VkBindSparseInfo"> <type category="struct" name="VkBindSparseInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO --> <member values="VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure. -->
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member> <member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member>
<member len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></member> <member len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></member>
@ -1045,7 +1045,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkShaderModuleCreateInfo"> <type category="struct" name="VkShaderModuleCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkShaderModuleCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkShaderModuleCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>size_t</type> <name>codeSize</name></member> <!-- Specified in bytes --> <member><type>size_t</type> <name>codeSize</name></member> <!-- Specified in bytes -->
@ -1072,7 +1072,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDescriptorSetLayoutCreateInfo"> <type category="struct" name="VkDescriptorSetLayoutCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkDescriptorSetLayoutCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkDescriptorSetLayoutCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member optional="true"><type>uint32_t</type> <name>bindingCount</name></member> <!-- Number of bindings in the descriptor set layout --> <member optional="true"><type>uint32_t</type> <name>bindingCount</name></member> <!-- Number of bindings in the descriptor set layout -->
@ -1086,7 +1086,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDescriptorPoolCreateInfo"> <type category="struct" name="VkDescriptorPoolCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkDescriptorPoolCreateFlags</type> <name>flags</name></member> <member optional="true"><type>VkDescriptorPoolCreateFlags</type> <name>flags</name></member>
<member><type>uint32_t</type> <name>maxSets</name></member> <member><type>uint32_t</type> <name>maxSets</name></member>
@ -1097,7 +1097,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDescriptorSetAllocateInfo"> <type category="struct" name="VkDescriptorSetAllocateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO --> <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDescriptorPool</type> <name>descriptorPool</name></member> <member><type>VkDescriptorPool</type> <name>descriptorPool</name></member>
<member><type>uint32_t</type> <name>descriptorSetCount</name></member> <member><type>uint32_t</type> <name>descriptorSetCount</name></member>
@ -1126,7 +1126,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineShaderStageCreateInfo"> <type category="struct" name="VkPipelineShaderStageCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineShaderStageCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineShaderStageCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkShaderStageFlagBits</type> <name>stage</name></member> <!-- Shader stage --> <member><type>VkShaderStageFlagBits</type> <name>stage</name></member> <!-- Shader stage -->
@ -1153,7 +1153,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkComputePipelineCreateInfo"> <type category="struct" name="VkComputePipelineCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineCreateFlags</type> <name>flags</name></member> <!-- Pipeline creation flags --> <member optional="true"><type>VkPipelineCreateFlags</type> <name>flags</name></member> <!-- Pipeline creation flags -->
<member><type>VkPipelineShaderStageCreateInfo</type> <name>stage</name></member> <member><type>VkPipelineShaderStageCreateInfo</type> <name>stage</name></member>
@ -1193,7 +1193,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineVertexInputStateCreateInfo"> <type category="struct" name="VkPipelineVertexInputStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineVertexInputStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineVertexInputStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member optional="true"><type>uint32_t</type> <name>vertexBindingDescriptionCount</name></member> <!-- number of bindings --> <member optional="true"><type>uint32_t</type> <name>vertexBindingDescriptionCount</name></member> <!-- number of bindings -->
@ -1210,7 +1210,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineInputAssemblyStateCreateInfo"> <type category="struct" name="VkPipelineInputAssemblyStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_IINPUT_ASSEMBLY_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineInputAssemblyStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineInputAssemblyStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkPrimitiveTopology</type> <name>topology</name></member> <member><type>VkPrimitiveTopology</type> <name>topology</name></member>
@ -1222,7 +1222,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineTessellationStateCreateInfo"> <type category="struct" name="VkPipelineTessellationStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineTessellationStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineTessellationStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>uint32_t</type> <name>patchControlPoints</name></member> <member><type>uint32_t</type> <name>patchControlPoints</name></member>
@ -1231,7 +1231,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineViewportStateCreateInfo"> <type category="struct" name="VkPipelineViewportStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineViewportStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineViewportStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>uint32_t</type> <name>viewportCount</name></member> <member><type>uint32_t</type> <name>viewportCount</name></member>
@ -1247,7 +1247,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineRasterizationStateCreateInfo"> <type category="struct" name="VkPipelineRasterizationStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkPipelineRasterizationStateRasterizationOrderAMD">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member validextensionstructs="VkPipelineRasterizationStateRasterizationOrderAMD">const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineRasterizationStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineRasterizationStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkBool32</type> <name>depthClampEnable</name></member> <member><type>VkBool32</type> <name>depthClampEnable</name></member>
@ -1266,7 +1266,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineMultisampleStateCreateInfo"> <type category="struct" name="VkPipelineMultisampleStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineMultisampleStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineMultisampleStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkSampleCountFlagBits</type> <name>rasterizationSamples</name></member> <!-- Number of samples used for rasterization --> <member><type>VkSampleCountFlagBits</type> <name>rasterizationSamples</name></member> <!-- Number of samples used for rasterization -->
@ -1298,7 +1298,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineColorBlendStateCreateInfo"> <type category="struct" name="VkPipelineColorBlendStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineColorBlendStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineColorBlendStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkBool32</type> <name>logicOpEnable</name></member> <member><type>VkBool32</type> <name>logicOpEnable</name></member>
@ -1313,7 +1313,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineDynamicStateCreateInfo"> <type category="struct" name="VkPipelineDynamicStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineDynamicStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineDynamicStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>uint32_t</type> <name>dynamicStateCount</name></member> <member><type>uint32_t</type> <name>dynamicStateCount</name></member>
@ -1329,7 +1329,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>uint32_t</type> <name>reference</name></member> <member><type>uint32_t</type> <name>reference</name></member>
</type> </type>
<type category="struct" name="VkPipelineDepthStencilStateCreateInfo"> <type category="struct" name="VkPipelineDepthStencilStateCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineDepthStencilStateCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineDepthStencilStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkBool32</type> <name>depthTestEnable</name></member> <member><type>VkBool32</type> <name>depthTestEnable</name></member>
@ -1346,7 +1346,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkGraphicsPipelineCreateInfo"> <type category="struct" name="VkGraphicsPipelineCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineCreateFlags</type> <name>flags</name></member> <!-- Pipeline creation flags --> <member optional="true"><type>VkPipelineCreateFlags</type> <name>flags</name></member> <!-- Pipeline creation flags -->
<member><type>uint32_t</type> <name>stageCount</name></member> <member><type>uint32_t</type> <name>stageCount</name></member>
@ -1408,7 +1408,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineCacheCreateInfo"> <type category="struct" name="VkPipelineCacheCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineCacheCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineCacheCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member optional="true"><type>size_t</type> <name>initialDataSize</name></member> <!-- Size of initial data to populate cache, in bytes --> <member optional="true"><type>size_t</type> <name>initialDataSize</name></member> <!-- Size of initial data to populate cache, in bytes -->
@ -1430,7 +1430,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPipelineLayoutCreateInfo"> <type category="struct" name="VkPipelineLayoutCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkPipelineLayoutCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkPipelineLayoutCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member optional="true"><type>uint32_t</type> <name>setLayoutCount</name></member> <!-- Number of descriptor sets interfaced by the pipeline --> <member optional="true"><type>uint32_t</type> <name>setLayoutCount</name></member> <!-- Number of descriptor sets interfaced by the pipeline -->
@ -1447,7 +1447,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkSamplerCreateInfo"> <type category="struct" name="VkSamplerCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkSamplerCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkSamplerCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkFilter</type> <name>magFilter</name></member> <!-- Filter mode for magnification --> <member><type>VkFilter</type> <name>magFilter</name></member> <!-- Filter mode for magnification -->
@ -1481,7 +1481,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkCommandPoolCreateInfo"> <type category="struct" name="VkCommandPoolCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkCommandPoolCreateFlags</type> <name>flags</name></member> <!-- Command pool creation flags --> <member optional="true"><type>VkCommandPoolCreateFlags</type> <name>flags</name></member> <!-- Command pool creation flags -->
<member><type>uint32_t</type> <name>queueFamilyIndex</name></member> <member><type>uint32_t</type> <name>queueFamilyIndex</name></member>
@ -1490,7 +1490,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkCommandBufferAllocateInfo"> <type category="struct" name="VkCommandBufferAllocateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO --> <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkCommandPool</type> <name>commandPool</name></member> <member><type>VkCommandPool</type> <name>commandPool</name></member>
<member><type>VkCommandBufferLevel</type> <name>level</name></member> <member><type>VkCommandBufferLevel</type> <name>level</name></member>
@ -1500,7 +1500,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkCommandBufferInheritanceInfo"> <type category="struct" name="VkCommandBufferInheritanceInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO --> <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true" noautovalidity="true"><type>VkRenderPass</type> <name>renderPass</name></member> <!-- Render pass for secondary command buffers --> <member optional="true" noautovalidity="true"><type>VkRenderPass</type> <name>renderPass</name></member> <!-- Render pass for secondary command buffers -->
<member><type>uint32_t</type> <name>subpass</name></member> <member><type>uint32_t</type> <name>subpass</name></member>
@ -1515,7 +1515,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkCommandBufferBeginInfo"> <type category="struct" name="VkCommandBufferBeginInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO --> <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkCommandBufferUsageFlags</type> <name>flags</name></member> <!-- Command buffer usage flags --> <member optional="true"><type>VkCommandBufferUsageFlags</type> <name>flags</name></member> <!-- Command buffer usage flags -->
<member optional="true" noautovalidity="true">const <type>VkCommandBufferInheritanceInfo</type>* <name>pInheritanceInfo</name></member> <!-- Pointer to inheritance info for secondary command buffers --> <member optional="true" noautovalidity="true">const <type>VkCommandBufferInheritanceInfo</type>* <name>pInheritanceInfo</name></member> <!-- Pointer to inheritance info for secondary command buffers -->
@ -1526,7 +1526,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkRenderPassBeginInfo"> <type category="struct" name="VkRenderPassBeginInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO --> <member values="VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkRenderPass</type> <name>renderPass</name></member> <member><type>VkRenderPass</type> <name>renderPass</name></member>
<member><type>VkFramebuffer</type> <name>framebuffer</name></member> <member><type>VkFramebuffer</type> <name>framebuffer</name></member>
@ -1626,7 +1626,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkRenderPassCreateInfo"> <type category="struct" name="VkRenderPassCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkRenderPassCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkRenderPassCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member optional="true"><type>uint32_t</type> <name>attachmentCount</name></member> <member optional="true"><type>uint32_t</type> <name>attachmentCount</name></member>
@ -1643,12 +1643,12 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkEventCreateInfo"> <type category="struct" name="VkEventCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkEventCreateFlags</type> <name>flags</name></member> <!-- Event creation flags --> <member optional="true"><type>VkEventCreateFlags</type> <name>flags</name></member> <!-- Event creation flags -->
</type> </type>
<type category="struct" name="VkFenceCreateInfo"> <type category="struct" name="VkFenceCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkFenceCreateFlags</type> <name>flags</name></member> <!-- Fence creation flags --> <member optional="true"><type>VkFenceCreateFlags</type> <name>flags</name></member> <!-- Fence creation flags -->
</type> </type>
@ -1850,12 +1850,12 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkDeviceSize</type> <name>nonCoherentAtomSize</name></member> <!-- minimum size and alignment for non-coherent host-mapped device memory access --> <member><type>VkDeviceSize</type> <name>nonCoherentAtomSize</name></member> <!-- minimum size and alignment for non-coherent host-mapped device memory access -->
</type> </type>
<type category="struct" name="VkSemaphoreCreateInfo"> <type category="struct" name="VkSemaphoreCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkSemaphoreCreateFlags</type> <name>flags</name></member> <!-- Semaphore creation flags --> <member optional="true"><type>VkSemaphoreCreateFlags</type> <name>flags</name></member> <!-- Semaphore creation flags -->
</type> </type>
<type category="struct" name="VkQueryPoolCreateInfo"> <type category="struct" name="VkQueryPoolCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkQueryPoolCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkQueryPoolCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkQueryType</type> <name>queryType</name></member> <member><type>VkQueryType</type> <name>queryType</name></member>
@ -1867,7 +1867,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkFramebufferCreateInfo"> <type category="struct" name="VkFramebufferCreateInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO --> <member values="VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkFramebufferCreateFlags</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkFramebufferCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkRenderPass</type> <name>renderPass</name></member> <member><type>VkRenderPass</type> <name>renderPass</name></member>
@ -1924,7 +1924,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkSubmitInfo"> <type category="struct" name="VkSubmitInfo">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO --> <member values="VK_STRUCTURE_TYPE_SUBMIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member> <member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member>
<member len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></member> <member len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></member>
@ -1971,7 +1971,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkDisplayModeParametersKHR</type> <name>parameters</name></member> <!-- The parameters this mode uses. --> <member><type>VkDisplayModeParametersKHR</type> <name>parameters</name></member> <!-- The parameters this mode uses. -->
</type> </type>
<type category="struct" name="VkDisplayModeCreateInfoKHR"> <type category="struct" name="VkDisplayModeCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkDisplayModeCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkDisplayModeCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkDisplayModeParametersKHR</type> <name>parameters</name></member> <!-- The parameters this mode uses. --> <member><type>VkDisplayModeParametersKHR</type> <name>parameters</name></member> <!-- The parameters this mode uses. -->
@ -1992,7 +1992,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkExtent2D</type> <name>maxDstExtent</name></member> <member><type>VkExtent2D</type> <name>maxDstExtent</name></member>
</type> </type>
<type category="struct" name="VkDisplaySurfaceCreateInfoKHR"> <type category="struct" name="VkDisplaySurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkDisplaySurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkDisplaySurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkDisplayModeKHR</type> <name>displayMode</name></member> <!-- The mode to use when displaying this surface --> <member><type>VkDisplayModeKHR</type> <name>displayMode</name></member> <!-- The mode to use when displaying this surface -->
@ -2011,7 +2011,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDisplayPresentInfoKHR"> <type category="struct" name="VkDisplayPresentInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkRect2D</type> <name>srcRect</name></member> <!-- Rectangle within the presentable image to read pixel data from when presenting to the display. --> <member><type>VkRect2D</type> <name>srcRect</name></member> <!-- Rectangle within the presentable image to read pixel data from when presenting to the display. -->
<member><type>VkRect2D</type> <name>dstRect</name></member> <!-- Rectangle within the current display mode's visible region to display srcRectangle in. --> <member><type>VkRect2D</type> <name>dstRect</name></member> <!-- Rectangle within the current display mode's visible region to display srcRectangle in. -->
@ -2035,7 +2035,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member optional="true"><type>VkImageUsageFlags</type> <name>supportedUsageFlags</name></member> <!-- Supported image usage flags for the surface --> <member optional="true"><type>VkImageUsageFlags</type> <name>supportedUsageFlags</name></member> <!-- Supported image usage flags for the surface -->
</type> </type>
<type category="struct" name="VkAndroidSurfaceCreateInfoKHR"> <type category="struct" name="VkAndroidSurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkAndroidSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkAndroidSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>ANativeWindow</type>* <name>window</name></member> <member><type>ANativeWindow</type>* <name>window</name></member>
@ -2044,35 +2044,35 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkMirSurfaceCreateInfoKHR"> <type category="struct" name="VkMirSurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkMirSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkMirSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>MirConnection</type>* <name>connection</name></member> <member><type>MirConnection</type>* <name>connection</name></member>
<member><type>MirSurface</type>* <name>mirSurface</name></member> <member><type>MirSurface</type>* <name>mirSurface</name></member>
</type> </type>
<type category="struct" name="VkWaylandSurfaceCreateInfoKHR"> <type category="struct" name="VkWaylandSurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkWaylandSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkWaylandSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member>struct <type>wl_display</type>* <name>display</name></member> <member>struct <type>wl_display</type>* <name>display</name></member>
<member>struct <type>wl_surface</type>* <name>surface</name></member> <member>struct <type>wl_surface</type>* <name>surface</name></member>
</type> </type>
<type category="struct" name="VkWin32SurfaceCreateInfoKHR"> <type category="struct" name="VkWin32SurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkWin32SurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkWin32SurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>HINSTANCE</type> <name>hinstance</name></member> <member><type>HINSTANCE</type> <name>hinstance</name></member>
<member><type>HWND</type> <name>hwnd</name></member> <member><type>HWND</type> <name>hwnd</name></member>
</type> </type>
<type category="struct" name="VkXlibSurfaceCreateInfoKHR"> <type category="struct" name="VkXlibSurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkXlibSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkXlibSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>Display</type>* <name>dpy</name></member> <member><type>Display</type>* <name>dpy</name></member>
<member><type>Window</type> <name>window</name></member> <member><type>Window</type> <name>window</name></member>
</type> </type>
<type category="struct" name="VkXcbSurfaceCreateInfoKHR"> <type category="struct" name="VkXcbSurfaceCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkXcbSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkXcbSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>xcb_connection_t</type>* <name>connection</name></member> <member><type>xcb_connection_t</type>* <name>connection</name></member>
@ -2083,7 +2083,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member><type>VkColorSpaceKHR</type> <name>colorSpace</name></member> <!-- and colorspace for the surface --> <member><type>VkColorSpaceKHR</type> <name>colorSpace</name></member> <!-- and colorspace for the surface -->
</type> </type>
<type category="struct" name="VkSwapchainCreateInfoKHR"> <type category="struct" name="VkSwapchainCreateInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkSwapchainCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved --> <member optional="true"><type>VkSwapchainCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkSurfaceKHR</type> <name>surface</name></member> <!-- The swapchain's target surface --> <member><type>VkSurfaceKHR</type> <name>surface</name></member> <!-- The swapchain's target surface -->
@ -2118,7 +2118,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkPresentInfoKHR"> <type category="struct" name="VkPresentInfoKHR">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PRESENT_INFO_KHR --> <member values="VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member> <!-- Number of semaphores to wait for before presenting --> <member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member> <!-- Number of semaphores to wait for before presenting -->
<member optional="true" len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></member> <!-- Semaphores to wait for before presenting --> <member optional="true" len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></member> <!-- Semaphores to wait for before presenting -->
@ -2132,26 +2132,26 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDebugReportCallbackCreateInfoEXT"> <type category="struct" name="VkDebugReportCallbackCreateInfoEXT">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT --> <member values="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDebugReportFlagsEXT</type> <name>flags</name></member> <!-- Indicates which events call this callback--> <member><type>VkDebugReportFlagsEXT</type> <name>flags</name></member> <!-- Indicates which events call this callback-->
<member><type>PFN_vkDebugReportCallbackEXT</type> <name>pfnCallback</name></member> <!-- Function pointer of a callback function--> <member><type>PFN_vkDebugReportCallbackEXT</type> <name>pfnCallback</name></member> <!-- Function pointer of a callback function-->
<member optional="true"><type>void</type>* <name>pUserData</name></member> <!-- User data provided to callback function --> <member optional="true"><type>void</type>* <name>pUserData</name></member> <!-- User data provided to callback function -->
</type> </type>
<type category="struct" name="VkPipelineRasterizationStateRasterizationOrderAMD"> <type category="struct" name="VkPipelineRasterizationStateRasterizationOrderAMD">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD --> <member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkRasterizationOrderAMD</type> <name>rasterizationOrder</name></member> <!-- Rasterization order to use for the pipeline --> <member><type>VkRasterizationOrderAMD</type> <name>rasterizationOrder</name></member> <!-- Rasterization order to use for the pipeline -->
</type> </type>
<type category="struct" name="VkDebugMarkerObjectNameInfoEXT"> <type category="struct" name="VkDebugMarkerObjectNameInfoEXT">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT --> <member values="VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDebugReportObjectTypeEXT</type> <name>objectType</name></member> <!-- The type of the object --> <member><type>VkDebugReportObjectTypeEXT</type> <name>objectType</name></member> <!-- The type of the object -->
<member><type>uint64_t</type> <name>object</name></member> <!-- The handle of the object, cast to uint64_t --> <member><type>uint64_t</type> <name>object</name></member> <!-- The handle of the object, cast to uint64_t -->
<member len="null-terminated">const <type>char</type>* <name>pObjectName</name></member> <!-- Name to apply to the object --> <member len="null-terminated">const <type>char</type>* <name>pObjectName</name></member> <!-- Name to apply to the object -->
</type> </type>
<type category="struct" name="VkDebugMarkerObjectTagInfoEXT"> <type category="struct" name="VkDebugMarkerObjectTagInfoEXT">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT --> <member values="VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDebugReportObjectTypeEXT</type> <name>objectType</name></member> <!-- The type of the object --> <member><type>VkDebugReportObjectTypeEXT</type> <name>objectType</name></member> <!-- The type of the object -->
<member><type>uint64_t</type> <name>object</name></member> <!-- The handle of the object, cast to uint64_t --> <member><type>uint64_t</type> <name>object</name></member> <!-- The handle of the object, cast to uint64_t -->
@ -2160,13 +2160,13 @@ maintained in the master branch of the Khronos Vulkan Github project.
<member len="tagSize">const <type>void</type>* <name>pTag</name></member> <!-- Tag data to attach to the object --> <member len="tagSize">const <type>void</type>* <name>pTag</name></member> <!-- Tag data to attach to the object -->
</type> </type>
<type category="struct" name="VkDebugMarkerMarkerInfoEXT"> <type category="struct" name="VkDebugMarkerMarkerInfoEXT">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT --> <member values="VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member len="null-terminated">const <type>char</type>* <name>pMarkerName</name></member> <!-- Name of the debug marker --> <member len="null-terminated">const <type>char</type>* <name>pMarkerName</name></member> <!-- Name of the debug marker -->
<member optional="true"><type>float</type> <name>color</name>[4]</member> <!-- Optional color for debug marker --> <member optional="true"><type>float</type> <name>color</name>[4]</member> <!-- Optional color for debug marker -->
</type> </type>
<type category="struct" name="VkDedicatedAllocationImageCreateInfoNV"> <type category="struct" name="VkDedicatedAllocationImageCreateInfoNV">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV --> <member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this image uses a dedicated allocation --> <member><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this image uses a dedicated allocation -->
<validity> <validity>
@ -2174,7 +2174,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDedicatedAllocationBufferCreateInfoNV"> <type category="struct" name="VkDedicatedAllocationBufferCreateInfoNV">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV --> <member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this buffer uses a dedicated allocation --> <member><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this buffer uses a dedicated allocation -->
<validity> <validity>
@ -2182,7 +2182,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity> </validity>
</type> </type>
<type category="struct" name="VkDedicatedAllocationMemoryAllocateInfoNV"> <type category="struct" name="VkDedicatedAllocationMemoryAllocateInfoNV">
<member><type>VkStructureType</type> <name>sType</name></member> <!-- Must be VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV --> <member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkImage</type> <name>image</name></member> <!-- Image that this allocation will be bound to --> <member optional="true"><type>VkImage</type> <name>image</name></member> <!-- Image that this allocation will be bound to -->
<member optional="true"><type>VkBuffer</type> <name>buffer</name></member> <!-- Buffer that this allocation will be bound to --> <member optional="true"><type>VkBuffer</type> <name>buffer</name></member> <!-- Buffer that this allocation will be bound to -->
@ -3032,17 +3032,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<proto><type>PFN_vkVoidFunction</type> <name>vkGetDeviceProcAddr</name></proto> <proto><type>PFN_vkVoidFunction</type> <name>vkGetDeviceProcAddr</name></proto>
<param><type>VkDevice</type> <name>device</name></param> <param><type>VkDevice</type> <name>device</name></param>
<param len="null-terminated">const <type>char</type>* <name>pName</name></param> <param len="null-terminated">const <type>char</type>* <name>pName</name></param>
<validity>
</validity>
</command> </command>
<command> <command>
<proto><type>PFN_vkVoidFunction</type> <name>vkGetInstanceProcAddr</name></proto> <proto><type>PFN_vkVoidFunction</type> <name>vkGetInstanceProcAddr</name></proto>
<param optional="true"><type>VkInstance</type> <name>instance</name></param> <param optional="true"><type>VkInstance</type> <name>instance</name></param>
<param len="null-terminated">const <type>char</type>* <name>pName</name></param> <param len="null-terminated">const <type>char</type>* <name>pName</name></param>
<validity>
<usage>If pname:instance is `NULL`, pname:pName must: be "vkEnumerateInstanceExtensionProperties", "vkEnumerateInstanceLayerProperties", or "vkCreateInstance"</usage>
<usage>If pname:instance is not `NULL`, pname:pName mustnot: be "vkEnumerateInstanceExtensionProperties", "vkEnumerateInstanceLayerProperties", or "vkCreateInstance"</usage>
</validity>
</command> </command>
<command> <command>
<proto><type>void</type> <name>vkGetPhysicalDeviceProperties</name></proto> <proto><type>void</type> <name>vkGetPhysicalDeviceProperties</name></proto>
@ -3114,7 +3108,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</command> </command>
<command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY"> <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<proto><type>VkResult</type> <name>vkEnumerateDeviceLayerProperties</name></proto> <proto><type>VkResult</type> <name>vkEnumerateDeviceLayerProperties</name></proto>
<param optional="false,true"><type>VkPhysicalDevice</type> <name>physicalDevice</name></param> <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param> <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
<param optional="true" len="pPropertyCount"><type>VkLayerProperties</type>* <name>pProperties</name></param> <param optional="true" len="pPropertyCount"><type>VkLayerProperties</type>* <name>pProperties</name></param>
</command> </command>
@ -3953,6 +3947,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<validity> <validity>
<usage>Any given element of pname:pDescriptorSets must: have been created with a sname:VkDescriptorSetLayout that matches (is the same as, or defined identically to) the sname:VkDescriptorSetLayout at set _n_ in pname:layout, where _n_ is the sum of pname:firstSet and the index into pname:pDescriptorSets</usage> <usage>Any given element of pname:pDescriptorSets must: have been created with a sname:VkDescriptorSetLayout that matches (is the same as, or defined identically to) the sname:VkDescriptorSetLayout at set _n_ in pname:layout, where _n_ is the sum of pname:firstSet and the index into pname:pDescriptorSets</usage>
<usage>pname:dynamicOffsetCount must: be equal to the total number of dynamic descriptors in pname:pDescriptorSets</usage> <usage>pname:dynamicOffsetCount must: be equal to the total number of dynamic descriptors in pname:pDescriptorSets</usage>
<usage>The sum of pname:firstSet and pname:descriptorSetCount must: be less than or equal to sname:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when pname:layout was created</usage>
<usage>pname:pipelineBindPoint must: be supported by the pname:commandBuffer's parent sname:VkCommandPool's queue family</usage> <usage>pname:pipelineBindPoint must: be supported by the pname:commandBuffer's parent sname:VkCommandPool's queue family</usage>
<usage>Any given element of pname:pDynamicOffsets must: satisfy the required alignment for the corresponding descriptor binding's descriptor type</usage> <usage>Any given element of pname:pDynamicOffsets must: satisfy the required alignment for the corresponding descriptor binding's descriptor type</usage>
</validity> </validity>
@ -4547,6 +4542,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<usage>Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag</usage> <usage>Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag</usage>
<usage>Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag</usage> <usage>Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag</usage>
<usage>Any given element of pname:pCommandBuffers must: be in the executable state</usage> <usage>Any given element of pname:pCommandBuffers must: be in the executable state</usage>
<usage>Any given element of pname:pCommandBuffers must: have been allocated from a sname:VkCommandPool that was created for the same queue family as the sname:VkCommandPool from which pname:commandBuffer was allocated</usage>
<usage>If fname:vkCmdExecuteCommands is being called within a render pass instance, that render pass instance must: have been begun with the pname:contents parameter of fname:vkCmdBeginRenderPass set to ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS</usage> <usage>If fname:vkCmdExecuteCommands is being called within a render pass instance, that render pass instance must: have been begun with the pname:contents parameter of fname:vkCmdBeginRenderPass set to ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS</usage>
<usage>If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</usage> <usage>If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT</usage>
<usage>If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the index of the subpass which the given command buffer will be executed in</usage> <usage>If fname:vkCmdExecuteCommands is being called within a render pass instance, any given element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the index of the subpass which the given command buffer will be executed in</usage>
@ -4595,7 +4591,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param> <param optional="false,true"><type>uint32_t</type>* <name>pPropertyCount</name></param>
<param optional="true" len="pPropertyCount"><type>VkDisplayModePropertiesKHR</type>* <name>pProperties</name></param> <param optional="true" len="pPropertyCount"><type>VkDisplayModePropertiesKHR</type>* <name>pProperties</name></param>
</command> </command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY"> <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED">
<proto><type>VkResult</type> <name>vkCreateDisplayModeKHR</name></proto> <proto><type>VkResult</type> <name>vkCreateDisplayModeKHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param> <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param externsync="true"><type>VkDisplayKHR</type> <name>display</name></param> <param externsync="true"><type>VkDisplayKHR</type> <name>display</name></param>
@ -5540,5 +5536,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<enum value="&quot;VK_NV_extension_53&quot;" name="VK_NV_EXTENSION_53_EXTENSION_NAME"/> <enum value="&quot;VK_NV_extension_53&quot;" name="VK_NV_EXTENSION_53_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="VK_NV_extension_54" number="54" author="NVIDIA" contact="Jeff Bolz @jbolz" supported="disabled">
<require>
<enum value="0" name="VK_NV_EXTENSION_54_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_54&quot;" name="VK_NV_EXTENSION_54_EXTENSION_NAME"/>
</require>
</extension>
</extensions> </extensions>
</registry> </registry>

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file // Version of this file
#define VK_HEADER_VERSION 22 #define VK_HEADER_VERSION 23
#define VK_NULL_HANDLE 0 #define VK_NULL_HANDLE 0