Change log for August 5, 2016 Vulkan 1.0.23 spec update:

* Bump API patch number and header version number to 23 for this update.

Github Issues:

  * Add explicit valid value attributes to pname:sType members in vk.xml
    (public issue 34).
  * Clarify usage of flink:vkGetInstanceProcAddr and
    flink:vkGetDeviceProcAddr (public issue 225).
  * Fix a copy-and-paste error in the description of
    pname:pSwapchainImageCount saying that it was the count of ``format
    pairs'' instead of ``swapchain images'' (public issue 292).
  * flink:vkCmdExecuteCommandBuffers requires all command buffers to be
    allocated from command pools created for the same queue family (public
    issue 296).
  * Remove bogus +optional+ attribute for
    flink:vkEnumerateDeviceLayerProperties::pname:physicalDevice from vk.xml
    (public issue 301).
  * Clean up the <<resources-image-views-compatibility,image and image view
    compatibility table>> reference and contents. Use full enumerant names.
    Refer to pname:layerCount in the ``view parameters'' column instead of
    pname:arrayLayers. Require N >= 1 for the cube array subview row, not
    just arrayLayers >= 6 N (public issue 304).
  * Modify description of <<resources-memory-aliasing,memory aliasing>> to
    be consistent with the description of
    <<resources-bufferimagegranularity,buffer image granularity>> (public
    issue 307).

Internal Issues:

  * Describe remaining +vk_platform.h+ macros in the <<boilerplate,API
    Boilerplate>> appendix (internal issue 6).
  * Clarify
    <<features-features-robustBufferAccess,pname:robustBufferAccess>>
    feature behavior; what memory can be accessed, how bounds checking is
    performed, and allowing for vectorization (internal issue 332).
  * Document markup for automatic extraction of reference pages from the
    spec sources in the style guide (internal issue 395).
  * Allow flink:vkCreateDisplayModeKHR to return
    ename:VK_ERROR_INITIALIZAION_FAILED_KHR if the user requests mode
    parameters that the specified display does not support (internal issue
    411).
  * Remove atomic counters (atomic_uint style) from KHR_vulkan_glsl, and
    more clearly remove the subroutine keyword alongside it (internal issue
    421).
  * Clarify behavior of flink:vkCmdBindDescriptorSets for descriptor sets
    not contained in the layout (internal issue 427).

Other Commits:

  * Change the order in which members of sname:VkAttachmentDescription and
    sname:VkPipelineInputAssemblyStateCreateInfo are described to match
    their order in the structures.
This commit is contained in:
Jon Leech 2016-08-05 05:11:02 -07:00
parent 1ca0ea1ef0
commit 7f7686d7f2
41 changed files with 750 additions and 377 deletions

View File

@ -33,8 +33,8 @@ Status
Version
Last Modified Date: 20-Jul-2016
Revision: 31
Last Modified Date: 1-Aug-2016
Revision: 32
Number
@ -62,7 +62,7 @@ Overview
The following features are removed:
* default uniforms (uniform variables not inside a uniform block),
except for opaque types
* atomic-counter bindings: atomic counters form a one-dimensional space
* atomic-counters (those based on atomic_uint)
* subroutines
* shared and packed block layouts
* 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*
or a scalar *bool*.
Only basic operators and constructors can be applied to a specialization
constant and still result in a specialization constant:
@ -324,7 +324,7 @@ Overview
in / out variable -> Input/Output, possibly with block (below)
in / out block... -> Input/Output, with Block decoration
buffer blockN { ... } ...; -> Uniform, with BufferBlock decoration
... uniform atomic_uint ... -> AtomicCounter
N/A -> AtomicCounter
shared -> Workgroup
<normal global> -> Private
@ -417,7 +417,7 @@ Overview
Mapping of layouts
std140/std430 -> explicit offsets/strides on struct
shared/packed -> not allowed
shared/packed -> not allowed
<default> -> not shared, but std140 or std430
max_vertices -> OutputVertices
@ -426,13 +426,13 @@ Overview
% -> OpUMod/OpSMod
mod() -> OpFMod
NA -> OpSRem/OpFRem
N/A -> OpSRem/OpFRem
atomicExchange() -> OpAtomicExchange
imageAtomicExchange() -> OpAtomicExchange
atomicCompSwap() -> OpAtomicCompareExchange
imageAtomicCompSwap() -> OpAtomicCompareExchange
NA -> OpAtomicCompareExchangeWeak
N/A -> OpAtomicCompareExchangeWeak
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
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
is determined by offline tool-chain use. See the documentation of such
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
texture2DArray textureBuffer texture2DMS
texture2DMSArray textureCubeArray
itexture1D itexture2D itexture3D
itextureCube itexture2DRect itexture1DArray
itexture2DArray itextureBuffer
@ -497,10 +497,17 @@ Changes to Chapter 3 of the OpenGL Shading Language Specification
subpassInput isubpassInput usubpassInput
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
Add into the tables in section 4.1, interleaved with the existing types,
using the existing descriptions (when not supplied below):
Add into the tables in section 4.1 Basic Types, interleaved with the
existing types, using the existing descriptions (when not supplied
below):
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
| integer subpass input
Remove the entry from the table in section 4.1 Basic Types:
atomic_uint
Add a new category in this section
"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
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(texture2D, sampler) or
e.g., sampler2D(texture2D, sampler) or
sampler2DShadow(texture2D, samplerShadow),
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
compile-time error to use them in any other stage."
Add to 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."
Remove the section 4.1.7.3 Atomic Counters
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
changed by redeclaring gl_FragCoord with the
origin_upper_left identifier."
To
"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
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
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."
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
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
@ -779,6 +789,8 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
takes just the provided binding number. The next consecutive binding
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:
"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 local_size_{xyz}_id qualifiers, to individually give the components
an id. For example:
layout(local_size_x_id = 18, local_size_z_id = 19) in;
"This leaves gl_WorkGroupSize.y as a non-specialization constant, with
gl_WorkGroupSize being a partially specialized vector. Its x and z
components can be later specialized using the ids 18 and 19. These ids
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_id = 18) in; // constant_id for x
layout(local_size_z_id = 19) in; // constant_id for z
"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,
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.
"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.
"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."
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 ( && , || , ^^ )
* 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 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,
the specified precision qualifier is the precision qualification of
the result."
the result."
Add precision qualifiers to the following in desktop versions:
genIType floatBitsToInt (highp genFType value)
genUType floatBitsToUint(highp genFType 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,
out highp genIType msb, out highp genIType lsb)
Remove section 8.10 Atomic-Counter Functions
Add a section
"8.X Subpass Functions
@ -1161,7 +1179,7 @@ Changes to the grammar
| LEFT_BRACKET constant_expression RIGHT_BRACKET
to
to
| LEFT_BRACKET conditional_expression RIGHT_BRACKET
@ -1169,10 +1187,14 @@ Changes to the grammar
| array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET
to
to
| array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET
Remove the ATOMIC_UINT type_specifier_nonarray.
Remove all instances of the SUBROUTINE keyword.
Issues
1. Can we have specialization sizes in an array in a block? That prevents
@ -1286,6 +1308,7 @@ Revision History
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
30 12-Apr-2016 JohnK Restrict spec-const operations to non-float
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)
# A generated included file with the spec version, date, and git commit
SPECVERSION = specversion.txt
SPECREVISION = 1.0.22
SPECREVISION = 1.0.23
SPECREMARK =
# Spec targets

View File

@ -8,6 +8,6 @@ ifdef::doctype-manpage[]
endif::doctype-manpage[]
------------------------------------------------------------------------------
// 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[]
// 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
Specification, this content has been migrated to the <<vulkan-styleguide,
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.

View File

@ -471,7 +471,7 @@ Memory Dependency::
A sequence of operations that makes writes available, performs an
execution dependency between the writes and subsequent accesses, and
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
access type.
@ -484,7 +484,7 @@ Memory Type::
Mip Tail Region::
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.
Non-Dispatchable Handle::

View File

@ -92,7 +92,7 @@ A SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
following rules:
* 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.
* *Scope* for execution must: be limited to:
** *Workgroup*

View File

@ -100,7 +100,7 @@ include::../api/protos/vkCreateCommandPool.txt[]
* pname:pCreateInfo contains information used to create the command pool.
* pname:pAllocator controls host memory allocation as described in the
<<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.
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
buffer memory is considered to be tightly packed according to the
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
or destination image data.
* 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
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.
* pname:descriptorCount is the number of descriptors contained in the
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.
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:
applications should: assume that the allocation failed due to fragmentation,
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:pNext is `NULL` or a pointer to an extension-specific structure.
* 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
value is treated as restarting the assembly of primitives. This enable
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
0xFFFF when pname:indexType is equal to ename:VK_INDEX_TYPE_UINT16.
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
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 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
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.
Examples of these might be:

View File

@ -89,21 +89,66 @@ The members of the sname:VkPhysicalDeviceFeatures structure describe the
following features:
* [[features-features-robustBufferAccess]] pname:robustBufferAccess
indicates that out of bounds accesses to buffers via shader operations
are well-defined.
** When enabled, out-of-bounds buffer reads will return any of the
following values:
*** Values from anywhere within the buffer object.
indicates that accesses to buffers are bounds-checked against the range of
the buffer descriptor (as determined by
sname:VkDescriptorBufferInfo::pname:range,
sname:VkBufferViewCreateInfo::pname:range, or the size of the buffer). Out
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
value represented in the type of the vector components and may: be any
of:
**** 0, 1, or the maximum representable positive integer value, for signed
or unsigned integer components
**** 0.0 or 1.0, for floating-point components
** When enabled, out-of-bounds writes may: modify values within the buffer
object or be ignored.
** If not enabled, out of bounds accesses may: cause undefined behaviour
up-to and including process termination.
** Out-of-bounds writes may: modify values within the memory range(s) bound
to the buffer, but mustnot: modify any other memory.
** Out-of-bounds atomics may: modify values within the memory range(s) bound
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
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.

View File

@ -19,7 +19,7 @@ command:
include::../api/protos/vkGetInstanceProcAddr.txt[]
* 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.
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
the core Vulkan commands have no need to use fname:vkGetInstanceProcAddr.
Function pointers to commands that do not operate on a specific instance can:
be obtained by using this command with pname:instance equal to `NULL`. The
following commands can: be accessed this way:
* flink:vkEnumerateInstanceExtensionProperties
* flink:vkEnumerateInstanceLayerProperties
* flink:vkCreateInstance
The table below defines the various use cases for fname:vkGetInstanceProcAddr
and expected return value ("fp" is function pointer) for each case.
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
be cast to the type of the command being queried.
If pname:instance is a valid sname:VkInstance, function pointers to any
commands that operate on pname:instance or a child of pname:instance can: be
obtained. The returned function pointer must: only be called with a
dispatchable object (the first parameter) that is a child of pname:instance.
.vkGetInstanceProcAddr behavior
[width="80%",options="header",align="center"]
|=====
| 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
extension command for any extension not supported by any available layer or
implementation, then fname:vkGetInstanceProcAddr will return `NULL`.
1::
The returned function pointer must: only be called with a dispatchable object
(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[]
[NOTE]
@ -87,29 +98,36 @@ command:
include::../api/protos/vkGetDeviceProcAddr.txt[]
* pname:device is the logical device that provides the function pointer.
* pname:pName is the name of any Vulkan command whose first parameter
is one of
** sname:VkDevice
** sname:VkQueue
** sname:VkCommandBuffer
The table below defines the various use cases for fname:vkGetDeviceProcAddr
and expected return value for each case.
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
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
not the name of an extension command belonging to an extension enabled for
pname:device, then fname:vkGetDeviceProcAddr will return `NULL`.
.vkGetDeviceProcAddr behavior
[width="80%",options="header",align="center"]
|=====
| 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[]
// refEnd vkGetInstanceProcAddr PFN_vkVoidFunction
// refEnd vkGetDeviceProcAddr PFN_vkVoidFunction
// refBegin PFN_vkVoidFunction Dummy function pointer type returned by queries
The function pointer type returned from the flink:vkGetInstanceProcAddr and
flink:vkGetDeviceProcAddr is a dummy type not corresponding to any actual
Vulkan function:
The definition of tlink:PFN_vkVoidFunction is:
include::../api/funcpointers/PFN_vkVoidFunction.txt[]

View File

@ -145,6 +145,13 @@ The sname:VkAttachmentDescription structure is defined as:
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
image that will be used for the attachment.
* 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
instance, an attachment can: use a different layout in each subpass, if
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
are used, and pname:stencilLoadOp and pname:stencilStoreOp are ignored. If

View File

@ -743,7 +743,8 @@ include::../api/structs/VkImageViewCreateInfo.txt[]
* pname:components specifies a remapping of color components (or of depth
or stencil components after they have been converted into color
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.
If pname:image was created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
@ -758,101 +759,101 @@ Classes>> section.
|========================================
| Dim, Arrayed, MS | Image parameters | View parameters
| 1D, 0, 0 |
imageType = IMAGE_TYPE_1D +
imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 +
height = 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_1D +
viewType = ename:VK_VIEW_TYPE_1D +
baseArrayLayer >= 0 +
arrayLayers = 1
layerCount = 1
| 1D, 1, 0 |
imageType = IMAGE_TYPE_1D +
imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 +
height = 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_1D_ARRAY +
viewType = ename:VK_VIEW_TYPE_1D_ARRAY +
baseArrayLayer >= 0 +
arrayLayers >= 1
layerCount >= 1
| 2D, 0, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_2D +
viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 +
arrayLayers = 1
layerCount = 1
| 2D, 1, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_2D_ARRAY +
viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 +
arrayLayers >= 1
layerCount >= 1
| 2D, 0, 1 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples > 1 |
viewType = VIEW_TYPE_2D +
viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 +
arrayLayers = 1
layerCount = 1
| 2D, 1, 1 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples > 1 |
viewType = VIEW_TYPE_2D_ARRAY +
viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 +
arrayLayers >= 1
layerCount >= 1
| CUBE, 0, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height = width +
depth = 1 +
arrayLayers >= 6 +
samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE +
viewType = ename:VK_VIEW_TYPE_CUBE +
baseArrayLayer >= 0 +
arrayLayers = 6
layerCount = 6
| CUBE, 1, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height = width +
depth = 1 +
arrayLayers >= 6×N +
N >= 1 +
arrayLayers >= latexmath:[$6 \times N$] +
samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE_ARRAY +
viewType = ename:VK_VIEW_TYPE_CUBE_ARRAY +
baseArrayLayer >= 0 +
arrayLayers = 6×N
N >= 1 +
layerCount = latexmath:[$6 \times N$]
| 3D, 0, 0 |
imageType = IMAGE_TYPE_3D +
imageType = ename:VK_IMAGE_TYPE_3D +
width >= 1 +
height >= 1 +
depth >= 1 +
arrayLayers = 1 +
samples = 1 |
viewType = VIEW_TYPE_3D +
viewType = ename:VK_VIEW_TYPE_3D +
baseArrayLayer = 0 +
arrayLayers = 1
layerCount = 1
|========================================
The pname:subresourceRange member is of type slink:VkImageSubresourceRange.
include::../validity/structs/VkImageViewCreateInfo.txt[]
// refBegin VkImageSubresourceRange - Structure specifying a image subresource range
@ -1284,9 +1285,10 @@ multiple resources simultaneously, via flink:vkBindImageMemory,
flink:vkBindBufferMemory, or via <<sparsememory-resource-binding,sparse
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
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,
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
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: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.
This barrier accomplishes a dependency chain between previous presentation

View File

@ -89,6 +89,33 @@ def seeAlsoList(apiName, explicitRefs = None):
else:
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
# pageName - string name 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)
# Emit a single reference page in baseDir
# Extract a single reference page into baseDir
# baseDir - base directory to emit page into
# specDir - directory extracted page source came from
# pi - pageInfo for this page relative to file
# 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'
fp = open(pageName, 'w')
@ -198,7 +226,8 @@ def emitPage(baseDir, pi, file):
pi.desc = '(no short description available)'
# 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
field = None
@ -211,10 +240,12 @@ def emitPage(baseDir, pi, file):
else:
logWarn('PyOutputGenerator::emitPage: unknown field type:', pi.type,
'for', pi.name)
fieldText = ''.join(file[pi.param:pi.body])
lines = remapIncludes(file[pi.param:pi.body], baseDir, specDir)
fieldText = ''.join(lines)
# 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,
pi.desc,
@ -350,6 +381,10 @@ def genRef(specFile, baseDir):
file = loadFile(specFile)
if (file == None):
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)
logDiag(specFile + ': found', len(pageMap.keys()), 'potential pages')
@ -369,7 +404,7 @@ def genRef(specFile, baseDir):
logDiag('genRef:', pi.name + ':', pi.Warning)
if (pi.extractPage):
emitPage(baseDir, pi, file)
emitPage(baseDir, specDir, pi, file)
elif (pi.type == 'enums'):
autoGenEnumsPage(baseDir, pi, file)
elif (pi.type == 'flags'):

View File

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

View File

@ -22,6 +22,13 @@ include::../api/structs/VkAttachmentDescription.txt[]
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
image that will be used for the attachment.
* 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
instance, an attachment can: use a different layout in each subpass, if
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

View File

@ -31,7 +31,7 @@ Members
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
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
or destination image data.
* 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
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.
* pname:descriptorCount is the number of descriptors contained in the
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
or stencil components after they have been converted into color
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.
@ -51,101 +52,101 @@ Classes>> section.
|========================================
| Dim, Arrayed, MS | Image parameters | View parameters
| 1D, 0, 0 |
imageType = IMAGE_TYPE_1D +
imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 +
height = 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_1D +
viewType = ename:VK_VIEW_TYPE_1D +
baseArrayLayer >= 0 +
arrayLayers = 1
layerCount = 1
| 1D, 1, 0 |
imageType = IMAGE_TYPE_1D +
imageType = ename:VK_IMAGE_TYPE_1D +
width >= 1 +
height = 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_1D_ARRAY +
viewType = ename:VK_VIEW_TYPE_1D_ARRAY +
baseArrayLayer >= 0 +
arrayLayers >= 1
layerCount >= 1
| 2D, 0, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_2D +
viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 +
arrayLayers = 1
layerCount = 1
| 2D, 1, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples = 1 |
viewType = VIEW_TYPE_2D_ARRAY +
viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 +
arrayLayers >= 1
layerCount >= 1
| 2D, 0, 1 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples > 1 |
viewType = VIEW_TYPE_2D +
viewType = ename:VK_VIEW_TYPE_2D +
baseArrayLayer >= 0 +
arrayLayers = 1
layerCount = 1
| 2D, 1, 1 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height >= 1 +
depth = 1 +
arrayLayers >= 1 +
samples > 1 |
viewType = VIEW_TYPE_2D_ARRAY +
viewType = ename:VK_VIEW_TYPE_2D_ARRAY +
baseArrayLayer >= 0 +
arrayLayers >= 1
layerCount >= 1
| CUBE, 0, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height = width +
depth = 1 +
arrayLayers >= 6 +
samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE +
viewType = ename:VK_VIEW_TYPE_CUBE +
baseArrayLayer >= 0 +
arrayLayers = 6
layerCount = 6
| CUBE, 1, 0 |
imageType = IMAGE_TYPE_2D +
imageType = ename:VK_IMAGE_TYPE_2D +
width >= 1 +
height = width +
depth = 1 +
arrayLayers >= 6×N +
N >= 1 +
arrayLayers >= latexmath:[$6 \times N$] +
samples = 1 +
flags include ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
viewType = VIEW_TYPE_CUBE_ARRAY +
viewType = ename:VK_VIEW_TYPE_CUBE_ARRAY +
baseArrayLayer >= 0 +
arrayLayers = 6×N
N >= 1 +
layerCount = latexmath:[$6 \times N$]
| 3D, 0, 0 |
imageType = IMAGE_TYPE_3D +
imageType = ename:VK_IMAGE_TYPE_3D +
width >= 1 +
height >= 1 +
depth >= 1 +
arrayLayers = 1 +
samples = 1 |
viewType = VIEW_TYPE_3D +
viewType = ename:VK_VIEW_TYPE_3D +
baseArrayLayer = 0 +
arrayLayers = 1
layerCount = 1
|========================================
The pname:subresourceRange member is of type slink:VkImageSubresourceRange.
include::../validity/structs/VkImageViewCreateInfo.txt[]

View File

@ -30,21 +30,66 @@ Description
-----------
* [[features-features-robustBufferAccess]] pname:robustBufferAccess
indicates that out of bounds accesses to buffers via shader operations
are well-defined.
** When enabled, out-of-bounds buffer reads will return any of the
following values:
*** Values from anywhere within the buffer object.
indicates that accesses to buffers are bounds-checked against the range of
the buffer descriptor (as determined by
sname:VkDescriptorBufferInfo::pname:range,
sname:VkBufferViewCreateInfo::pname:range, or the size of the buffer). Out
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
value represented in the type of the vector components and may: be any
of:
**** 0, 1, or the maximum representable positive integer value, for signed
or unsigned integer components
**** 0.0 or 1.0, for floating-point components
** When enabled, out-of-bounds writes may: modify values within the buffer
object or be ignored.
** If not enabled, out of bounds accesses may: cause undefined behaviour
up-to and including process termination.
** Out-of-bounds writes may: modify values within the memory range(s) bound
to the buffer, but mustnot: modify any other memory.
** Out-of-bounds atomics may: modify values within the memory range(s) bound
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
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.

View File

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

View File

@ -50,7 +50,7 @@ behavior. This means applications need not populate unused entries with dummy
descriptors.
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:
applications should: assume that the allocation failed due to fragmentation,
and create a new descriptor pool.

View File

@ -26,7 +26,7 @@ Parameters
* pname:pCreateInfo contains information used to create the command pool.
* pname:pAllocator controls host memory allocation as described in the
<<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.

View File

@ -30,12 +30,8 @@ include::../api/protos/vkGetDeviceProcAddr.txt[]
Parameters
----------
* pname:device is the logical device that provides the function pointer.
* pname:pName is the name of any Vulkan command whose first parameter
is one of
** sname:VkDevice
** sname:VkQueue
** sname:VkCommandBuffer
The table below defines the various use cases for fname:vkGetDeviceProcAddr
and expected return value for each case.
Description
@ -44,17 +40,32 @@ Description
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
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
not the name of an extension command belonging to an extension enabled for
pname:device, then fname:vkGetDeviceProcAddr will return `NULL`.
.vkGetDeviceProcAddr behavior
[width="80%",options="header",align="center"]
|=====
| 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[]
// refEnd vkGetDeviceProcAddr PFN_vkVoidFunction
See Also
--------
slink:VkDevice
tlink:PFN_vkVoidFunction, slink:VkDevice
Document Notes

View File

@ -25,7 +25,7 @@ Parameters
----------
* 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.
@ -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
the core Vulkan commands have no need to use fname:vkGetInstanceProcAddr.
Function pointers to commands that do not operate on a specific instance can:
be obtained by using this command with pname:instance equal to `NULL`. The
following commands can: be accessed this way:
* flink:vkEnumerateInstanceExtensionProperties
* flink:vkEnumerateInstanceLayerProperties
* flink:vkCreateInstance
The table below defines the various use cases for fname:vkGetInstanceProcAddr
and expected return value ("fp" is function pointer) for each case.
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
be cast to the type of the command being queried.
If pname:instance is a valid sname:VkInstance, function pointers to any
commands that operate on pname:instance or a child of pname:instance can: be
obtained. The returned function pointer must: only be called with a
dispatchable object (the first parameter) that is a child of pname:instance.
.vkGetInstanceProcAddr behavior
[width="80%",options="header",align="center"]
|=====
| 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
extension command for any extension not supported by any available layer or
implementation, then fname:vkGetInstanceProcAddr will return `NULL`.
1::
The returned function pointer must: only be called with a dispatchable object
(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[]
[NOTE]

View File

@ -187,23 +187,28 @@ looks as it does.
[[sample-command]]
== Sample Command Description: Creating Command Pools
To create a command pool, call:
// refBegin vkCreateCommandPool Create a new command pool object.
[NOTE]
.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:''.
====
To create a command pool, call:
include::../api/protos/vkCreateCommandPool.txt[]
[NOTE]
.Guideline
====
After the description, include the autogenerated prototype for the command
from the `../protos/` directory:
Begin the command description with a comment delimiting the language for
<<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[]
@ -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:
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:
include::../api/structs/VkCommandPoolCreateInfo.txt[]
@ -263,9 +273,18 @@ include::../api/structs/VkCommandPoolCreateInfo.txt[]
[NOTE]
.Guideline
====
Structures and enumerations first used as parameters of a command are
described next, by including the autogenerated interface file for that
structure or enumeration:
Begin the structure description with a comment delimiting the language for
<<writing-refpages,automatic extraction into a reference page>>.
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[]
====
@ -277,13 +296,14 @@ structure or enumeration:
include:
+
--
// 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_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
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:pNext is `NULL` or a pointer to an
extension-specific structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
----
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:
----
* pname:flags is a combination of bitmask flags
indicating usage behavior for the pool and
command buffers allocated from it. Possible
values include:
* pname:flags is a bitmask indicating usage behavior for the pool and
command buffers allocated from it. Bits which can: be set include:
+
--
\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.
// 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_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[]
====
[[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
* 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
markup (based on public issue 286).
* 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
* 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
* 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
* Any given element of pname:pDynamicOffsets must: satisfy the required alignment for the corresponding descriptor binding's descriptor type
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 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: 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, 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

View File

@ -9,8 +9,6 @@ Valid Usage
endif::doctype-manpage[]
* If pname:instance is not `NULL`, pname:instance must: be a valid sname:VkInstance handle
* 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[]
********************************************************************************
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>>)
* 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
* 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[]
********************************************************************************
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
- make ; make test
(this just generates ../vulkan/vulkan.h)
- make full_install
(this generates all targets)
- make install doc_install
(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
- Commit your changes to your local git branch
- Push the branch to the git server and create a merge request against the
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.
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)
vk.xml - XML API description
genvk.py - Python script to generate vulkan.h and other targets.
readme.tex - 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
readme.txt - Source for detailed description of the XML schema
registry.rnc - RelaxNG compact schema for validating XML against the
schema
reg.py - Python tools to read XML file and convert it into C headers
generator.py - output generator for C. Others are possible, although
vk.xml contains C-isms which would have to be factored out.
generator.py - output generator base class.
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
MAKEFILE TARGETS
@ -55,21 +59,14 @@ MAKEFILE TARGETS
install or ../vulkan/vulkan.h (default target) - regenerate vulkan.h in
../vulkan .
vulkan-docs - regenerate spec/ref page API include .txt files and
install under ../../doc/specs/vulkan/*/ . In general, this should be
left until a branch is merged to master.
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.
doc_install - generates detailed description of the XML schema from
registry.txt in $(OUTDIR)/registry.html . In general this should be
left until a branch is merged to 1.0.
test - make sure ../vulkan/vulkan.h compiles. Important!
validate - validate vk.xml against the schema. Requires 'jing' tool
installed.
clobber - remove generated and cache files, including the API include
files. Usually done while merging to master via 'make clobber ; make
full_install'
clobber - remove generated files. Usually done when to merging to 1.0
via 'make clobber ; make install doc_install'.
If you have trouble running the Makefile on your platorm, try using
the command line:
@ -173,3 +170,7 @@ CHANGE LOG
2016/05/31
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
# pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values)
# 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>
# syntax where it may contain arbitrarily interleaved text, <type>, and
@ -141,6 +143,8 @@ Type = element type {
attribute externsync { text } ? ,
attribute optional { text } ? ,
attribute noautovalidity { text } ? ,
attribute validextensionstructs { text } ? ,
attribute values { text } ? ,
mixed {
element type { TypeName } ? ,
element name { text },

View File

@ -366,6 +366,9 @@ member.
* attr:validextensionstructs - only valid on the +pNext+ member of a
struct. This is a comma-separated list of structures that may be
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
following things, separated by commas (one for each array
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
def paramIsArray(self, param):
return param.attrib.get('len') is not None
#
# Get the parent of a handle object
def getHandleParent(self, typename):
@ -224,7 +224,7 @@ class ValidityOutputGenerator(OutputGenerator):
if current is None:
return ancestors
ancestors.append(current)
#
# Get the ancestors of a handle object
def getHandleDispatchableAncestors(self, typename):
@ -236,7 +236,7 @@ class ValidityOutputGenerator(OutputGenerator):
return ancestors
if self.isHandleTypeDispatchable(current):
ancestors.append(current)
#
# Check if a parent object is dispatchable or not
def isHandleTypeDispatchable(self, handlename):
@ -585,70 +585,70 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += '\n'
return asciidoc
#
# Make an asciidoc validity entry for a common ancestors between handles
def makeAsciiDocHandlesCommonAncestor(self, handles, params):
asciidoc = ''
if len(handles) > 1:
ancestormap = {}
anyoptional = False
# Find all the ancestors
for param in handles:
paramname = param.find('name')
paramtype = param.find('type')
ancestors = self.getHandleDispatchableAncestors(paramtype.text)
ancestormap[param] = ancestors
ancestormap[param] = ancestors
anyoptional |= self.isHandleOptional(param, params)
# Remove redundant ancestor lists
for param in handles:
paramname = param.find('name')
paramtype = param.find('type')
removals = []
for ancestors in ancestormap.items():
if paramtype.text in ancestors[1]:
removals.append(ancestors[0])
if removals != []:
for removal in removals:
del(ancestormap[removal])
# Intersect
if len(ancestormap.values()) > 1:
current = list(ancestormap.values())[0]
for ancestors in list(ancestormap.values())[1:]:
current = [val for val in current if val in ancestors]
if len(current) > 1:
commonancestor = current[0]
if len(ancestormap.keys()) > 1:
asciidoc += '* '
parametertexts = []
for param in ancestormap.keys():
paramname = param.find('name')
parametertext = self.makeParameterName(paramname.text)
paramname = param.find('name')
parametertext = self.makeParameterName(paramname.text)
if self.paramIsArray(param):
parametertext = 'the elements of ' + parametertext
parametertexts.append(parametertext)
parametertexts.sort()
if len(parametertexts) > 2:
asciidoc += 'Each of '
else:
asciidoc += 'Both of '
asciidoc += ", ".join(parametertexts[:-1])
asciidoc += ', and '
asciidoc += parametertexts[-1]
@ -657,9 +657,9 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += ' must: have been created, allocated, or retrieved from the same '
asciidoc += self.makeStructName(commonancestor)
asciidoc += '\n'
return asciidoc
#
# Generate an asciidoc validity line for the sType value of a struct
def makeStructureType(self, blockname, param):
@ -670,15 +670,28 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be '
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 += '_'
values = param.attrib.get('values')
if values:
# Extract each enumerant value. They could be validated in the
# same fashion as validextensionstructs in
# makeStructureExtensionPointer, although that's not relevant in
# the current extension struct model.
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'
return asciidoc
@ -860,21 +873,21 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += self.makeParameterName(arraylength)
asciidoc += ' must: be greater than `0`'
asciidoc += '\n'
# Find the parents of all objects referenced in this command
for param in handles:
paramtype = param.find('type')
for param in handles:
paramtype = param.find('type')
# Don't detect a parent for return values!
if not self.paramIsPointer(param) or (param.text is not None and 'const' in param.text):
parent = self.getHandleParent(paramtype.text)
if parent is not None:
asciidoc += self.makeAsciiDocHandleParent(param, params)
# Find the common ancestor of all objects referenced in this command
asciidoc += self.makeAsciiDocHandlesCommonAncestor(handles, params)
# Add in any plain-text validation language that should be added
for usage in usages:
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
#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
#define <name>VK_HEADER_VERSION</name> 22</type>
#define <name>VK_HEADER_VERSION</name> 23</type>
<type category="define">
#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 -->
</type>
<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 optional="true" len="null-terminated">const <type>char</type>* <name>pApplicationName</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>
</type>
<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 optional="true"><type>VkDeviceQueueCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkDeviceCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkInstanceCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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><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 -->
@ -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-->
</type>
<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><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 -->
@ -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). -->
</type>
<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><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 -->
@ -640,7 +640,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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><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 -->
@ -658,7 +658,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkBufferCreateFlags</type> <name>flags</name></member> <!-- Buffer creation flags -->
<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>
</type>
<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 optional="true"><type>VkBufferViewCreateFlags</type><name>flags</name></member> <!-- Reserved -->
<member><type>VkBuffer</type> <name>buffer</name></member>
@ -730,13 +730,13 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 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 -->
</type>
<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 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 -->
@ -755,7 +755,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 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 -->
@ -782,7 +782,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkImageCreateFlags</type> <name>flags</name></member> <!-- Image creation flags -->
<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 -->
</type>
<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 optional="true"><type>VkImageViewCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>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>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>
</type>
<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>
</type>
<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 optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</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>
</type>
<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 optional="true"><type>VkShaderModuleCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 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 -->
@ -1086,7 +1086,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkDescriptorPoolCreateFlags</type> <name>flags</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>
</type>
<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><type>VkDescriptorPool</type> <name>descriptorPool</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>
</type>
<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 optional="true"><type>VkPipelineShaderStageCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkPipelineCreateFlags</type> <name>flags</name></member> <!-- Pipeline creation flags -->
<member><type>VkPipelineShaderStageCreateInfo</type> <name>stage</name></member>
@ -1193,7 +1193,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkPipelineVertexInputStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkPipelineInputAssemblyStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkPrimitiveTopology</type> <name>topology</name></member>
@ -1222,7 +1222,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkPipelineTessellationStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkPipelineViewportStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkPipelineRasterizationStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkBool32</type> <name>depthClampEnable</name></member>
@ -1266,7 +1266,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkPipelineMultisampleStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkPipelineColorBlendStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkBool32</type> <name>logicOpEnable</name></member>
@ -1313,7 +1313,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkPipelineDynamicStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkPipelineDepthStencilStateCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkBool32</type> <name>depthTestEnable</name></member>
@ -1346,7 +1346,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkPipelineCreateFlags</type> <name>flags</name></member> <!-- Pipeline creation flags -->
<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>
</type>
<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 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 -->
@ -1430,7 +1430,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 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 -->
@ -1447,7 +1447,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkSamplerCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkCommandPoolCreateFlags</type> <name>flags</name></member> <!-- Command pool creation flags -->
<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>
</type>
<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><type>VkCommandPool</type> <name>commandPool</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>
</type>
<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 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>
@ -1515,7 +1515,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 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 -->
@ -1526,7 +1526,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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><type>VkRenderPass</type> <name>renderPass</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>
</type>
<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 optional="true"><type>VkRenderPassCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 optional="true"><type>VkEventCreateFlags</type> <name>flags</name></member> <!-- Event creation flags -->
</type>
<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 optional="true"><type>VkFenceCreateFlags</type> <name>flags</name></member> <!-- Fence creation flags -->
</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 -->
</type>
<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 optional="true"><type>VkSemaphoreCreateFlags</type> <name>flags</name></member> <!-- Semaphore creation flags -->
</type>
<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 optional="true"><type>VkQueryPoolCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkQueryType</type> <name>queryType</name></member>
@ -1867,7 +1867,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkFramebufferCreateFlags</type> <name>flags</name></member> <!-- Reserved -->
<member><type>VkRenderPass</type> <name>renderPass</name></member>
@ -1924,7 +1924,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</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. -->
</type>
<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 optional="true"><type>VkDisplayModeCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 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 -->
@ -2011,7 +2011,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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><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. -->
@ -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 -->
</type>
<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 optional="true"><type>VkAndroidSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>ANativeWindow</type>* <name>window</name></member>
@ -2044,35 +2044,35 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 optional="true"><type>VkMirSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>MirConnection</type>* <name>connection</name></member>
<member><type>MirSurface</type>* <name>mirSurface</name></member>
</type>
<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 optional="true"><type>VkWaylandSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member>struct <type>wl_display</type>* <name>display</name></member>
<member>struct <type>wl_surface</type>* <name>surface</name></member>
</type>
<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 optional="true"><type>VkWin32SurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>HINSTANCE</type> <name>hinstance</name></member>
<member><type>HWND</type> <name>hwnd</name></member>
</type>
<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 optional="true"><type>VkXlibSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<member><type>Display</type>* <name>dpy</name></member>
<member><type>Window</type> <name>window</name></member>
</type>
<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 optional="true"><type>VkXcbSurfaceCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<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 -->
</type>
<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 optional="true"><type>VkSwapchainCreateFlagsKHR</type> <name>flags</name></member> <!-- Reserved -->
<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>
</type>
<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 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 -->
@ -2132,26 +2132,26 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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><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 optional="true"><type>void</type>* <name>pUserData</name></member> <!-- User data provided to callback function -->
</type>
<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><type>VkRasterizationOrderAMD</type> <name>rasterizationOrder</name></member> <!-- Rasterization order to use for the pipeline -->
</type>
<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><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 len="null-terminated">const <type>char</type>* <name>pObjectName</name></member> <!-- Name to apply to the object -->
</type>
<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><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 -->
@ -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 -->
</type>
<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 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 -->
</type>
<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><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this image uses a dedicated allocation -->
<validity>
@ -2174,7 +2174,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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><type>VkBool32</type> <name>dedicatedAllocation</name></member> <!-- Whether this buffer uses a dedicated allocation -->
<validity>
@ -2182,7 +2182,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
</validity>
</type>
<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 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 -->
@ -3032,17 +3032,11 @@ maintained in the master branch of the Khronos Vulkan Github project.
<proto><type>PFN_vkVoidFunction</type> <name>vkGetDeviceProcAddr</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param len="null-terminated">const <type>char</type>* <name>pName</name></param>
<validity>
</validity>
</command>
<command>
<proto><type>PFN_vkVoidFunction</type> <name>vkGetInstanceProcAddr</name></proto>
<param optional="true"><type>VkInstance</type> <name>instance</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>
<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 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>
<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="true" len="pPropertyCount"><type>VkLayerProperties</type>* <name>pProperties</name></param>
</command>
@ -3953,6 +3947,7 @@ maintained in the master branch of the Khronos Vulkan Github project.
<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>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>Any given element of pname:pDynamicOffsets must: satisfy the required alignment for the corresponding descriptor binding's descriptor type</usage>
</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 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: 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, 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>
@ -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="true" len="pPropertyCount"><type>VkDisplayModePropertiesKHR</type>* <name>pProperties</name></param>
</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>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</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"/>
</require>
</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>
</registry>

View File

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