Change log for October 6, 2017 Vulkan 1.0.62 spec update:

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

Github Issues:

  * Move asciidoc conditionals for `VK_KHR_maintenance1` in
    slink:VkDescriptorSetAllocateInfo so valid usage statements for
    `VK_KHR_push_descriptor` aren't accidentally removed when the first
    extension isn't enabled (public issue 573).
  * Fixed errors in API example code for
    flink:vkUpdateDescriptorSetWithTemplateKHR and
    flink:vkCmdPushDescriptorSetWithTemplateKHR (public issue 577).

Internal Issues:

  * Specify constraints on concurrent access to fences that share payload in
    the <<synchronization-fences-importing, Importing Fence Payloads>> and
    <<synchronization-semaphores-waiting-state, Semaphore State Requirements
    For Wait Operations>> sections (internal issue 820).
  * Define the term "`retired swapchain`", reorganize some swapchain
    language, and improve language for pname:oldSwapchain in
    flink:VkSwapchainCreateInfoKHR, the <<swapchain-wsi-image-create-info>>
    table, flink:vkDestroySwapchainKHR, and flink:vkAcquireNextImage2KHX
    (internal issue 869).
  * Describe in the <<writing-arrays, Describing Properties of Array
    Elements>> section of the style guide how and when to use "`each`" and
    "`any`" to refer to properties of array elements, and make those uses in
    the specification consistent (internal issue 884).
  * Clarified that events cannot be used for cross-queue synchronization in
    the <<synchronization-events, Events>> section and for
    flink:vkCmdWaitEvents (internal issue 970).
  * Add success and error codes to +vk.xml+ for
    flink:vkCreateValidationCacheEXT (internal issue 995).
  * Clarify aspect mask usage for image memory barriers of multi-plane
    images in slink:VkImageSubresourceRange, slink:VkImageMemoryBarrier, and
    the <<textures-layout-validation, Layout Validation>> section (internal
    issue 996).

Other Issues:

  * Fixed typo in flink:VkRenderPassSampleLocationsBeginInfoEXT (renamed
    field pname:pSubpassSampleLocations to
    pname:pPostSubpassSampleLocations).
  * Add missing buffer usage requirements for indirect draws in
    flink:vkCmdDrawIndirect, flink:vkCmdDrawIndirectCountAMD,
    flink:vkCmdDrawIndexedIndirect, and
    flink:vlCmdDrawIndexedIndirectCountAMD.
  * Modify Makefile to allow specification to build in git "`detached HEAD`"
    state.
  * Update valid usage ID generation script to allow recursively operating
    on all `.txt` files in a specified directory, and move the `startVUID`
    tracking information into a separate python file that is automatically
    updated by the script.

New Extensions:

  * Add +vk.xml+ entries for pending `VK_ANDROID_native_buffer` extension
    (note, this extension is not yet enabled).
  * `VK_AMD_shader_image_load_store_lod`
This commit is contained in:
Jon Leech 2017-10-06 21:51:59 -07:00
parent d893b6a79a
commit 6012d138c7
36 changed files with 1147 additions and 541 deletions

1
.gitignore vendored
View File

@ -40,6 +40,7 @@ __pycache__
doc/specs/vulkan/api doc/specs/vulkan/api
doc/specs/vulkan/hostsynctable doc/specs/vulkan/hostsynctable
doc/specs/vulkan/validity doc/specs/vulkan/validity
doc/specs/vulkan/appendices/meta
# Files generated by extraction from spec source # Files generated by extraction from spec source
doc/specs/vulkan/man/PFN*.txt doc/specs/vulkan/man/PFN*.txt

View File

@ -8,6 +8,69 @@ public issues.
----------------------------------------------------- -----------------------------------------------------
Change log for October 6, 2017 Vulkan 1.0.62 spec update:
* Bump API patch number and header version number to 62 for this update.
Github Issues:
* Move asciidoc conditionals for `VK_KHR_maintenance1` in
slink:VkDescriptorSetAllocateInfo so valid usage statements for
`VK_KHR_push_descriptor` aren't accidentally removed when the first
extension isn't enabled (public issue 573).
* Fixed errors in API example code for
flink:vkUpdateDescriptorSetWithTemplateKHR and
flink:vkCmdPushDescriptorSetWithTemplateKHR (public issue 577).
Internal Issues:
* Specify constraints on concurrent access to fences that share payload in
the <<synchronization-fences-importing, Importing Fence Payloads>> and
<<synchronization-semaphores-waiting-state, Semaphore State Requirements
For Wait Operations>> sections (internal issue 820).
* Define the term "`retired swapchain`", reorganize some swapchain
language, and improve language for pname:oldSwapchain in
flink:VkSwapchainCreateInfoKHR, the <<swapchain-wsi-image-create-info>>
table, flink:vkDestroySwapchainKHR, and flink:vkAcquireNextImage2KHX
(internal issue 869).
* Describe in the <<writing-arrays, Describing Properties of Array
Elements>> section of the style guide how and when to use "`each`" and
"`any`" to refer to properties of array elements, and make those uses in
the specification consistent (internal issue 884).
* Clarified that events cannot be used for cross-queue synchronization in
the <<synchronization-events, Events>> section and for
flink:vkCmdWaitEvents (internal issue 970).
* Add success and error codes to +vk.xml+ for
flink:vkCreateValidationCacheEXT (internal issue 995).
* Clarify aspect mask usage for image memory barriers of multi-plane
images in slink:VkImageSubresourceRange, slink:VkImageMemoryBarrier, and
the <<textures-layout-validation, Layout Validation>> section (internal
issue 996).
Other Issues:
* Fixed typo in flink:VkRenderPassSampleLocationsBeginInfoEXT (renamed
field pname:pSubpassSampleLocations to
pname:pPostSubpassSampleLocations).
* Add missing buffer usage requirements for indirect draws in
flink:vkCmdDrawIndirect, flink:vkCmdDrawIndirectCountAMD,
flink:vkCmdDrawIndexedIndirect, and
flink:vlCmdDrawIndexedIndirectCountAMD.
* Modify Makefile to allow specification to build in git "`detached HEAD`"
state.
* Update valid usage ID generation script to allow recursively operating
on all `.txt` files in a specified directory, and move the `startVUID`
tracking information into a separate python file that is automatically
updated by the script.
New Extensions:
* Add +vk.xml+ entries for pending `VK_ANDROID_native_buffer` extension
(note, this extension is not yet enabled).
* `VK_AMD_shader_image_load_store_lod`
-----------------------------------------------------
Change log for September 15, 2017 Vulkan 1.0.61 spec update: Change log for September 15, 2017 Vulkan 1.0.61 spec update:
* Bump API patch number and header version number to 61 for this update. * Bump API patch number and header version number to 61 for this update.

View File

@ -87,25 +87,19 @@ VERBOSE =
# $(EXTENSIONS)) # $(EXTENSIONS))
# ADOCOPTS options for asciidoc->HTML5 output # ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide NOTEOPTS = -a editing-notes -a implementation-guide
SPECREVISION = 1.0.61 SPECREVISION = 1.0.62
# Spell out RFC2822 format as not all date commands support -R # Spell out RFC2822 format as not all date commands support -R
SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`) SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`)
# Generate Asciidoc attributes for spec remark # Generate Asciidoc attributes for spec remark
GITHEAD := ../../../.git/logs/HEAD
ifeq ($(wildcard $(GITHEAD)),)
# If GITHEAD does not exist, don't include branch info.
SPECREMARK = Git branch information not available
else
# Could use `git log -1 --format="%cd"` to get branch commit date # Could use `git log -1 --format="%cd"` to get branch commit date
# This used to be a dependency in the spec html/pdf targets, # This used to be a dependency in the spec html/pdf targets,
# but that's likely to lead to merge conflicts. Just regenerate # but that's likely to lead to merge conflicts. Just regenerate
# when pushing a new spec for review to the sandbox. # when pushing a new spec for review to the sandbox.
# The dependency on HEAD is per the suggestion in # The dependency on HEAD is per the suggestion in
# http://neugierig.org/software/blog/2014/11/binary-revisions.html # http://neugierig.org/software/blog/2014/11/binary-revisions.html
SPECREMARK = from git branch: $(shell echo `git symbolic-ref --short HEAD`) \ SPECREMARK = from git branch: $(shell echo `git symbolic-ref --short HEAD 2> /dev/null || echo Git branch information not available`) \
commit: $(shell echo `git log -1 --format="%H"`) commit: $(shell echo `git log -1 --format="%H"`)
endif
ATTRIBOPTS = -a revnumber="$(SPECREVISION)" \ ATTRIBOPTS = -a revnumber="$(SPECREVISION)" \
-a revdate="$(SPECDATE)" \ -a revdate="$(SPECDATE)" \

View File

@ -0,0 +1,26 @@
include::meta/VK_AMD_shader_image_load_store_lod.txt[]
*Last Modified Date*::
08/21/2017
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_image_load_store_lod.html[+SPV_AMD_shader_image_load_store_lod+]
SPIR-V extension.
- This extension requires
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_shader_image_load_store_lod.txt[+GL_AMD_shader_image_load_store_lod+]
for GLSL-based source languages.
*IP Status*::
No known IP claims.
*Contributors*::
- Dominik Witczak, AMD
- Qun Lin, AMD
- Rex Xu, AMD
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_image_load_store_lod.html[+SPV_AMD_shader_image_load_store_lod+]
=== Version History
* Revision 1, 2017-08-21 (Dominik Witczak)
- Initial draft

View File

@ -375,6 +375,10 @@ ifdef::VK_AMD_shader_fragment_mask[]
include::VK_AMD_shader_fragment_mask.txt[] include::VK_AMD_shader_fragment_mask.txt[]
endif::VK_AMD_shader_fragment_mask[] endif::VK_AMD_shader_fragment_mask[]
ifdef::VK_AMD_shader_image_load_store_lod[]
include::VK_AMD_shader_image_load_store_lod.txt[]
endif::VK_AMD_shader_image_load_store_lod[]
ifdef::VK_AMD_shader_trinary_minmax[] ifdef::VK_AMD_shader_trinary_minmax[]
include::VK_AMD_shader_trinary_minmax.txt[] include::VK_AMD_shader_trinary_minmax.txt[]
endif::VK_AMD_shader_trinary_minmax[] endif::VK_AMD_shader_trinary_minmax[]

View File

@ -977,6 +977,13 @@ Resolve Attachment::
multisample resolve operation from the corresponding color attachment at multisample resolve operation from the corresponding color attachment at
the end of the subpass. the end of the subpass.
Retired Swapchain::
A swapchain that has been used as the pname:oldSwapchain parameter to
flink:vkCreateSwapchainKHR.
Images cannot be acquired from a retired swapchain, however images that
were acquired (but not presented) before the swapchain was retired can:
be presented.
Sampled Image:: Sampled Image::
A descriptor type that represents an image view, and supports filtered A descriptor type that represents an image view, and supports filtered
(sampled) and unfiltered read-only acccess in a shader. (sampled) and unfiltered read-only acccess in a shader.

View File

@ -106,6 +106,10 @@ ifdef::VK_KHX_device_group[]
[[spirvenv-capabilities-table-devicegroup]] [[spirvenv-capabilities-table-devicegroup]]
| code:DeviceGroup | <<VK_KHX_device_group,VK_KHX_device_group>> | code:DeviceGroup | <<VK_KHX_device_group,VK_KHX_device_group>>
endif::VK_KHX_device_group[] endif::VK_KHX_device_group[]
ifdef::VK_AMD_shader_image_load_store_lod[]
[[spirvenv-capabilities-table-imagereadwritelodamd]]
| code:ImageReadWriteLodAMD | <<VK_AMD_shader_image_load_store_lod,VK_AMD_shader_image_load_store_lod>>
endif::VK_AMD_shader_image_load_store_lod[]
ifdef::VK_AMD_texture_gather_bias_lod[] ifdef::VK_AMD_texture_gather_bias_lod[]
[[spirvenv-capabilities-table-imagegatherbiaslodamd]] [[spirvenv-capabilities-table-imagegatherbiaslodamd]]
| code:ImageGatherBiasLodAMD | <<VK_AMD_texture_gather_bias_lod,VK_AMD_texture_gather_bias_lod>> | code:ImageGatherBiasLodAMD | <<VK_AMD_texture_gather_bias_lod,VK_AMD_texture_gather_bias_lod>>
@ -174,6 +178,11 @@ The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the +SPV_AMD_shader_ballot+ SPIR-V extension. uses the +SPV_AMD_shader_ballot+ SPIR-V extension.
endif::VK_AMD_shader_ballot[] endif::VK_AMD_shader_ballot[]
ifdef::VK_AMD_shader_image_load_store_lod[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the +SPV_AMD_shader_image_load_store_lod+ SPIR-V extension.
endif::VK_AMD_shader_image_load_store_lod[]
ifdef::VK_AMD_shader_trinary_minmax[] ifdef::VK_AMD_shader_trinary_minmax[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the +SPV_AMD_shader_trinary_minmax+ SPIR-V extension. uses the +SPV_AMD_shader_trinary_minmax+ SPIR-V extension.

View File

@ -8,7 +8,7 @@ as well as weights [eq]#{alpha}# and [eq]#{beta}#.
++++++++++++++++++++++++ ++++++++++++++++++++++++
\begin{aligned} \begin{aligned}
i_{0} & = \left \lfloor u - \frac{3}{2} \right \rfloor & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em] i_{0} & = \left \lfloor u - \frac{3}{2} \right \rfloor & i_{1} & = i_{0} + 1 & i_{2} & = i_{1} + 1 & i_{3} & = i_{2} + 1 \\[1em]
j_{0} & = \left \lfloor u - \frac{3}{2} \right \rfloor & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1 \\ j_{0} & = \left \lfloor v - \frac{3}{2} \right \rfloor & j_{1} & = j_{0} + 1 & j_{2} & = j_{1} + 1 & j_{3} & = j_{2} + 1 \\
\\ \\
\alpha & = \mathbin{frac} \left ( u - \frac{1}{2} \right ) \\[1em] \alpha & = \mathbin{frac} \left ( u - \frac{1}{2} \right ) \\[1em]
\beta & = \mathbin{frac} \left ( v - \frac{1}{2} \right ) \beta & = \mathbin{frac} \left ( v - \frac{1}{2} \right )

View File

@ -1,5 +1,7 @@
If a swapchain associated with a display surface is destroyed and there are When a swapchain associated with a display surface is destroyed, if the
no valid descendants of that swapchain, the implementation must: either image most recently presented to the display surface is from the swapchain
revert any display resources modified by presenting images with the being destroyed, then either any display resources modified by presenting
swapchain to their state prior to the first present performed with the images from any swapchain associated with the display surface must: be
swapchain and its ancestors, or leave such resources in their current state. reverted by the implementation to their state prior to the first present
performed on one of these swapchains, or such resources must: be left in
their current state.

View File

@ -111,7 +111,8 @@ include::../../api/structs/VkSwapchainCreateInfoKHR.txt[]
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is a bitmask of elink:VkSwapchainCreateFlagBitsKHR * pname:flags is a bitmask of elink:VkSwapchainCreateFlagBitsKHR
indicating parameters of swapchain creation. indicating parameters of swapchain creation.
* pname:surface is the surface that the swapchain will present images to. * pname:surface is the surface to which the swapchain will present images.
The swapchain is associated with pname:surface.
* pname:minImageCount is the minimum number of presentable images that the * pname:minImageCount is the minimum number of presentable images that the
application needs. application needs.
The platform will either create the swapchain with at least that many The platform will either create the swapchain with at least that many
@ -175,32 +176,43 @@ after reacquiring them and if their pixel shaders do not have any side
effects that require them to run for all pixels in the presentable image. effects that require them to run for all pixels in the presentable image.
==== ====
* pname:oldSwapchain, if not dlink:VK_NULL_HANDLE, specifies the swapchain * pname:oldSwapchain, if not dlink:VK_NULL_HANDLE, specifies an existing
that will be replaced by the new swapchain being created. non-retired swapchain that is associated with surface.
The new swapchain will be a descendant of pname:oldSwapchain.
Further, any descendants of the new swapchain will also be descendants
of pname:oldSwapchain.
Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that
is not dlink:VK_NULL_HANDLE, any images not acquired by the application is not dlink:VK_NULL_HANDLE, pname:oldSwapchain is retired, even if
may: be freed by the implementation, which may: occur even if creation creation of the new swapchain fails.
of the new swapchain fails. The new swapchain is created in the non-retired state whether or not
The application must: destroy the old swapchain to free all memory pname:oldSwapchain is dlink:VK_NULL_HANDLE.
associated with the old swapchain.
The application must: wait for the completion of any outstanding Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that
rendering to images it currently has acquired at the time the swapchain is not dlink:VK_NULL_HANDLE, any images from pname:oldSwapchain that are
is destroyed. not acquired by the application may: be freed by the implementation,
The application can: continue to present any images it acquired and has which may: occur even if creation of the new swapchain fails.
not yet presented using the old swapchain, as long as it has not entered The application must: destroy sname:oldSwapchain to free all memory
a state that causes it to return ename:VK_ERROR_OUT_OF_DATE_KHR. associated with sname:oldSwapchain.
However, the application cannot: acquire any more images from the old [NOTE]
swapchain regardless of whether or not creation of the new swapchain .Note
succeeds. ====
Multiple retired swapchains can: be associated with the same
sname:VkSurfaceKHR through multiple uses of sname:oldSwapchain that
outnumber calls to flink:vkDestroySwapchainKHR.
After sname:oldSwapchain is retired, the application can: pass to
flink:vkQueuePresentKHR any images it had already acquired from
sname:oldSwapchain.
E.g., an application may present an image from the old swapchain before an
image from the new swapchain is ready to be presented.
As usual, flink:vkQueuePresentKHR may: fail if sname:oldSwapchain has
entered a state that causes ename:VK_ERROR_OUT_OF_DATE_KHR to be returned.
ifdef::VK_KHR_shared_presentable_image[] ifdef::VK_KHR_shared_presentable_image[]
The application can: continue to use a shared presentable image obtained The application can: continue to use a shared presentable image obtained
from pname:oldSwapchain until a presentable image is acquired from the from pname:oldSwapchain until a presentable image is acquired from the new
new swapchain, as long as it has not entered a state that causes it to swapchain, as long as it has not entered a state that causes it to return
return ename:VK_ERROR_OUT_OF_DATE_KHR. ename:VK_ERROR_OUT_OF_DATE_KHR.
endif::VK_KHR_shared_presentable_image[] endif::VK_KHR_shared_presentable_image[]
====
.Valid Usage .Valid Usage
**** ****
@ -308,6 +320,9 @@ ifdef::VK_KHX_device_group[]
to 1, pname:flags must: not contain to 1, pname:flags must: not contain
ename:VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX ename:VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX
endif::VK_KHX_device_group[] endif::VK_KHX_device_group[]
* [[VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01674]]
pname:oldSwapchain must: not be in the retired state
**** ****
include::../../validity/structs/VkSwapchainCreateInfoKHR.txt[] include::../../validity/structs/VkSwapchainCreateInfoKHR.txt[]
@ -393,12 +408,17 @@ endif::VK_KHX_device_group[]
| pname:initialLayout | ename:VK_IMAGE_LAYOUT_UNDEFINED | pname:initialLayout | ename:VK_IMAGE_LAYOUT_UNDEFINED
|==== |====
The sname:VkSurfaceKHR associated with a swapchain must: not be destroyed The pname:surface must: not be destroyed until after the swapchain is
until after the swapchain is destroyed. destroyed.
The native window referred to by pname:surface must: not already be If pname:oldSwapchain is not VK_NULL_HANDLE then pname:surface must: be
associated with a swapchain other than pname:oldSwapchain, or with a associated with pname:oldSwapchain.
non-Vulkan graphics API surface. Otherwise, the native window referred to by pname:surface must: not already
be associated with another swapchain, and must: not be already be associated
with a non-Vulkan graphics API surface.
The native window referred to by pname:surface must: not become associated
with a non-Vulkan graphics API surface before the swapchain has been
destroyed.
Like core functions, several WSI functions, including Like core functions, several WSI functions, including
fname:vkCreateSwapchainKHR return ename:VK_ERROR_DEVICE_LOST if the logical fname:vkCreateSwapchainKHR return ename:VK_ERROR_DEVICE_LOST if the logical
@ -437,10 +457,12 @@ include::../../api/protos/vkDestroySwapchainKHR.txt[]
swapchain object when there is no more specific allocator available (see swapchain object when there is no more specific allocator available (see
<<memory-allocation,Memory Allocation>>). <<memory-allocation,Memory Allocation>>).
The application must: not destroy a swapchain until after completion of all
outstanding operations on images that were acquired from the swapchain.
pname:swapchain and all associated sname:VkImage handles are destroyed, and pname:swapchain and all associated sname:VkImage handles are destroyed, and
must: not be acquired or used any more by the application. must: not be acquired or used any more by the application.
The memory of each sname:VkImage will only be freed after that image is no The memory of each sname:VkImage will only be freed after that image is no
longer used by the platform. longer used by the presentation engine.
For example, if one image of the swapchain is being displayed in a window, For example, if one image of the swapchain is being displayed in a window,
the memory for that image may: not be freed until the window is destroyed, the memory for that image may: not be freed until the window is destroyed,
or another swapchain is created for the window. or another swapchain is created for the window.
@ -549,7 +571,8 @@ that image, call:
include::../../api/protos/vkAcquireNextImageKHR.txt[] include::../../api/protos/vkAcquireNextImageKHR.txt[]
* pname:device is the device associated with pname:swapchain. * pname:device is the device associated with pname:swapchain.
* pname:swapchain is the swapchain from which an image is being acquired. * pname:swapchain is the non-retired swapchain from which an image is
being acquired.
* pname:timeout indicates how long the function waits, in nanoseconds, if * pname:timeout indicates how long the function waits, in nanoseconds, if
no image is available. no image is available.
* pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal. * pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal.
@ -561,9 +584,7 @@ include::../../api/protos/vkAcquireNextImageKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkAcquireNextImageKHR-swapchain-01285]] * [[VUID-vkAcquireNextImageKHR-swapchain-01285]]
pname:swapchain must: not have been replaced by being passed as the pname:swapchain must: not be in the retired state
sname:VkSwapchainCreateInfoKHR::pname:oldSwapchain value to
fname:vkCreateSwapchainKHR
* [[VUID-vkAcquireNextImageKHR-semaphore-01286]] * [[VUID-vkAcquireNextImageKHR-semaphore-01286]]
If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* [[VUID-vkAcquireNextImageKHR-fence-01287]] * [[VUID-vkAcquireNextImageKHR-fence-01287]]
@ -687,8 +708,17 @@ dlink:VK_NULL_HANDLE.
An application must: wait until either the pname:semaphore or pname:fence is An application must: wait until either the pname:semaphore or pname:fence is
signaled before using the presentable image. signaled before using the presentable image.
[NOTE]
.Note
====
Use of a non-zero pname:timeout is independent from the need for the
application to synchronize access to the acquired image through use of
pname:semaphore and/or pname:fence.
====
pname:semaphore and pname:fence may: already be signaled when pname:semaphore and pname:fence may: already be signaled when
fname:vkAcquireNextImageKHR returns, if the image is being acquired for the flink:vkAcquireNextImageKHR returns, if the image is being acquired for the
first time, or if the presentable image is immediately ready for use. first time, or if the presentable image is immediately ready for use.
A successful call to fname:vkAcquireNextImageKHR counts as a signal A successful call to fname:vkAcquireNextImageKHR counts as a signal
@ -763,9 +793,9 @@ pname:timeout provided:
This may: happen, for example, if the platform surface has been resized but This may: happen, for example, if the platform surface has been resized but
the platform is able to scale the presented images to the new size to the platform is able to scale the presented images to the new size to
produce valid surface updates. produce valid surface updates.
It is up to applications to decide whether they prefer to continue using the It is up to the application to decide whether it prefers to continue using
current swapchain indefinitely or temporarily in this state, or to re-create the current swapchain indefinitely or temporarily in this state, or to
the swapchain to better match the platform surface properties. re-create the swapchain to better match the platform surface properties.
==== ====
* ename:VK_ERROR_OUT_OF_DATE_KHR is returned if the surface has changed in * ename:VK_ERROR_OUT_OF_DATE_KHR is returned if the surface has changed in
@ -836,7 +866,8 @@ include::../../api/structs/VkAcquireNextImageInfoKHX.txt[]
* pname:sType is the type of this structure. * pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:swapchain is the swapchain from which an image is being acquired. * pname:swapchain is a non-retired swapchain from which an image is
acquired.
* pname:timeout indicates how long the function waits, in nanoseconds, if * pname:timeout indicates how long the function waits, in nanoseconds, if
no image is available. no image is available.
* pname:semaphore is code:VK_NULL_HANDLE or a semaphore to signal. * pname:semaphore is code:VK_NULL_HANDLE or a semaphore to signal.
@ -863,6 +894,8 @@ succeeds, which the other physical device(s) can: wait upon.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkAcquireNextImageInfoKHX-swapchain-01675]]
pname:swapchain must: not be in the retired state
* [[VUID-VkAcquireNextImageInfoKHX-semaphore-01288]] * [[VUID-VkAcquireNextImageInfoKHX-semaphore-01288]]
If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* [[VUID-VkAcquireNextImageInfoKHX-fence-01289]] * [[VUID-VkAcquireNextImageInfoKHX-fence-01289]]
@ -897,9 +930,9 @@ include::../../api/protos/vkQueuePresentKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkQueuePresentKHR-pSwapchains-01292]] * [[VUID-vkQueuePresentKHR-pSwapchains-01292]]
Any given element of pname:pSwapchains member of pname:pPresentInfo Each element of pname:pSwapchains member of pname:pPresentInfo must: be
must: be a swapchain that is created for a surface for which a swapchain that is created for a surface for which presentation is
presentation is supported from pname:queue as determined using a call to supported from pname:queue as determined using a call to
fname:vkGetPhysicalDeviceSurfaceSupportKHR fname:vkGetPhysicalDeviceSurfaceSupportKHR
ifdef::VK_KHR_display_swapchain[] ifdef::VK_KHR_display_swapchain[]
* [[VUID-vkQueuePresentKHR-pSwapchains-01293]] * [[VUID-vkQueuePresentKHR-pSwapchains-01293]]
@ -966,19 +999,19 @@ include::../../api/structs/VkPresentInfoKHR.txt[]
**** ****
ifndef::VK_KHR_shared_presentable_image[] ifndef::VK_KHR_shared_presentable_image[]
* [[VUID-VkPresentInfoKHR-pImageIndices-01296]] * [[VUID-VkPresentInfoKHR-pImageIndices-01296]]
Any given element of pname:pImageIndices must: be the index of a Each element of pname:pImageIndices must: be the index of a presentable
presentable image acquired from the swapchain specified by the image acquired from the swapchain specified by the corresponding element
corresponding element of the pname:pSwapchains array, and the presented of the pname:pSwapchains array, and the presented image subresource
image subresource must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout at the time
layout at the time the operation is executed on a sname:VkDevice the operation is executed on a sname:VkDevice
endif::VK_KHR_shared_presentable_image[] endif::VK_KHR_shared_presentable_image[]
ifdef::VK_KHR_shared_presentable_image[] ifdef::VK_KHR_shared_presentable_image[]
* [[VUID-VkPresentInfoKHR-pImageIndices-01430]] * [[VUID-VkPresentInfoKHR-pImageIndices-01430]]
Any given element of pname:pImageIndices must: be the index of a Each element of pname:pImageIndices must: be the index of a presentable
presentable image acquired from the swapchain specified by the image acquired from the swapchain specified by the corresponding element
corresponding element of the pname:pSwapchains array, and the presented of the pname:pSwapchains array, and the presented image subresource
image subresource must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR or
or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the
operation is executed on a sname:VkDevice operation is executed on a sname:VkDevice
endif::VK_KHR_shared_presentable_image[] endif::VK_KHR_shared_presentable_image[]
**** ****
@ -1146,6 +1179,14 @@ However, if a mechanism other than Vulkan is used to modify the platform
window associated with the swapchain, the content of all presentable images window associated with the swapchain, the content of all presentable images
in the swapchain becomes undefined. in the swapchain becomes undefined.
[NOTE]
.Note
====
The application can: continue to present any acquired images from a retired
swapchain as long as the swapchain has not entered a state that causes
flink:vkQueuePresentKHR to return ename:VK_ERROR_OUT_OF_DATE_KHR.
====
ifdef::VK_EXT_hdr_metadata[] ifdef::VK_EXT_hdr_metadata[]
include::../VK_EXT_hdr_metadata.txt[] include::../VK_EXT_hdr_metadata.txt[]
endif::VK_EXT_hdr_metadata[] endif::VK_EXT_hdr_metadata[]

View File

@ -61,7 +61,8 @@ endif::VK_KHR_maintenance1[]
pname:image must: have been created with pname:image must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdClearColorImage-image-01545]] pname:image must: not use a format listed in * [[VUID-vkCmdClearColorImage-image-01545]]
pname:image must: not use a format listed in
<<features-formats-requiring-sampler-ycbcr-conversion>> <<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdClearColorImage-image-00003]] * [[VUID-vkCmdClearColorImage-image-00003]]
@ -238,17 +239,16 @@ attachments and the command parameters.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdClearAttachments-aspectMask-00015]] * [[VUID-vkCmdClearAttachments-aspectMask-00015]]
If the pname:aspectMask member of any given element of If the pname:aspectMask member of any element of pname:pAttachments
pname:pAttachments contains ename:VK_IMAGE_ASPECT_COLOR_BIT, the contains ename:VK_IMAGE_ASPECT_COLOR_BIT, the pname:colorAttachment
pname:colorAttachment member of those elements must: refer to a valid member of that element must: refer to a valid color attachment in the
color attachment in the current subpass current subpass
* [[VUID-vkCmdClearAttachments-pRects-00016]] * [[VUID-vkCmdClearAttachments-pRects-00016]]
The rectangular region specified by a given element of pname:pRects The rectangular region specified by each element of pname:pRects must:
must: be contained within the render area of the current render pass be contained within the render area of the current render pass instance
instance
* [[VUID-vkCmdClearAttachments-pRects-00017]] * [[VUID-vkCmdClearAttachments-pRects-00017]]
The layers specified by a given element of pname:pRects must: be The layers specified by each element of pname:pRects must: be contained
contained within every attachment that pname:pAttachments refers to within every attachment that pname:pAttachments refers to
ifdef::VK_KHX_multiview[] ifdef::VK_KHX_multiview[]
* [[VUID-vkCmdClearAttachments-baseArrayLayer-00018]] * [[VUID-vkCmdClearAttachments-baseArrayLayer-00018]]
If the render pass instance this is recorded in uses multiview, then If the render pass instance this is recorded in uses multiview, then
@ -522,7 +522,7 @@ additional storage and may incur an additional allocation), and then copy
the data from the command buffer into pname:dstBuffer when the command is the data from the command buffer into pname:dstBuffer when the command is
executed on a device. executed on a device.
The additional cost of this functionality compared to <<<<copies-buffers, The additional cost of this functionality compared to <<copies-buffers,
buffer to buffer copies>> means it is only recommended for very small buffer to buffer copies>> means it is only recommended for very small
amounts of data, and is why it is limited to only 65536 bytes. amounts of data, and is why it is limited to only 65536 bytes.

View File

@ -864,9 +864,9 @@ See <<devsandqueues-lost-device,Lost Device>>.
<<synchronization-pipeline-stages-supported, table of supported pipeline <<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>. stages>>.
* [[VUID-vkQueueSubmit-pSignalSemaphores-00067]] * [[VUID-vkQueueSubmit-pSignalSemaphores-00067]]
Any given element of the pname:pSignalSemaphores member of any element Each element of the pname:pSignalSemaphores member of any element of
of pname:pSubmits must: be unsignaled when the semaphore signal pname:pSubmits must: be unsignaled when the semaphore signal operation
operation it defines is executed on the device it defines is executed on the device
* [[VUID-vkQueueSubmit-pWaitSemaphores-00068]] * [[VUID-vkQueueSubmit-pWaitSemaphores-00068]]
When a semaphore unsignal operation defined by any element of the When a semaphore unsignal operation defined by any element of the
pname:pWaitSemaphores member of any element of pname:pSubmits executes pname:pWaitSemaphores member of any element of pname:pSubmits executes
@ -877,27 +877,27 @@ See <<devsandqueues-lost-device,Lost Device>>.
<<synchronization-semaphores-signaling, semaphore signal operations>> <<synchronization-semaphores-signaling, semaphore signal operations>>
previously submitted for execution. previously submitted for execution.
* [[VUID-vkQueueSubmit-pCommandBuffers-00070]] * [[VUID-vkQueueSubmit-pCommandBuffers-00070]]
Any given element of the pname:pCommandBuffers member of any element of Each element of the pname:pCommandBuffers member of each element of
pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
executable state>>. executable state>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00071]] * [[VUID-vkQueueSubmit-pCommandBuffers-00071]]
If any given element of the pname:pCommandBuffers member of any element If any element of the pname:pCommandBuffers member of any element of
of pname:pSubmits was not recorded with the pname:pSubmits was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
the <<commandbuffers-lifecycle, pending state>>. the <<commandbuffers-lifecycle, pending state>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00072]] * [[VUID-vkQueueSubmit-pCommandBuffers-00072]]
Any <<commandbuffers-secondary, secondary command buffers recorded>> Any <<commandbuffers-secondary, secondary command buffers recorded>>
into any given element of the pname:pCommandBuffers member of any into any element of the pname:pCommandBuffers member of any element of
element of pname:pSubmits must: be in the <<commandbuffers-lifecycle, pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
pending or executable state>>. executable state>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00073]] * [[VUID-vkQueueSubmit-pCommandBuffers-00073]]
If any <<commandbuffers-secondary, secondary command buffers recorded>> If any <<commandbuffers-secondary, secondary command buffers recorded>>
into any given element of the pname:pCommandBuffers member of any into any element of the pname:pCommandBuffers member of any element of
element of pname:pSubmits was not recorded with the pname:pSubmits was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
the <<commandbuffers-lifecycle, pending state>>. the <<commandbuffers-lifecycle, pending state>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00074]] * [[VUID-vkQueueSubmit-pCommandBuffers-00074]]
Any given element of the pname:pCommandBuffers member of any element of Each element of the pname:pCommandBuffers member of each element of
pname:pSubmits must: have been allocated from a sname:VkCommandPool that pname:pSubmits must: have been allocated from a sname:VkCommandPool that
was created for the same queue family pname:queue belongs to. was created for the same queue family pname:queue belongs to.
**** ****
@ -947,20 +947,19 @@ otherwise execute out of order.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkSubmitInfo-pCommandBuffers-00075]] * [[VUID-VkSubmitInfo-pCommandBuffers-00075]]
Any given element of pname:pCommandBuffers must: not have been allocated Each element of pname:pCommandBuffers must: not have been allocated with
with ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00076]] * [[VUID-VkSubmitInfo-pWaitDstStageMask-00076]]
If the <<features-features-geometryShader,geometry shaders>> feature is If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, any given element of pname:pWaitDstStageMask must: not not enabled, each element of pname:pWaitDstStageMask must: not contain
contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00077]] * [[VUID-VkSubmitInfo-pWaitDstStageMask-00077]]
If the <<features-features-tessellationShader,tessellation shaders>> If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, any given element of pname:pWaitDstStageMask feature is not enabled, each element of pname:pWaitDstStageMask must:
must: not contain not contain ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00078]] * [[VUID-VkSubmitInfo-pWaitDstStageMask-00078]]
Any given element of pname:pWaitDstStageMask must: not include Each element of pname:pWaitDstStageMask must: not include
ename:VK_PIPELINE_STAGE_HOST_BIT. ename:VK_PIPELINE_STAGE_HOST_BIT.
**** ****
@ -1197,10 +1196,10 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
pname:commandBuffer must: have been allocated with a pname:level of pname:commandBuffer must: have been allocated with a pname:level of
ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00088]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00088]]
Any given element of pname:pCommandBuffers must: have been allocated Each element of pname:pCommandBuffers must: have been allocated with a
with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00089]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00089]]
Any given element of pname:pCommandBuffers must: be in the Each element of pname:pCommandBuffers must: be in the
<<commandbuffers-lifecycle, pending or executable state>>. <<commandbuffers-lifecycle, pending or executable state>>.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00090]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00090]]
If any element of pname:pCommandBuffers was not recorded with the If any element of pname:pCommandBuffers was not recorded with the
@ -1208,21 +1207,21 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
recorded into any other primary command buffer, that primary command recorded into any other primary command buffer, that primary command
buffer must: not be in the <<commandbuffers-lifecycle, pending state>> buffer must: not be in the <<commandbuffers-lifecycle, pending state>>
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00091]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00091]]
If any given element of pname:pCommandBuffers was not recorded with the If any element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not be ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not be
in the <<commandbuffers-lifecycle, pending state>>. in the <<commandbuffers-lifecycle, pending state>>.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00092]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00092]]
If any given element of pname:pCommandBuffers was not recorded with the If any element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
have already been recorded to pname:commandBuffer. have already been recorded to pname:commandBuffer.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00093]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00093]]
If any given element of pname:pCommandBuffers was not recorded with the If any element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
appear more than once in pname:pCommandBuffers. appear more than once in pname:pCommandBuffers.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00094]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00094]]
Any given element of pname:pCommandBuffers must: have been allocated Each element of pname:pCommandBuffers must: have been allocated from a
from a sname:VkCommandPool that was created for the same queue family as sname:VkCommandPool that was created for the same queue family as the
the sname:VkCommandPool from which pname:commandBuffer was allocated sname:VkCommandPool from which pname:commandBuffer was allocated
* [[VUID-vkCmdExecuteCommands-contents-00095]] * [[VUID-vkCmdExecuteCommands-contents-00095]]
If fname:vkCmdExecuteCommands is being called within a render pass If fname:vkCmdExecuteCommands is being called within a render pass
instance, that render pass instance must: have been begun with the instance, that render pass instance must: have been begun with the
@ -1230,14 +1229,13 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00096]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00096]]
If fname:vkCmdExecuteCommands is being called within a render pass If fname:vkCmdExecuteCommands is being called within a render pass
instance, any given element of pname:pCommandBuffers must: have been instance, each element of pname:pCommandBuffers must: have been recorded
recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00097]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00097]]
If fname:vkCmdExecuteCommands is being called within a render pass If fname:vkCmdExecuteCommands is being called within a render pass
instance, any given element of pname:pCommandBuffers must: have been instance, each element of pname:pCommandBuffers must: have been recorded
recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the
the index of the subpass which the given command buffer will be executed index of the subpass which the given command buffer will be executed in
in
* [[VUID-vkCmdExecuteCommands-pInheritanceInfo-00098]] * [[VUID-vkCmdExecuteCommands-pInheritanceInfo-00098]]
If fname:vkCmdExecuteCommands is being called within a render pass If fname:vkCmdExecuteCommands is being called within a render pass
instance, the render passes specified in the instance, the render passes specified in the
@ -1247,13 +1245,13 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
<<renderpass-compatibility,compatible>> with the current render pass. <<renderpass-compatibility,compatible>> with the current render pass.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00099]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00099]]
If fname:vkCmdExecuteCommands is being called within a render pass If fname:vkCmdExecuteCommands is being called within a render pass
instance, and any given element of pname:pCommandBuffers was recorded instance, and any element of pname:pCommandBuffers was recorded with
with sname:VkCommandBufferInheritanceInfo::pname:framebuffer not equal sname:VkCommandBufferInheritanceInfo::pname:framebuffer not equal to
to dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the
sname:VkFramebuffer used in the current render pass instance sname:VkFramebuffer used in the current render pass instance
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00100]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00100]]
If fname:vkCmdExecuteCommands is not being called within a render pass If fname:vkCmdExecuteCommands is not being called within a render pass
instance, any given element of pname:pCommandBuffers must: not have been instance, each element of pname:pCommandBuffers must: not have been
recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
* [[VUID-vkCmdExecuteCommands-commandBuffer-00101]] * [[VUID-vkCmdExecuteCommands-commandBuffer-00101]]
If the <<features-features-inheritedQueries,inherited queries>> feature If the <<features-features-inheritedQueries,inherited queries>> feature
@ -1278,9 +1276,8 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having
all bits set that are set in the sname:VkQueryPool the query uses all bits set that are set in the sname:VkQueryPool the query uses
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00105]] * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00105]]
Any given element of pname:pCommandBuffers must: not begin any query Each element of pname:pCommandBuffers must: not begin any query types
types that are <<queries-operation-active,active>> in that are <<queries-operation-active,active>> in pname:commandBuffer
pname:commandBuffer
**** ****
include::../validity/protos/vkCmdExecuteCommands.txt[] include::../validity/protos/vkCmdExecuteCommands.txt[]

View File

@ -100,19 +100,19 @@ memory.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdCopyBuffer-size-00112]] * [[VUID-vkCmdCopyBuffer-size-00112]]
The pname:size member of a given element of pname:pRegions must: be The pname:size member of each element of pname:pRegions must: be greater
greater than `0` than `0`
* [[VUID-vkCmdCopyBuffer-srcOffset-00113]] * [[VUID-vkCmdCopyBuffer-srcOffset-00113]]
The pname:srcOffset member of a given element of pname:pRegions must: be The pname:srcOffset member of each element of pname:pRegions must: be
less than the size of pname:srcBuffer less than the size of pname:srcBuffer
* [[VUID-vkCmdCopyBuffer-dstOffset-00114]] * [[VUID-vkCmdCopyBuffer-dstOffset-00114]]
The pname:dstOffset member of a given element of pname:pRegions must: be The pname:dstOffset member of each element of pname:pRegions must: be
less than the size of pname:dstBuffer less than the size of pname:dstBuffer
* [[VUID-vkCmdCopyBuffer-size-00115]] * [[VUID-vkCmdCopyBuffer-size-00115]]
The pname:size member of a given element of pname:pRegions must: be less The pname:size member of each element of pname:pRegions must: be less
than or equal to the size of pname:srcBuffer minus pname:srcOffset than or equal to the size of pname:srcBuffer minus pname:srcOffset
* [[VUID-vkCmdCopyBuffer-size-00116]] * [[VUID-vkCmdCopyBuffer-size-00116]]
The pname:size member of a given element of pname:pRegions must: be less The pname:size member of each element of pname:pRegions must: be less
than or equal to the size of pname:dstBuffer minus pname:dstOffset than or equal to the size of pname:dstBuffer minus pname:dstOffset
* [[VUID-vkCmdCopyBuffer-pRegions-00117]] * [[VUID-vkCmdCopyBuffer-pRegions-00117]]
The union of the source regions, and the union of the destination The union of the source regions, and the union of the destination
@ -304,8 +304,8 @@ images, but both images must: have the same number of samples.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdCopyImage-pRegions-00122]] * [[VUID-vkCmdCopyImage-pRegions-00122]]
The source region specified by a given element of pname:pRegions must: The source region specified by each element of pname:pRegions must: be a
be a region that is contained within pname:srcImage region that is contained within pname:srcImage
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:srcImage's elink:VkFormat is not a if the pname:srcImage's elink:VkFormat is not a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@ -313,8 +313,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
copied if the pname:srcImage's elink:VkFormat is a multi-planar format copied if the pname:srcImage's elink:VkFormat is a multi-planar format
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImage-pRegions-00123]] * [[VUID-vkCmdCopyImage-pRegions-00123]]
The destination region specified by a given element of pname:pRegions The destination region specified by each element of pname:pRegions must:
must: be a region that is contained within pname:dstImage be a region that is contained within pname:dstImage
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:dstImage's elink:VkFormat is not a if the pname:dstImage's elink:VkFormat is not a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@ -344,7 +344,8 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
contiguously to a single sname:VkDeviceMemory object contiguously to a single sname:VkDeviceMemory object
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImage-srcImage-01546]] If pname:srcImage is non-sparse then the image or _disjoint_ plane to be * [[VUID-vkCmdCopyImage-srcImage-01546]]
If pname:srcImage is non-sparse then the image or _disjoint_ plane to be
copied must: be bound completely and contiguously to a single copied must: be bound completely and contiguously to a single
sname:VkDeviceMemory object sname:VkDeviceMemory object
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
@ -382,7 +383,8 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
contiguously to a single sname:VkDeviceMemory object contiguously to a single sname:VkDeviceMemory object
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImage-dstImage-01547]] If pname:dstImage is non-sparse then the image or _disjoint_ plane that * [[VUID-vkCmdCopyImage-dstImage-01547]]
If pname:dstImage is non-sparse then the image or _disjoint_ plane that
is the destination of the copy must: be bound completely and is the destination of the copy must: be bound completely and
contiguously to a single sname:VkDeviceMemory object contiguously to a single sname:VkDeviceMemory object
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
@ -408,18 +410,21 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
compatible, as defined <<copies-images-format-compatibility, below>> compatible, as defined <<copies-images-format-compatibility, below>>
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImage-srcImage-01548]] If the elink:VkFormat of each of pname:srcImage and pname:dstImage is * [[VUID-vkCmdCopyImage-srcImage-01548]]
If the elink:VkFormat of each of pname:srcImage and pname:dstImage is
not a not a
<<features-formats-requiring-sampler-ycbcr-conversion,_multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,_multi-planar
format_>>, the elink:VkFormat of each of pname:srcImage and format_>>, the elink:VkFormat of each of pname:srcImage and
pname:dstImage must: be compatible, as defined pname:dstImage must: be compatible, as defined
<<copies-images-format-compatibility, below>> <<copies-images-format-compatibility, below>>
* [[VUID-vkCmdCopyImage-None-01549]] In a copy to or from a plane of a * [[VUID-vkCmdCopyImage-None-01549]]
In a copy to or from a plane of a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
image>>, the elink:VkFormat of the image and plane must: be compatible image>>, the elink:VkFormat of the image and plane must: be compatible
according to <<features-formats-compatible-planes,the description of according to <<features-formats-compatible-planes,the description of
compatible planes>> for the plane being copied compatible planes>> for the plane being copied
* [[VUID-vkCmdCopyImage-aspectMask-01550]] When a copy is performed to or from an image with a * [[VUID-vkCmdCopyImage-aspectMask-01550]]
When a copy is performed to or from an image with a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>>, the pname:aspectMask of the pname:srcSubresource and/or format>>, the pname:aspectMask of the pname:srcSubresource and/or
pname:dstSubresource that refers to the multi-planar image must: be pname:dstSubresource that refers to the multi-planar image must: be
@ -491,39 +496,46 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
pname:dstSubresource must: match pname:dstSubresource must: match
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkImageCopy-srcImage-01551]] If neither the calling command's pname:srcImage nor the calling * [[VUID-VkImageCopy-srcImage-01551]]
If neither the calling command's pname:srcImage nor the calling
command's pname:dstImage has a command's pname:dstImage has a
<<features-formats-requiring-sampler-ycbcr-conversion, multi-planar <<features-formats-requiring-sampler-ycbcr-conversion, multi-planar
image format>> then the pname:aspectMask member of pname:srcSubresource image format>> then the pname:aspectMask member of pname:srcSubresource
and pname:dstSubresource must: match and pname:dstSubresource must: match
* [[VUID-VkImageCopy-srcImage-01552]] If the calling command's pname:srcImage has a elink:VkFormat with * [[VUID-VkImageCopy-srcImage-01552]]
If the calling command's pname:srcImage has a elink:VkFormat with
<<features-formats-requiring-sampler-ycbcr-conversion,two planes>> then <<features-formats-requiring-sampler-ycbcr-conversion,two planes>> then
the pname:srcSubresource pname:aspectMask must: be the pname:srcSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR
* [[VUID-VkImageCopy-srcImage-01553]] If the calling command's pname:srcImage has a elink:VkFormat with * [[VUID-VkImageCopy-srcImage-01553]]
If the calling command's pname:srcImage has a elink:VkFormat with
<<features-formats-requiring-sampler-ycbcr-conversion,three planes>> <<features-formats-requiring-sampler-ycbcr-conversion,three planes>>
then the pname:srcSubresource pname:aspectMask must: be then the pname:srcSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
* [[VUID-VkImageCopy-dstImage-01554]] If the calling command's pname:dstImage has a elink:VkFormat with * [[VUID-VkImageCopy-dstImage-01554]]
If the calling command's pname:dstImage has a elink:VkFormat with
<<features-formats-requiring-sampler-ycbcr-conversion,two planes>> then <<features-formats-requiring-sampler-ycbcr-conversion,two planes>> then
the pname:dstSubresource pname:aspectMask must: be the pname:dstSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR
* [[VUID-VkImageCopy-dstImage-01555]] If the calling command's pname:dstImage has a elink:VkFormat with * [[VUID-VkImageCopy-dstImage-01555]]
If the calling command's pname:dstImage has a elink:VkFormat with
<<features-formats-requiring-sampler-ycbcr-conversion,three planes>> <<features-formats-requiring-sampler-ycbcr-conversion,three planes>>
then the pname:dstSubresource pname:aspectMask must: be then the pname:dstSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
* [[VUID-VkImageCopy-srcImage-01556]] If the calling command's pname:srcImage has a * [[VUID-VkImageCopy-srcImage-01556]]
If the calling command's pname:srcImage has a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar image <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar image
format>> and the pname:dstImage does not have a multi-planar image format>> and the pname:dstImage does not have a multi-planar image
format, the pname:dstSubresource pname:aspectMask must: be format, the pname:dstSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_COLOR_BIT ename:VK_IMAGE_ASPECT_COLOR_BIT
* [[VUID-VkImageCopy-dstImage-01557]] If the calling command's pname:dstImage has a * [[VUID-VkImageCopy-dstImage-01557]]
If the calling command's pname:dstImage has a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar image <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar image
format>> and the pname:srcImage does not have a multi-planar image format>> and the pname:srcImage does not have a multi-planar image
format, the pname:srcSubresource pname:aspectMask must: be format, the pname:srcSubresource pname:aspectMask must: be
@ -760,11 +772,11 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdCopyBufferToImage-pRegions-00171]] * [[VUID-vkCmdCopyBufferToImage-pRegions-00171]]
The buffer region specified by a given element of pname:pRegions must: The buffer region specified by each element of pname:pRegions must: be a
be a region that is contained within pname:srcBuffer region that is contained within pname:srcBuffer
* [[VUID-vkCmdCopyBufferToImage-pRegions-00172]] * [[VUID-vkCmdCopyBufferToImage-pRegions-00172]]
The image region specified by a given element of pname:pRegions must: be The image region specified by each element of pname:pRegions must: be a
a region that is contained within pname:dstImage region that is contained within pname:dstImage
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:dstImage's elink:VkFormat is not a if the pname:dstImage's elink:VkFormat is not a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@ -863,8 +875,8 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00182]] * [[VUID-vkCmdCopyImageToBuffer-pRegions-00182]]
The image region specified by a given element of pname:pRegions must: be The image region specified by each element of pname:pRegions must: be a
a region that is contained within pname:srcImage region that is contained within pname:srcImage
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:srcImage's elink:VkFormat is not a if the pname:srcImage's elink:VkFormat is not a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@ -872,8 +884,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
copied if the pname:srcImage's elink:VkFormat is a multi-planar format copied if the pname:srcImage's elink:VkFormat is a multi-planar format
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00183]] * [[VUID-vkCmdCopyImageToBuffer-pRegions-00183]]
The buffer region specified by a given element of pname:pRegions must: The buffer region specified by each element of pname:pRegions must: be a
be a region that is contained within pname:dstBuffer region that is contained within pname:dstBuffer
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00184]] * [[VUID-vkCmdCopyImageToBuffer-pRegions-00184]]
The union of all source regions, and the union of all destination The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap regions, specified by the elements of pname:pRegions, must: not overlap
@ -991,12 +1003,14 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
format's element size format's element size
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkBufferImageCopy-bufferOffset-01558]] If the calling command's sname:VkImage parameter's format is not a * [[VUID-VkBufferImageCopy-bufferOffset-01558]]
If the calling command's sname:VkImage parameter's format is not a
depth/stencil format or a depth/stencil format or a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>>,cthen pname:bufferOffset must: be a multiple of the format's format>>,cthen pname:bufferOffset must: be a multiple of the format's
element size element size
* [[VUID-VkBufferImageCopy-bufferOffset-01559]] If the calling command's sname:VkImage parameter's format is a * [[VUID-VkBufferImageCopy-bufferOffset-01559]]
If the calling command's sname:VkImage parameter's format is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>>, then pname:bufferOffset must: be a multiple of the element format>>, then pname:bufferOffset must: be a multiple of the element
size of the compatible format for the format and the pname:aspectMask of size of the compatible format for the format and the pname:aspectMask of
@ -1109,7 +1123,8 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
The pname:aspectMask member of pname:imageSubresource must: specify The pname:aspectMask member of pname:imageSubresource must: specify
aspects present in the calling command's sname:VkImage parameter aspects present in the calling command's sname:VkImage parameter
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkBufferImageCopy-aspectMask-01560]] If the calling command's sname:VkImage parameter's format is a * [[VUID-VkBufferImageCopy-aspectMask-01560]]
If the calling command's sname:VkImage parameter's format is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>>, then the pname:aspectMask member of pname:imageSubresource format>>, then the pname:aspectMask member of pname:imageSubresource
must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
@ -1326,11 +1341,11 @@ representable range of the destination format, then casting the value.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdBlitImage-pRegions-00215]] * [[VUID-vkCmdBlitImage-pRegions-00215]]
The source region specified by a given element of pname:pRegions must: The source region specified by each element of pname:pRegions must: be a
be a region that is contained within pname:srcImage region that is contained within pname:srcImage
* [[VUID-vkCmdBlitImage-pRegions-00216]] * [[VUID-vkCmdBlitImage-pRegions-00216]]
The destination region specified by a given element of pname:pRegions The destination region specified by each element of pname:pRegions must:
must: be a region that is contained within pname:dstImage be a region that is contained within pname:dstImage
* [[VUID-vkCmdBlitImage-pRegions-00217]] * [[VUID-vkCmdBlitImage-pRegions-00217]]
The union of all destination regions, specified by the elements of The union of all destination regions, specified by the elements of
pname:pRegions, must: not overlap in memory with any texel that may: be pname:pRegions, must: not overlap in memory with any texel that may: be
@ -1343,7 +1358,8 @@ representable range of the destination format, then casting the value.
optimally tiled images) - as returned by optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdBlitImage-srcImage-01561]] pname:srcImage must: not use a format listed in * [[VUID-vkCmdBlitImage-srcImage-01561]]
pname:srcImage must: not use a format listed in
<<features-formats-requiring-sampler-ycbcr-conversion>> <<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdBlitImage-srcImage-00219]] * [[VUID-vkCmdBlitImage-srcImage-00219]]
@ -1375,7 +1391,8 @@ endif::VK_KHR_shared_presentable_image[]
optimally tiled images) - as returned by optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdBlitImage-dstImage-01562]] pname:dstImage must: not use a format listed in * [[VUID-vkCmdBlitImage-dstImage-01562]]
pname:dstImage must: not use a format listed in
<<features-formats-requiring-sampler-ycbcr-conversion>> <<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdBlitImage-dstImage-00224]] * [[VUID-vkCmdBlitImage-dstImage-00224]]
@ -1575,11 +1592,11 @@ pname:layerCount layers are resolved to the destination image.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdResolveImage-pRegions-00253]] * [[VUID-vkCmdResolveImage-pRegions-00253]]
The source region specified by a given element of pname:pRegions must: The source region specified by each element of pname:pRegions must: be a
be a region that is contained within pname:srcImage region that is contained within pname:srcImage
* [[VUID-vkCmdResolveImage-pRegions-00254]] * [[VUID-vkCmdResolveImage-pRegions-00254]]
The destination region specified by a given element of pname:pRegions The destination region specified by each element of pname:pRegions must:
must: be a region that is contained within pname:dstImage be a region that is contained within pname:dstImage
* [[VUID-vkCmdResolveImage-pRegions-00255]] * [[VUID-vkCmdResolveImage-pRegions-00255]]
The union of all source regions, and the union of all destination The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap regions, specified by the elements of pname:pRegions, must: not overlap

View File

@ -1563,23 +1563,22 @@ include::../api/structs/VkDescriptorSetAllocateInfo.txt[]
* pname:pSetLayouts is an array of descriptor set layouts, with each * pname:pSetLayouts is an array of descriptor set layouts, with each
member specifying how the corresponding descriptor set is allocated. member specifying how the corresponding descriptor set is allocated.
ifndef::VK_KHR_maintenance1[]
.Valid Usage .Valid Usage
**** ****
ifndef::VK_KHR_maintenance1[]
* [[VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306]] * [[VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306]]
pname:descriptorSetCount must: not be greater than the number of sets pname:descriptorSetCount must: not be greater than the number of sets
that are currently available for allocation in pname:descriptorPool that are currently available for allocation in pname:descriptorPool
* [[VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307]] * [[VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307]]
pname:descriptorPool must: have enough free descriptor capacity pname:descriptorPool must: have enough free descriptor capacity
remaining to allocate the descriptor sets of the specified layouts remaining to allocate the descriptor sets of the specified layouts
endif::VK_KHR_maintenance1[]
ifdef::VK_KHR_push_descriptor[] ifdef::VK_KHR_push_descriptor[]
* [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308]] * [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308]]
Any given element of pname:pSetLayouts must: not have been created with Each element of pname:pSetLayouts must: not have been created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
endif::VK_KHR_push_descriptor[] endif::VK_KHR_push_descriptor[]
**** ****
endif::VK_KHR_maintenance1[]
include::../validity/structs/VkDescriptorSetAllocateInfo.txt[] include::../validity/structs/VkDescriptorSetAllocateInfo.txt[]
-- --
@ -1686,17 +1685,17 @@ Each element in the pname:pDescriptorCopies array is a
slink:VkCopyDescriptorSet structure describing an operation copying slink:VkCopyDescriptorSet structure describing an operation copying
descriptors between sets. descriptors between sets.
If the pname:dstSet member of any given element of pname:pDescriptorWrites If the pname:dstSet member of any element of pname:pDescriptorWrites or
or pname:pDescriptorCopies is bound, accessed, or modified by any command pname:pDescriptorCopies is bound, accessed, or modified by any command that
that was recorded to a command buffer which is currently in the was recorded to a command buffer which is currently in the
<<commandbuffers-lifecycle, recording or executable state>>, that command <<commandbuffers-lifecycle, recording or executable state>>, that command
buffer becomes <<commandbuffers-lifecycle, invalid>>. buffer becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkUpdateDescriptorSets-dstSet-00314]] * [[VUID-vkUpdateDescriptorSets-dstSet-00314]]
The pname:dstSet member of any given element of pname:pDescriptorWrites The pname:dstSet member of each element of pname:pDescriptorWrites or
or pname:pDescriptorCopies must: not be used by any command that was pname:pDescriptorCopies must: not be used by any command that was
recorded to a command buffer which is in the <<commandbuffers-lifecycle, recorded to a command buffer which is in the <<commandbuffers-lifecycle,
pending state>>. pending state>>.
**** ****
@ -1800,16 +1799,15 @@ bindings as needed to update all pname:descriptorCount descriptors.
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
not allocated with a layout that included immutable samplers for not allocated with a layout that included immutable samplers for
pname:dstBinding with pname:descriptorType, the pname:sampler member of pname:dstBinding with pname:descriptorType, the pname:sampler member of
any given element of pname:pImageInfo must: be a valid sname:VkSampler each element of pname:pImageInfo must: be a valid sname:VkSampler object
object
* [[VUID-VkWriteDescriptorSet-descriptorType-00326]] * [[VUID-VkWriteDescriptorSet-descriptorType-00326]]
If pname:descriptorType is If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView and ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView and
pname:imageLayout members of any given element of pname:pImageInfo must: pname:imageLayout members of each element of pname:pImageInfo must: be a
be a valid sname:VkImageView and elink:VkImageLayout, respectively valid sname:VkImageView and elink:VkImageLayout, respectively
* [[VUID-VkWriteDescriptorSet-descriptorType-01402]] * [[VUID-VkWriteDescriptorSet-descriptorType-01402]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, for If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, for
each descriptor that will be accessed via load or store operations the each descriptor that will be accessed via load or store operations the
@ -1818,79 +1816,78 @@ bindings as needed to update all pname:descriptorCount descriptors.
* [[VUID-VkWriteDescriptorSet-descriptorType-00327]] * [[VUID-VkWriteDescriptorSet-descriptorType-00327]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:offset member ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:offset member
of any given element of pname:pBufferInfo must: be a multiple of of each element of pname:pBufferInfo must: be a multiple of
sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
* [[VUID-VkWriteDescriptorSet-descriptorType-00328]] * [[VUID-VkWriteDescriptorSet-descriptorType-00328]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:offset member ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:offset member
of any given element of pname:pBufferInfo must: be a multiple of of each element of pname:pBufferInfo must: be a multiple of
sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
* [[VUID-VkWriteDescriptorSet-descriptorType-00329]] * [[VUID-VkWriteDescriptorSet-descriptorType-00329]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, and the pname:buffer
of any given element of pname:pBufferInfo that is non-sparse must: be member of any element of pname:pBufferInfo is the handle of a non-sparse
bound completely and contiguously to a single sname:VkDeviceMemory buffer, then that buffer must: be bound completely and contiguously to a
object single sname:VkDeviceMemory object
* [[VUID-VkWriteDescriptorSet-descriptorType-00330]] * [[VUID-VkWriteDescriptorSet-descriptorType-00330]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:buffer member ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:buffer member
of any given element of pname:pBufferInfo must: have been created with of each element of pname:pBufferInfo must: have been created with
ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00331]] * [[VUID-VkWriteDescriptorSet-descriptorType-00331]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
of any given element of pname:pBufferInfo must: have been created with of each element of pname:pBufferInfo must: have been created with
ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00332]] * [[VUID-VkWriteDescriptorSet-descriptorType-00332]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:range member ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:range member
of any given element of pname:pBufferInfo, or the effective range if of each element of pname:pBufferInfo, or the effective range if
pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange
* [[VUID-VkWriteDescriptorSet-descriptorType-00333]] * [[VUID-VkWriteDescriptorSet-descriptorType-00333]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:range member ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:range member
of any given element of pname:pBufferInfo, or the effective range if of each element of pname:pBufferInfo, or the effective range if
pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange
* [[VUID-VkWriteDescriptorSet-descriptorType-00334]] * [[VUID-VkWriteDescriptorSet-descriptorType-00334]]
If pname:descriptorType is If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that
any given element of pname:pTexelBufferView was created from must: have each element of pname:pTexelBufferView was created from must: have been
been created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00335]] * [[VUID-VkWriteDescriptorSet-descriptorType-00335]]
If pname:descriptorType is If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that
any given element of pname:pTexelBufferView was created from must: have each element of pname:pTexelBufferView was created from must: have been
been created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00336]] * [[VUID-VkWriteDescriptorSet-descriptorType-00336]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView member of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView member of
any given element of pname:pImageInfo must: have been created with the each element of pname:pImageInfo must: have been created with the
identity swizzle identity swizzle
* [[VUID-VkWriteDescriptorSet-descriptorType-00337]] * [[VUID-VkWriteDescriptorSet-descriptorType-00337]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageView ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageView
member of any given element of pname:pImageInfo must: have been created member of each element of pname:pImageInfo must: have been created with
with ename:VK_IMAGE_USAGE_SAMPLED_BIT set ename:VK_IMAGE_USAGE_SAMPLED_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-01403]] * [[VUID-VkWriteDescriptorSet-descriptorType-01403]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageLayout ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageLayout
member of any given element of pname:pImageInfo must: be member of each element of pname:pImageInfo must: be
ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL or ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-VkWriteDescriptorSet-descriptorType-00338]] * [[VUID-VkWriteDescriptorSet-descriptorType-00338]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
the pname:imageView member of any given element of pname:pImageInfo the pname:imageView member of each element of pname:pImageInfo must:
must: have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
set
* [[VUID-VkWriteDescriptorSet-descriptorType-00339]] * [[VUID-VkWriteDescriptorSet-descriptorType-00339]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
pname:imageView member of any given element of pname:pImageInfo must: pname:imageView member of each element of pname:pImageInfo must: have
have been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
**** ****
include::../validity/structs/VkWriteDescriptorSet.txt[] include::../validity/structs/VkWriteDescriptorSet.txt[]
@ -2013,7 +2010,8 @@ endif::VK_KHR_maintenance1[]
subresource accessible from pname:imageView at the time this descriptor subresource accessible from pname:imageView at the time this descriptor
is accessed is accessed
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkDescriptorImageInfo-sampler-01563]] If pname:sampler is used and enables <<samplers-YCbCr-conversion,sampler * [[VUID-VkDescriptorImageInfo-sampler-01563]]
If pname:sampler is used and enables <<samplers-YCbCr-conversion,sampler
Y'C~B~C~R~ conversion>>: Y'C~B~C~R~ conversion>>:
** The pname:format of the pname:imageView must: be the same as the ** The pname:format of the pname:imageView must: be the same as the
elink:VkFormat of the image elink:VkFormat of the image
@ -2032,7 +2030,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
which is an _identically defined object_ to the pname:conversion of which is an _identically defined object_ to the pname:conversion of
the sname:VkSamplerYcbcrConversionInfoKHR which is in the pname:pNext the sname:VkSamplerYcbcrConversionInfoKHR which is in the pname:pNext
chain of the pname:sampler chain of the pname:sampler
* [[VUID-VkDescriptorImageInfo-sampler-01564]] If pname:sampler is used and does not enable * [[VUID-VkDescriptorImageInfo-sampler-01564]]
If pname:sampler is used and does not enable
<<samplers-YCbCr-conversion, sampler Y'C~B~C~R~ conversion>> and the <<samplers-YCbCr-conversion, sampler Y'C~B~C~R~ conversion>> and the
elink:VkFormat of the image is a elink:VkFormat of the image is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@ -2442,7 +2441,7 @@ const VkDescriptorUpdateTemplateCreateInfoKHR createInfo =
}; };
VkDescriptorUpdateTemplateKHR myDescriptorUpdateTemplate; VkDescriptorUpdateTemplateKHR myDescriptorUpdateTemplate;
myResult = vkCreatePipelineLayout( myResult = vkCreateDescriptorUpdateTemplateKHR(
myDevice, myDevice,
&createInfo, &createInfo,
NULL, NULL,
@ -2548,10 +2547,10 @@ descriptor set.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358]] * [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358]]
Any given element of pname:pDescriptorSets must: have been allocated Each element of pname:pDescriptorSets must: have been allocated with a
with a sname:VkDescriptorSetLayout that matches (is the same as, or sname:VkDescriptorSetLayout that matches (is the same as, or identically
identically defined as) the sname:VkDescriptorSetLayout at set _n_ in defined as) the sname:VkDescriptorSetLayout at set _n_ in pname:layout,
pname:layout, where _n_ is the sum of pname:firstSet and the index into where _n_ is the sum of pname:firstSet and the index into
pname:pDescriptorSets pname:pDescriptorSets
* [[VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359]] * [[VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359]]
pname:dynamicOffsetCount must: be equal to the total number of dynamic pname:dynamicOffsetCount must: be equal to the total number of dynamic
@ -2564,7 +2563,7 @@ descriptor set.
pname:pipelineBindPoint must: be supported by the pname:commandBuffer's pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
parent sname:VkCommandPool's queue family parent sname:VkCommandPool's queue family
* [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-00362]] * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-00362]]
Any given element of pname:pDynamicOffsets must: satisfy the required Each element of pname:pDynamicOffsets must: satisfy the required
alignment for the corresponding descriptor binding's descriptor type alignment for the corresponding descriptor binding's descriptor type
**** ****
@ -2749,7 +2748,7 @@ const VkDescriptorUpdateTemplateCreateInfoKHR createInfo =
}; };
VkDescriptorUpdateTemplateKHR myDescriptorUpdateTemplate; VkDescriptorUpdateTemplateKHR myDescriptorUpdateTemplate;
myResult = vkCreatePipelineLayout( myResult = vkCreateDescriptorUpdateTemplateKHR(
myDevice, myDevice,
&createInfo, &createInfo,
NULL, NULL,

View File

@ -714,7 +714,7 @@ include::../api/structs/VkDeviceCreateInfo.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkDeviceCreateInfo-queueFamilyIndex-00372]] * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-00372]]
The pname:queueFamilyIndex member of any given element of The pname:queueFamilyIndex member of each element of
pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
ifdef::VK_KHR_get_physical_device_properties2[] ifdef::VK_KHR_get_physical_device_properties2[]
* [[VUID-VkDeviceCreateInfo-pNext-00373]] * [[VUID-VkDeviceCreateInfo-pNext-00373]]

View File

@ -873,6 +873,9 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
* [[VUID-vkCmdDrawIndirect-buffer-00474]] * [[VUID-vkCmdDrawIndirect-buffer-00474]]
If pname:buffer is non-sparse then it must: be bound completely and If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndirect-buffer-01660]]
pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndirect-offset-00475]] * [[VUID-vkCmdDrawIndirect-offset-00475]]
pname:offset must: be a multiple of `4` pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirect-drawCount-00476]] * [[VUID-vkCmdDrawIndirect-drawCount-00476]]
@ -1091,6 +1094,18 @@ located at pname:countBufferOffset and use this as the draw count.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdDrawIndirectCountAMD-buffer-01661]]
If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndirectCountAMD-buffer-01662]]
pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndirectCountAMD-countBuffer-01663]]
If pname:countBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndirectCountAMD-countBuffer-01664]]
pname:countBuffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndirectCountAMD-offset-00502]] * [[VUID-vkCmdDrawIndirectCountAMD-offset-00502]]
pname:offset must: be a multiple of `4` pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirectCountAMD-countBufferOffset-00503]] * [[VUID-vkCmdDrawIndirectCountAMD-countBufferOffset-00503]]
@ -1266,6 +1281,9 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
* [[VUID-vkCmdDrawIndexedIndirect-buffer-00526]] * [[VUID-vkCmdDrawIndexedIndirect-buffer-00526]]
If pname:buffer is non-sparse then it must: be bound completely and If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndexedIndirect-buffer-01665]]
pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndexedIndirect-offset-00527]] * [[VUID-vkCmdDrawIndexedIndirect-offset-00527]]
pname:offset must: be a multiple of `4` pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00528]] * [[VUID-vkCmdDrawIndexedIndirect-drawCount-00528]]
@ -1493,6 +1511,18 @@ located at pname:countBufferOffset and use this as the draw count.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-buffer-01666]]
If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-buffer-01667]]
pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-01668]]
If pname:countBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-01669]]
pname:countBuffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-offset-00555]] * [[VUID-vkCmdDrawIndexedIndirectCountAMD-offset-00555]]
pname:offset must: be a multiple of `4` pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBufferOffset-00556]] * [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBufferOffset-00556]]

View File

@ -404,15 +404,15 @@ G, and B destination color values (after conversion from fixed-point to
floating-point) are considered to be encoded for the sRGB color space and floating-point) are considered to be encoded for the sRGB color space and
hence are linearized prior to their use in blending. hence are linearized prior to their use in blending.
Each R, G, and B component is converted from nonlinear to linear as Each R, G, and B component is converted from nonlinear to linear as
described in the "`sRGB EOTF`" section of the described in the "`sRGB EOTF`" section of the <<data-format,Khronos Data
<<data-format,Khronos Data Format Specification>>. Format Specification>>.
If the format is not sRGB, no linearization is performed. If the format is not sRGB, no linearization is performed.
If the numeric format of a framebuffer attachment uses sRGB encoding, then If the numeric format of a framebuffer attachment uses sRGB encoding, then
the final R, G and B values are converted into the nonlinear sRGB the final R, G and B values are converted into the nonlinear sRGB
representation before being written to the framebuffer attachment as representation before being written to the framebuffer attachment as
described in the "`sRGB EOTF^&#160;-1^`" section of the Khronos Data described in the "`sRGB EOTF^&#160;-1^`" section of the Khronos Data Format
Format Specification. Specification.
If the framebuffer color attachment numeric format is not sRGB encoded then If the framebuffer color attachment numeric format is not sRGB encoded then
the resulting [eq]#c~s~# values for R, G and B are unmodified. the resulting [eq]#c~s~# values for R, G and B are unmodified.

View File

@ -436,8 +436,8 @@ endif::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilitie
[[fundamentals-abi]] [[fundamentals-abi]]
== Application Binary Interface == Application Binary Interface
The mechanism by which Vulkan is made available to applications is platform- or The mechanism by which Vulkan is made available to applications is platform-
implementation- defined. or implementation- defined.
On many platforms the C interface described in this Specification is On many platforms the C interface described in this Specification is
provided by a shared library. provided by a shared library.
Since shared libraries can be changed independently of the applications that Since shared libraries can be changed independently of the applications that
@ -446,23 +446,23 @@ Specification places some requirements on them.
Shared library implementations must: use the default Application Binary Shared library implementations must: use the default Application Binary
Interface (ABI) of the standard C compiler for the platform, or provide Interface (ABI) of the standard C compiler for the platform, or provide
customized API headers that cause application code to use the implementation's customized API headers that cause application code to use the
non-default ABI. implementation's non-default ABI.
An ABI in this context means the the size, alignment, and An ABI in this context means the the size, alignment, and layout of C data
layout of C data types; the procedure calling convention; and the naming types; the procedure calling convention; and the naming convention for
convention for shared library symbols corresponding to C functions. shared library symbols corresponding to C functions.
Customizing the calling convention for a platform is usually accomplished by Customizing the calling convention for a platform is usually accomplished by
defining defining <<boilerplate-platform-specific-calling-conventions,calling
<<boilerplate-platform-specific-calling-conventions,calling convention macros>> convention macros>> appropriately in +vk_platform.h+.
appropriately in +vk_platform.h+.
On platforms where Vulkan is provided as a shared library, library symbols On platforms where Vulkan is provided as a shared library, library symbols
beginning with 'vk' and followed by a digit or uppercase letter are reserved beginning with 'vk' and followed by a digit or uppercase letter are reserved
for use by the implementation. for use by the implementation.
Applications which use Vulkan must: not provide definitions of these symbols. Applications which use Vulkan must: not provide definitions of these
This allows the Vulkan shared library to be updated with additional symbols for symbols.
new API versions or extensions without causing symbol conflicts with existing This allows the Vulkan shared library to be updated with additional symbols
applications. for new API versions or extensions without causing symbol conflicts with
existing applications.
Shared library implementations should: provide library symbols for commands Shared library implementations should: provide library symbols for commands
in the highest version of this Specification they support, and for in the highest version of this Specification they support, and for
@ -475,11 +475,12 @@ extensions.
==== ====
These requirements and recommendations are intended to allow implementors to These requirements and recommendations are intended to allow implementors to
take advantage of platform-specific conventions for SDKs, ABIs, library take advantage of platform-specific conventions for SDKs, ABIs, library
versioning mechanisms, etc. while still minimizing the code changes necessary versioning mechanisms, etc.
to port applications or libraries between platforms. while still minimizing the code changes necessary to port applications or
Platform vendors, or providers of the _de facto_ standard Vulkan shared library libraries between platforms.
for a platform, are encouraged to document what symbols the shared library Platform vendors, or providers of the _de facto_ standard Vulkan shared
provides and how it will be versioned when new symbols are added. library for a platform, are encouraged to document what symbols the shared
library provides and how it will be versioned when new symbols are added.
==== ====

View File

@ -301,7 +301,7 @@ include::../api/structs/VkPipelineVertexInputStateCreateInfo.txt[]
pname:vertexAttributeDescriptionCount must: be less than or equal to pname:vertexAttributeDescriptionCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
* [[VUID-VkPipelineVertexInputStateCreateInfo-binding-00615]] * [[VUID-VkPipelineVertexInputStateCreateInfo-binding-00615]]
For every pname:binding specified by any given element of For every pname:binding specified by each element of
pname:pVertexAttributeDescriptions, a pname:pVertexAttributeDescriptions, a
sname:VkVertexInputBindingDescription must: exist in sname:VkVertexInputBindingDescription must: exist in
pname:pVertexBindingDescriptions with the same value of pname:binding pname:pVertexBindingDescriptions with the same value of pname:binding

View File

@ -1738,7 +1738,7 @@ to maintaining memory access ordering.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkMapMemory-memory-00678]] * [[VUID-vkMapMemory-memory-00678]]
pname:memory must: not currently be mapped pname:memory must: not be currently mapped
* [[VUID-vkMapMemory-offset-00679]] * [[VUID-vkMapMemory-offset-00679]]
pname:offset must: be less than the size of pname:memory pname:offset must: be less than the size of pname:memory
* [[VUID-vkMapMemory-size-00680]] * [[VUID-vkMapMemory-size-00680]]
@ -1865,7 +1865,7 @@ include::../api/structs/VkMappedMemoryRange.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkMappedMemoryRange-memory-00684]] * [[VUID-VkMappedMemoryRange-memory-00684]]
pname:memory must: currently be mapped pname:memory must: be currently mapped
* [[VUID-VkMappedMemoryRange-size-00685]] * [[VUID-VkMappedMemoryRange-size-00685]]
If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and
pname:size must: specify a range contained within the currently mapped pname:size must: specify a range contained within the currently mapped
@ -1906,7 +1906,7 @@ include::../api/protos/vkUnmapMemory.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkUnmapMemory-memory-00689]] * [[VUID-vkUnmapMemory-memory-00689]]
pname:memory must: currently be mapped pname:memory must: be currently mapped
**** ****
include::../validity/protos/vkUnmapMemory.txt[] include::../validity/protos/vkUnmapMemory.txt[]

View File

@ -141,15 +141,15 @@ endif::editing-notes[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCreateComputePipelines-flags-00695]] * [[VUID-vkCreateComputePipelines-flags-00695]]
If the pname:flags member of any given element of pname:pCreateInfos If the pname:flags member of any element of pname:pCreateInfos contains
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
pname:basePipelineIndex member of that same element is not `-1`, pname:basePipelineIndex member of that same element is not `-1`,
pname:basePipelineIndex must: be less than the index into pname:basePipelineIndex must: be less than the index into
pname:pCreateInfos that corresponds to that element pname:pCreateInfos that corresponds to that element
* [[VUID-vkCreateComputePipelines-flags-00696]] * [[VUID-vkCreateComputePipelines-flags-00696]]
If the pname:flags member of any given element of pname:pCreateInfos If the pname:flags member of any element of pname:pCreateInfos contains
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
pipeline must: have been created with the must: have been created with the
ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
**** ****
@ -388,15 +388,15 @@ pipeline layout.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCreateGraphicsPipelines-flags-00720]] * [[VUID-vkCreateGraphicsPipelines-flags-00720]]
If the pname:flags member of any given element of pname:pCreateInfos If the pname:flags member of any element of pname:pCreateInfos contains
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
pname:basePipelineIndex member of that same element is not `-1`, pname:basePipelineIndex member of that same element is not `-1`,
pname:basePipelineIndex must: be less than the index into pname:basePipelineIndex must: be less than the index into
pname:pCreateInfos that corresponds to that element pname:pCreateInfos that corresponds to that element
* [[VUID-vkCreateGraphicsPipelines-flags-00721]] * [[VUID-vkCreateGraphicsPipelines-flags-00721]]
If the pname:flags member of any given element of pname:pCreateInfos If the pname:flags member of any element of pname:pCreateInfos contains
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
pipeline must: have been created with the must: have been created with the
ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
**** ****
@ -508,8 +508,8 @@ endif::VK_NV_glsl_shader[]
The pname:stage member of one element of pname:pStages must: be The pname:stage member of one element of pname:pStages must: be
ename:VK_SHADER_STAGE_VERTEX_BIT ename:VK_SHADER_STAGE_VERTEX_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-stage-00728]] * [[VUID-VkGraphicsPipelineCreateInfo-stage-00728]]
The pname:stage member of any given element of pname:pStages must: not The pname:stage member of each element of pname:pStages must: not be
be ename:VK_SHADER_STAGE_COMPUTE_BIT ename:VK_SHADER_STAGE_COMPUTE_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]] * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]]
If pname:pStages includes a tessellation control shader stage, it must: If pname:pStages includes a tessellation control shader stage, it must:
include a tessellation evaluation shader stage include a tessellation evaluation shader stage
@ -755,7 +755,8 @@ ifdef::VK_KHX_device_group[]
ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHX flag. ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHX flag.
endif::VK_KHX_device_group[] endif::VK_KHX_device_group[]
ifdef::VK_KHR_maintenance2[] ifdef::VK_KHR_maintenance2[]
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-01565]] If pname:pStages includes a fragment shader stage and an input * [[VUID-VkGraphicsPipelineCreateInfo-pStages-01565]]
If pname:pStages includes a fragment shader stage and an input
attachment was referenced by the attachment was referenced by the
slink:VkRenderPassInputAttachmentAspectCreateInfoKHR at renderpass slink:VkRenderPassInputAttachmentAspectCreateInfoKHR at renderpass
create time, its shader code must: not read from any aspect that was not create time, its shader code must: not read from any aspect that was not
@ -1375,10 +1376,10 @@ slink:VkSpecializationMapEntry.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkSpecializationInfo-offset-00773]] * [[VUID-VkSpecializationInfo-offset-00773]]
The pname:offset member of any given element of pname:pMapEntries must: The pname:offset member of each element of pname:pMapEntries must: be
be less than pname:dataSize less than pname:dataSize
* [[VUID-VkSpecializationInfo-pMapEntries-00774]] * [[VUID-VkSpecializationInfo-pMapEntries-00774]]
For any given element of pname:pMapEntries, pname:size must: be less The pname:size member of each element of pname:pMapEntries must: be less
than or equal to pname:dataSize minus pname:offset than or equal to pname:dataSize minus pname:offset
* [[VUID-VkSpecializationInfo-mapEntryCount-00775]] * [[VUID-VkSpecializationInfo-mapEntryCount-00775]]
If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer

View File

@ -169,7 +169,7 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
pname:pInputAttachments, pname:pColorAttachments, pname:pInputAttachments, pname:pColorAttachments,
pname:pResolveAttachments or pname:pDepthStencilAttachment, or the pname:pResolveAttachments or pname:pDepthStencilAttachment, or the
attachment indexed by any element of pname:pPreserveAttachments in any attachment indexed by any element of pname:pPreserveAttachments in any
given element of pname:pSubpasses is bound to a range of a element of pname:pSubpasses is bound to a range of a
sname:VkDeviceMemory object that overlaps with any other attachment in sname:VkDeviceMemory object that overlaps with any other attachment in
any subpass (including the same subpass), the any subpass (including the same subpass), the
sname:VkAttachmentDescription structures describing them must: include sname:VkAttachmentDescription structures describing them must: include
@ -178,13 +178,12 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
If the pname:attachment member of any element of If the pname:attachment member of any element of
pname:pInputAttachments, pname:pColorAttachments, pname:pInputAttachments, pname:pColorAttachments,
pname:pResolveAttachments or pname:pDepthStencilAttachment, or any pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
element of pname:pPreserveAttachments in any given element of element of pname:pPreserveAttachments in any element of pname:pSubpasses
pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less is not ename:VK_ATTACHMENT_UNUSED, it must: be less than
than pname:attachmentCount pname:attachmentCount
* [[VUID-VkRenderPassCreateInfo-pPreserveAttachments-00835]] * [[VUID-VkRenderPassCreateInfo-pPreserveAttachments-00835]]
The value of any element of the pname:pPreserveAttachments member in any The value of each element of the pname:pPreserveAttachments member in
given element of pname:pSubpasses must: not be each element of pname:pSubpasses must: not be ename:VK_ATTACHMENT_UNUSED
ename:VK_ATTACHMENT_UNUSED
* [[VUID-VkRenderPassCreateInfo-pAttachments-00836]] * [[VUID-VkRenderPassCreateInfo-pAttachments-00836]]
For any member of pname:pAttachments with a pname:loadOp equal to For any member of pname:pAttachments with a pname:loadOp equal to
ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
@ -192,11 +191,13 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
pname:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or pname:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or
pname:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL. pname:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL.
ifdef::VK_KHR_maintenance2[] ifdef::VK_KHR_maintenance2[]
* [[VUID-VkRenderPassCreateInfo-pAttachments-01566]] For any member of pname:pAttachments with a pname:loadOp equal to * [[VUID-VkRenderPassCreateInfo-pAttachments-01566]]
For any member of pname:pAttachments with a pname:loadOp equal to
ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
must: not specify a pname:layout equal to must: not specify a pname:layout equal to
pname:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR. pname:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR.
* [[VUID-VkRenderPassCreateInfo-pAttachments-01567]] For any member of pname:pAttachments with a pname:stencilLoadOp equal to * [[VUID-VkRenderPassCreateInfo-pAttachments-01567]]
For any member of pname:pAttachments with a pname:stencilLoadOp equal to
ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
must: not specify a pname:layout equal to must: not specify a pname:layout equal to
pname:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR. pname:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR.
@ -531,10 +532,13 @@ include::../api/structs/VkInputAttachmentAspectReferenceKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkInputAttachmentAspectReferenceKHR-pCreateInfo-01568]] There must: be an input attachment at * [[VUID-VkInputAttachmentAspectReferenceKHR-pCreateInfo-01568]]
There must: be an input attachment at
pname:pCreateInfo::pname:pSubpasses[pname:subpass].pname:pInputAttachments[pname:inputAttachment]. pname:pCreateInfo::pname:pSubpasses[pname:subpass].pname:pInputAttachments[pname:inputAttachment].
* [[VUID-VkInputAttachmentAspectReferenceKHR-None-01569]] The specified input attachment must: have more than one aspect mask. * [[VUID-VkInputAttachmentAspectReferenceKHR-None-01569]]
* [[VUID-VkInputAttachmentAspectReferenceKHR-aspectMask-01570]] pname:aspectMask must: be a subset of the aspect masks in the specified The specified input attachment must: have more than one aspect mask.
* [[VUID-VkInputAttachmentAspectReferenceKHR-aspectMask-01570]]
pname:aspectMask must: be a subset of the aspect masks in the specified
input attachment. input attachment.
**** ****
@ -795,10 +799,10 @@ attachment.
element of pname:pColorAttachments must: be anything other than element of pname:pColorAttachments must: be anything other than
ename:VK_SAMPLE_COUNT_1_BIT ename:VK_SAMPLE_COUNT_1_BIT
* [[VUID-VkSubpassDescription-pResolveAttachments-00849]] * [[VUID-VkSubpassDescription-pResolveAttachments-00849]]
Any given element of pname:pResolveAttachments must: have a sample count Each element of pname:pResolveAttachments must: have a sample count of
of ename:VK_SAMPLE_COUNT_1_BIT ename:VK_SAMPLE_COUNT_1_BIT
* [[VUID-VkSubpassDescription-pResolveAttachments-00850]] * [[VUID-VkSubpassDescription-pResolveAttachments-00850]]
Any given element of pname:pResolveAttachments must: have the same Each element of pname:pResolveAttachments must: have the same
elink:VkFormat as its corresponding color attachment elink:VkFormat as its corresponding color attachment
* [[VUID-VkSubpassDescription-pColorAttachments-01417]] * [[VUID-VkSubpassDescription-pColorAttachments-01417]]
All attachments in pname:pColorAttachments that are not All attachments in pname:pColorAttachments that are not
@ -823,11 +827,11 @@ endif::VK_AMD_mixed_attachment_samples[]
pipelines bound during the subpass must: not access those input pipelines bound during the subpass must: not access those input
attachments from the fragment shader attachments from the fragment shader
* [[VUID-VkSubpassDescription-attachment-00853]] * [[VUID-VkSubpassDescription-attachment-00853]]
The pname:attachment member of any element of pname:pPreserveAttachments The pname:attachment member of each element of
must: not be ename:VK_ATTACHMENT_UNUSED pname:pPreserveAttachments must: not be ename:VK_ATTACHMENT_UNUSED
* [[VUID-VkSubpassDescription-pPreserveAttachments-00854]] * [[VUID-VkSubpassDescription-pPreserveAttachments-00854]]
Any given element of pname:pPreserveAttachments must: not also be an Each element of pname:pPreserveAttachments must: not also be an element
element of any other member of the subpass description of any other member of the subpass description
* [[VUID-VkSubpassDescription-layout-00855]] * [[VUID-VkSubpassDescription-layout-00855]]
If any attachment is used as both an input attachment and a color or If any attachment is used as both an input attachment and a color or
depth/stencil attachment, then each use must: use the same pname:layout depth/stencil attachment, then each use must: use the same pname:layout
@ -1504,35 +1508,33 @@ slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
pname:attachmentCount must: be equal to the attachment count specified pname:attachmentCount must: be equal to the attachment count specified
in pname:renderPass in pname:renderPass
* [[VUID-VkFramebufferCreateInfo-pAttachments-00877]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00877]]
Any given element of pname:pAttachments that is used as a color Each element of pname:pAttachments that is used as a color attachment or
attachment or resolve attachment by pname:renderPass must: have been resolve attachment by pname:renderPass must: have been created with a
created with a pname:usage value including pname:usage value including ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
* [[VUID-VkFramebufferCreateInfo-pAttachments-00878]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00878]]
Any given element of pname:pAttachments that is used as a depth/stencil Each element of pname:pAttachments that is used as a depth/stencil
attachment by pname:renderPass must: have been created with a attachment by pname:renderPass must: have been created with a
pname:usage value including pname:usage value including
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
* [[VUID-VkFramebufferCreateInfo-pAttachments-00879]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00879]]
Any given element of pname:pAttachments that is used as an input Each element of pname:pAttachments that is used as an input attachment
attachment by pname:renderPass must: have been created with a by pname:renderPass must: have been created with a pname:usage value
pname:usage value including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
* [[VUID-VkFramebufferCreateInfo-pAttachments-00880]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00880]]
Any given element of pname:pAttachments must: have been created with an Each element of pname:pAttachments must: have been created with an
elink:VkFormat value that matches the elink:VkFormat specified by the elink:VkFormat value that matches the elink:VkFormat specified by the
corresponding sname:VkAttachmentDescription in pname:renderPass corresponding sname:VkAttachmentDescription in pname:renderPass
* [[VUID-VkFramebufferCreateInfo-pAttachments-00881]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00881]]
Any given element of pname:pAttachments must: have been created with a Each element of pname:pAttachments must: have been created with a
pname:samples value that matches the pname:samples value specified by pname:samples value that matches the pname:samples value specified by
the corresponding sname:VkAttachmentDescription in pname:renderPass the corresponding sname:VkAttachmentDescription in pname:renderPass
* [[VUID-VkFramebufferCreateInfo-pAttachments-00882]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00882]]
Any given element of pname:pAttachments must: have dimensions at least Each element of pname:pAttachments must: have dimensions at least as
as large as the corresponding framebuffer dimension large as the corresponding framebuffer dimension
* [[VUID-VkFramebufferCreateInfo-pAttachments-00883]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00883]]
Any given element of pname:pAttachments must: only specify a single mip Each element of pname:pAttachments must: only specify a single mip level
level
* [[VUID-VkFramebufferCreateInfo-pAttachments-00884]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00884]]
Any given element of pname:pAttachments must: have been created with the Each element of pname:pAttachments must: have been created with the
identity swizzle identity swizzle
* [[VUID-VkFramebufferCreateInfo-width-00885]] * [[VUID-VkFramebufferCreateInfo-width-00885]]
pname:width must: be greater than `0`. pname:width must: be greater than `0`.
@ -1551,8 +1553,8 @@ slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers
ifdef::VK_KHR_maintenance1[] ifdef::VK_KHR_maintenance1[]
* [[VUID-VkFramebufferCreateInfo-pAttachments-00891]] * [[VUID-VkFramebufferCreateInfo-pAttachments-00891]]
Any given element of pname:pAttachments that is a 2D or 2D array image Each element of pname:pAttachments that is a 2D or 2D array image view
view taken from a 3D image must: not be a depth/stencil format taken from a 3D image must: not be a depth/stencil format
endif::VK_KHR_maintenance1[] endif::VK_KHR_maintenance1[]
**** ****

View File

@ -145,7 +145,8 @@ ifdef::VK_KHR_external_memory[]
slink:VkExternalMemoryBufferCreateInfoKHR::pname:handleTypes slink:VkExternalMemoryBufferCreateInfoKHR::pname:handleTypes
endif::VK_KHR_external_memory[] endif::VK_KHR_external_memory[]
ifdef::VK_NV_dedicated_allocation[] ifdef::VK_NV_dedicated_allocation[]
* [[VUID-VkBufferCreateInfo-pNext-01571]] If the pname:pNext chain contains an instance of * [[VUID-VkBufferCreateInfo-pNext-01571]]
If the pname:pNext chain contains an instance of
slink:VkDedicatedAllocationBufferCreateInfoNV, and the slink:VkDedicatedAllocationBufferCreateInfoNV, and the
pname:dedicatedAllocation member of the chained structure is pname:dedicatedAllocation member of the chained structure is
ename:VK_TRUE, then pname:flags must: not include ename:VK_TRUE, then pname:flags must: not include
@ -909,13 +910,15 @@ ifdef::VK_KHX_device_group[]
be ename:VK_IMAGE_TILING_OPTIMAL be ename:VK_IMAGE_TILING_OPTIMAL
endif::VK_KHX_device_group[] endif::VK_KHX_device_group[]
ifdef::VK_KHR_maintenance2[] ifdef::VK_KHR_maintenance2[]
* [[VUID-VkImageCreateInfo-flags-01572]] If pname:flags contains * [[VUID-VkImageCreateInfo-flags-01572]]
If pname:flags contains
ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR, then ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR, then
pname:format must: be a <<appendix-compressedtex-bc,block-compressed pname:format must: be a <<appendix-compressedtex-bc,block-compressed
image format>>, an <<appendix-compressedtex-etc2, ETC compressed image image format>>, an <<appendix-compressedtex-etc2, ETC compressed image
format>>, or an <<appendix-compressedtex-astc, ASTC compressed image format>>, or an <<appendix-compressedtex-astc, ASTC compressed image
format>>. format>>.
* [[VUID-VkImageCreateInfo-flags-01573]] If pname:flags contains * [[VUID-VkImageCreateInfo-flags-01573]]
If pname:flags contains
ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR, then ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR, then
pname:flags must: also contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT. pname:flags must: also contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT.
endif::VK_KHR_maintenance2[] endif::VK_KHR_maintenance2[]
@ -932,25 +935,29 @@ ifdef::VK_NV_external_memory[slink:VkExternalMemoryImageCreateInfoNV]
must: be ename:VK_IMAGE_LAYOUT_UNDEFINED must: be ename:VK_IMAGE_LAYOUT_UNDEFINED
endif::VK_KHR_external_memory,VK_NV_external_memory[] endif::VK_KHR_external_memory,VK_NV_external_memory[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkImageCreateInfo-format-01574]] If the image pname:format is one of those listed in * [[VUID-VkImageCreateInfo-format-01574]]
If the image pname:format is one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>>: <<features-formats-requiring-sampler-ycbcr-conversion>>:
** pname:mipLevels must: be 1 ** pname:mipLevels must: be 1
** pname:samples must be ename:VK_SAMPLE_COUNT_1_BIT ** pname:samples must be ename:VK_SAMPLE_COUNT_1_BIT
** pname:imageType must: be ename:VK_IMAGE_TYPE_2D ** pname:imageType must: be ename:VK_IMAGE_TYPE_2D
** pname:arrayLayers must: be 1 ** pname:arrayLayers must: be 1
* [[VUID-VkImageCreateInfo-tiling-01575]] If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, pname:format is a * [[VUID-VkImageCreateInfo-tiling-01575]]
If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, pname:format is a
_multi-planar_ format, and _multi-planar_ format, and
sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include ename:VK_FORMAT_FEATURE_DISJOINT_BIT_KHR, pname:format) does not include ename:VK_FORMAT_FEATURE_DISJOINT_BIT_KHR,
pname:flags must: not contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR pname:flags must: not contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR
* [[VUID-VkImageCreateInfo-tiling-01576]] If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, pname:format is a * [[VUID-VkImageCreateInfo-tiling-01576]]
If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, pname:format is a
_multi-planar_ format, and _multi-planar_ format, and
sname:VkFormatProperties::pname:linearTilingFeatures (as returned by sname:VkFormatProperties::pname:linearTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include ename:VK_FORMAT_FEATURE_DISJOINT_BIT_KHR, pname:format) does not include ename:VK_FORMAT_FEATURE_DISJOINT_BIT_KHR,
pname:flags must: not contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR pname:flags must: not contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR
* [[VUID-VkImageCreateInfo-format-01577]] If pname:format is not a _multi-planar_ format, and pname:flags does not * [[VUID-VkImageCreateInfo-format-01577]]
If pname:format is not a _multi-planar_ format, and pname:flags does not
include ename:VK_IMAGE_CREATE_ALIAS_BIT_KHR, pname:flags must: not include ename:VK_IMAGE_CREATE_ALIAS_BIT_KHR, pname:flags must: not
contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
@ -1111,14 +1118,17 @@ were not included in the pname:pNext list of slink:VkImageCreateInfo.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01578]] If pname:viewFormatCount is not `0`, all of the formats in the * [[VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01578]]
If pname:viewFormatCount is not `0`, all of the formats in the
pname:pViewFormats array must: be compatible with the format specified pname:pViewFormats array must: be compatible with the format specified
in the pname:format field of sname:VkImageCreateInfo, as described in in the pname:format field of sname:VkImageCreateInfo, as described in
the <<resources-image-views-compatibility,compatibility table>>. the <<resources-image-views-compatibility,compatibility table>>.
* [[VUID-VkImageFormatListCreateInfoKHR-flags-01579]] If sname:VkImageCreateInfo::pname:flags does not contain * [[VUID-VkImageFormatListCreateInfoKHR-flags-01579]]
If sname:VkImageCreateInfo::pname:flags does not contain
ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, pname:viewFormatCount must: be ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, pname:viewFormatCount must: be
`0` or `1`. `0` or `1`.
* [[VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01580]] If pname:viewFormatCount is not `0`, * [[VUID-VkImageFormatListCreateInfoKHR-viewFormatCount-01580]]
If pname:viewFormatCount is not `0`,
sname:VkImageCreateInfo::pname:format must: be in pname:pViewFormats. sname:VkImageCreateInfo::pname:format must: be in pname:pViewFormats.
**** ****
@ -1334,12 +1344,14 @@ image.
The pname:aspectMask member of pname:pSubresource must: only have a The pname:aspectMask member of pname:pSubresource must: only have a
single bit set single bit set
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkGetImageSubresourceLayout-format-01581]] If the pname:format of pname:image is a * [[VUID-vkGetImageSubresourceLayout-format-01581]]
If the pname:format of pname:image is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>> with two planes, the pname:aspectMask member of format>> with two planes, the pname:aspectMask member of
pname:pSubresource must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or pname:pSubresource must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR
* [[VUID-vkGetImageSubresourceLayout-format-01582]] If the pname:format of pname:image is a * [[VUID-vkGetImageSubresourceLayout-format-01582]]
If the pname:format of pname:image is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>> with three planes, the pname:aspectMask member of format>> with three planes, the pname:aspectMask member of
pname:pSubresource must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, pname:pSubresource must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
@ -1865,9 +1877,8 @@ ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR, pname:format must: be ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR, pname:format must: be
<<features-formats-compatible-planes,compatible>> with the corresponding <<features-formats-compatible-planes,compatible>> with the corresponding
plane of the image, as defined in, and the sampler to be used with the image plane of the image, and the sampler to be used with the image view must: not
view must: not enable <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ enable <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>>.
conversion>>.
The pname:width and pname:height of the single-plane image view must: be The pname:width and pname:height of the single-plane image view must: be
derived from the multi-planar image's dimensions in the manner listed for derived from the multi-planar image's dimensions in the manner listed for
<<features-formats-compatible-planes,plane compatibility>> for the plane. <<features-formats-compatible-planes,plane compatibility>> for the plane.
@ -2211,18 +2222,21 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
pname:image, as defined in pname:image, as defined in
<<features-formats-compatibility-classes,Format Compatibility Classes>> <<features-formats-compatibility-classes,Format Compatibility Classes>>
ifdef::VK_KHR_maintenance2[] ifdef::VK_KHR_maintenance2[]
* [[VUID-VkImageViewCreateInfo-image-01583]] If pname:image was created with the * [[VUID-VkImageViewCreateInfo-image-01583]]
If pname:image was created with the
ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR flag, ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR flag,
pname:format must: be compatible with, or must: be an uncompressed pname:format must: be compatible with, or must: be an uncompressed
format that is size-compatible with, the pname:format used to create format that is size-compatible with, the pname:format used to create
pname:image. pname:image.
* [[VUID-VkImageViewCreateInfo-image-01584]] If pname:image was created with the * [[VUID-VkImageViewCreateInfo-image-01584]]
If pname:image was created with the
ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR flag, the ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR flag, the
pname:levelCount and pname:layerCount members of pname:subresourceRange pname:levelCount and pname:layerCount members of pname:subresourceRange
must: both be `1`. must: both be `1`.
endif::VK_KHR_maintenance2[] endif::VK_KHR_maintenance2[]
ifdef::VK_KHR_image_format_list[] ifdef::VK_KHR_image_format_list[]
* [[VUID-VkImageViewCreateInfo-pNext-01585]] If a sname:VkImageFormatListCreateInfoKHR structure was included in the * [[VUID-VkImageViewCreateInfo-pNext-01585]]
If a sname:VkImageFormatListCreateInfoKHR structure was included in the
pname:pNext chain of the sname:VkImageCreateInfo struct used when pname:pNext chain of the sname:VkImageCreateInfo struct used when
creating pname:image and the pname:viewFormatCount field of creating pname:image and the pname:viewFormatCount field of
sname:VkImageFormatListCreateInfoKHR is not zero then pname:format must: sname:VkImageFormatListCreateInfoKHR is not zero then pname:format must:
@ -2230,7 +2244,8 @@ ifdef::VK_KHR_image_format_list[]
sname:VkImageFormatListCreateInfoKHR::pname:pViewFormats. sname:VkImageFormatListCreateInfoKHR::pname:pViewFormats.
endif::VK_KHR_image_format_list[] endif::VK_KHR_image_format_list[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkImageViewCreateInfo-image-01586]] If pname:image was created with the * [[VUID-VkImageViewCreateInfo-image-01586]]
If pname:image was created with the
ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, if the pname:format of ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, if the pname:format of
the pname:image is a the pname:image is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>> <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>>
@ -2293,7 +2308,8 @@ determining the valid usage conditions of slink:VkImageViewCreateInfo.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkImageViewUsageCreateInfoKHR-usage-01587]] pname:usage must: not include any set bits that were not set in the * [[VUID-VkImageViewUsageCreateInfoKHR-usage-01587]]
pname:usage must: not include any set bits that were not set in the
pname:usage member of the slink:VkImageCreateInfo structure used to pname:usage member of the slink:VkImageCreateInfo structure used to
create the image this image view is created from. create the image this image view is created from.
**** ****
@ -2391,20 +2407,30 @@ framebuffer attachments, and any sname:VkImageView used with a combined
image sampler that enables <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ image sampler that enables <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>>. conversion>>.
If <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is enabled in When creating a sname:VkImageView, if <<samplers-YCbCr-conversion,sampler
the sampler, the pname:aspectMask used by a sname:VkImageView must: be Y'C~B~C~R~ conversion>> is enabled in the sampler, the pname:aspectMask of a
pname:subresourceRange used by the sname:VkImageView must: be
ename:VK_IMAGE_ASPECT_COLOR_BIT. ename:VK_IMAGE_ASPECT_COLOR_BIT.
If sampler Y'C~B~C~R~ conversion is not enabled in the sampler and the When creating a sname:VkImageView, if sampler Y'C~B~C~R~ conversion is not
format is enabled in the sampler and the image pname:format is
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>>, the <<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>>, the
image must: have been created with ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, image must: have been created with ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
and the pname:aspectMask of the sname:VkImageView's and the pname:aspectMask of the sname:VkImageView's pname:subresourceRange
sname:VkImageSubresourceRange must: be must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR or
or ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR. ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR.
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage
****
* [[VUID-VkImageSubresourceRange-aspectMask-01670]]
If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, then it
must: not include any of ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
****
include::../validity/structs/VkImageSubresourceRange.txt[] include::../validity/structs/VkImageSubresourceRange.txt[]
-- --
@ -2437,7 +2463,7 @@ include::../api/structs/VkComponentMapping.txt[]
placed in the G component of the output vector. placed in the G component of the output vector.
* pname:b is a elink:VkComponentSwizzle specifying the component value * pname:b is a elink:VkComponentSwizzle specifying the component value
placed in the B component of the output vector. placed in the B component of the output vector.
* pname:A is a elink:VkComponentSwizzle specifying the component value * pname:a is a elink:VkComponentSwizzle specifying the component value
placed in the A component of the output vector. placed in the A component of the output vector.
include::../validity/structs/VkComponentMapping.txt[] include::../validity/structs/VkComponentMapping.txt[]
@ -2800,23 +2826,28 @@ include::../api/structs/VkImageMemoryRequirementsInfo2KHR.txt[]
* pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:image is the image to query. * pname:image is the image to query.
ifdef::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage .Valid Usage
**** ****
ifdef::VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01589]]
* [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01589]] If pname:image was created with a _multi-planar_ format and the If pname:image was created with a _multi-planar_ format and the
ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR flag, there must: be a ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR flag, there must: be a
slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext chain of slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext chain of
the slink:VkImageMemoryRequirementsInfo2KHR structure the slink:VkImageMemoryRequirementsInfo2KHR structure
* [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01590]] If pname:image was not created with the * [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01590]]
If pname:image was not created with the
ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR flag, there must: not be a ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR flag, there must: not be a
slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext chain of slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext chain of
the slink:VkImageMemoryRequirementsInfo2KHR structure the slink:VkImageMemoryRequirementsInfo2KHR structure
* [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01591]] If pname:image was created with a single-plane format, there must: not * [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01591]]
If pname:image was created with a single-plane format, there must: not
be a slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext be a slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext
chain of the slink:VkImageMemoryRequirementsInfo2KHR structure chain of the slink:VkImageMemoryRequirementsInfo2KHR structure
endif::VK_KHR_sampler_ycbcr_conversion[]
**** ****
endif::VK_KHR_sampler_ycbcr_conversion[]
include::../validity/structs/VkImageMemoryRequirementsInfo2KHR.txt[] include::../validity/structs/VkImageMemoryRequirementsInfo2KHR.txt[]
-- --
@ -2839,7 +2870,8 @@ include::../api/structs/VkImagePlaneMemoryRequirementsInfoKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkImagePlaneMemoryRequirementsInfoKHR-planeAspect-01592]] pname:planeAspect must: be an aspect that exists in the format; that is, * [[VUID-VkImagePlaneMemoryRequirementsInfoKHR-planeAspect-01592]]
pname:planeAspect must: be an aspect that exists in the format; that is,
for a two-plane image pname:planeAspect must: be for a two-plane image pname:planeAspect must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, and for a three-plane image ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, and for a three-plane image
@ -3123,36 +3155,46 @@ include::../api/structs/VkBindBufferMemoryInfoKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01593]] pname:buffer must: not already be backed by a memory object * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01593]]
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01594]] pname:buffer must: not have been created with any sparse memory binding pname:buffer must: not already be backed by a memory object
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01594]]
pname:buffer must: not have been created with any sparse memory binding
flags flags
* [[VUID-VkBindBufferMemoryInfoKHR-memoryOffset-01595]] pname:memoryOffset must: be less than the size of pname:memory * [[VUID-VkBindBufferMemoryInfoKHR-memoryOffset-01595]]
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01596]] If pname:buffer was created with the pname:memoryOffset must: be less than the size of pname:memory
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01596]]
If pname:buffer was created with the
ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must: ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must:
be a multiple of be a multiple of
sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01597]] If pname:buffer was created with the * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01597]]
If pname:buffer was created with the
ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a
multiple of multiple of
sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01598]] If pname:buffer was created with the * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01598]]
If pname:buffer was created with the
ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a
multiple of multiple of
sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
* [[VUID-VkBindBufferMemoryInfoKHR-memory-01599]] pname:memory must: have been allocated using one of the memory types * [[VUID-VkBindBufferMemoryInfoKHR-memory-01599]]
pname:memory must: have been allocated using one of the memory types
allowed in the pname:memoryTypeBits member of the allowed in the pname:memoryTypeBits member of the
sname:VkMemoryRequirements structure returned from a call to sname:VkMemoryRequirements structure returned from a call to
fname:vkGetBufferMemoryRequirements with pname:buffer fname:vkGetBufferMemoryRequirements with pname:buffer
* [[VUID-VkBindBufferMemoryInfoKHR-memoryOffset-01600]] pname:memoryOffset must: be an integer multiple of the pname:alignment * [[VUID-VkBindBufferMemoryInfoKHR-memoryOffset-01600]]
pname:memoryOffset must: be an integer multiple of the pname:alignment
member of the sname:VkMemoryRequirements structure returned from a call member of the sname:VkMemoryRequirements structure returned from a call
to fname:vkGetBufferMemoryRequirements with pname:buffer to fname:vkGetBufferMemoryRequirements with pname:buffer
* [[VUID-VkBindBufferMemoryInfoKHR-size-01601]] The pname:size member of the sname:VkMemoryRequirements structure * [[VUID-VkBindBufferMemoryInfoKHR-size-01601]]
The pname:size member of the sname:VkMemoryRequirements structure
returned from a call to fname:vkGetBufferMemoryRequirements with returned from a call to fname:vkGetBufferMemoryRequirements with
pname:buffer must: be less than or equal to the size of pname:memory pname:buffer must: be less than or equal to the size of pname:memory
minus pname:memoryOffset minus pname:memoryOffset
ifdef::VK_KHR_dedicated_allocation[] ifdef::VK_KHR_dedicated_allocation[]
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01602]] If pname:buffer requires a dedicated allocation(as reported by * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01602]]
If pname:buffer requires a dedicated allocation(as reported by
flink:vkGetBufferMemoryRequirements2KHR in flink:vkGetBufferMemoryRequirements2KHR in
slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for
pname:image), pname:memory must: have been created with pname:image), pname:memory must: have been created with
@ -3160,20 +3202,23 @@ ifdef::VK_KHR_dedicated_allocation[]
pname:buffer and pname:memoryOffset must: be zero pname:buffer and pname:memoryOffset must: be zero
endif::VK_KHR_dedicated_allocation[] endif::VK_KHR_dedicated_allocation[]
ifdef::VK_NV_dedicated_allocation[] ifdef::VK_NV_dedicated_allocation[]
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01603]] If pname:buffer was created with * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01603]]
If pname:buffer was created with
slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: have been created with equal to ename:VK_TRUE, pname:memory must: have been created with
slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to
pname:buffer and pname:memoryOffset must: be zero pname:buffer and pname:memoryOffset must: be zero
ifndef::VK_KHR_dedicated_allocation[] ifndef::VK_KHR_dedicated_allocation[]
* [[VUID-VkBindBufferMemoryInfoKHR-buffer-01604]] If pname:buffer was not created with * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01604]]
If pname:buffer was not created with
slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation slink:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: not have been allocated equal to ename:VK_TRUE, pname:memory must: not have been allocated
dedicated for a specific buffer or image dedicated for a specific buffer or image
endif::VK_KHR_dedicated_allocation[] endif::VK_KHR_dedicated_allocation[]
endif::VK_NV_dedicated_allocation[] endif::VK_NV_dedicated_allocation[]
ifdef::VK_KHX_device_group[] ifdef::VK_KHX_device_group[]
* [[VUID-VkBindBufferMemoryInfoKHR-pNext-01605]] If the pname:pNext chain includes * [[VUID-VkBindBufferMemoryInfoKHR-pNext-01605]]
If the pname:pNext chain includes
slink:VkBindBufferMemoryDeviceGroupInfoKHX, all instances of slink:VkBindBufferMemoryDeviceGroupInfoKHX, all instances of
pname:memory specified by pname:memory specified by
slink:VkBindBufferMemoryDeviceGroupInfoKHX::pname:pDeviceIndices must: slink:VkBindBufferMemoryDeviceGroupInfoKHX::pname:pDeviceIndices must:
@ -3223,9 +3268,11 @@ In other words, by default each physical device attaches to instance zero.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkBindBufferMemoryDeviceGroupInfoKHX-deviceIndexCount-01606]] pname:deviceIndexCount must: either be zero or equal to the number of * [[VUID-VkBindBufferMemoryDeviceGroupInfoKHX-deviceIndexCount-01606]]
pname:deviceIndexCount must: either be zero or equal to the number of
physical devices in the logical device physical devices in the logical device
* [[VUID-VkBindBufferMemoryDeviceGroupInfoKHX-pDeviceIndices-01607]] All elements of pname:pDeviceIndices must: be valid device indices * [[VUID-VkBindBufferMemoryDeviceGroupInfoKHX-pDeviceIndices-01607]]
All elements of pname:pDeviceIndices must: be valid device indices
**** ****
include::../validity/structs/VkBindBufferMemoryDeviceGroupInfoKHX.txt[] include::../validity/structs/VkBindBufferMemoryDeviceGroupInfoKHX.txt[]
@ -3268,7 +3315,8 @@ endif::VK_KHR_bind_memory2[]
.Valid Usage .Valid Usage
**** ****
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkBindImageMemory-image-01608]] pname:image must: not have been created with the * [[VUID-vkBindImageMemory-image-01608]]
pname:image must: not have been created with the
ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR set. ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR set.
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkBindImageMemory-image-01044]] * [[VUID-vkBindImageMemory-image-01044]]
@ -3371,45 +3419,56 @@ include::../api/structs/VkBindImageMemoryInfoKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkBindImageMemoryInfoKHR-image-01609]] pname:image must: not already be backed by a memory object * [[VUID-VkBindImageMemoryInfoKHR-image-01609]]
* [[VUID-VkBindImageMemoryInfoKHR-image-01610]] pname:image must: not have been created with any sparse memory binding pname:image must: not already be backed by a memory object
* [[VUID-VkBindImageMemoryInfoKHR-image-01610]]
pname:image must: not have been created with any sparse memory binding
flags flags
* [[VUID-VkBindImageMemoryInfoKHR-memoryOffset-01611]] pname:memoryOffset must: be less than the size of pname:memory * [[VUID-VkBindImageMemoryInfoKHR-memoryOffset-01611]]
pname:memoryOffset must: be less than the size of pname:memory
ifndef::VK_KHR_sampler_ycbcr_conversion[] ifndef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkBindImageMemoryInfoKHR-memory-01612]] pname:memory must: have been allocated using one of the memory types * [[VUID-VkBindImageMemoryInfoKHR-memory-01612]]
pname:memory must: have been allocated using one of the memory types
allowed in the pname:memoryTypeBits member of the allowed in the pname:memoryTypeBits member of the
slink:VkMemoryRequirements structure returned from a call to slink:VkMemoryRequirements structure returned from a call to
flink:vkGetImageMemoryRequirements with pname:image flink:vkGetImageMemoryRequirements with pname:image
* [[VUID-VkBindImageMemoryInfoKHR-memoryOffset-01613]] pname:memoryOffset must: be an integer multiple of the pname:alignment * [[VUID-VkBindImageMemoryInfoKHR-memoryOffset-01613]]
pname:memoryOffset must: be an integer multiple of the pname:alignment
member of the slink:VkMemoryRequirements structure returned from a call member of the slink:VkMemoryRequirements structure returned from a call
to flink:vkGetImageMemoryRequirements with pname:image to flink:vkGetImageMemoryRequirements with pname:image
* [[VUID-VkBindImageMemoryInfoKHR-memory-01614]] The difference of the size of pname:memory and pname:memoryOffset must: * [[VUID-VkBindImageMemoryInfoKHR-memory-01614]]
The difference of the size of pname:memory and pname:memoryOffset must:
be greater than or equal to the pname:size member of the be greater than or equal to the pname:size member of the
slink:VkMemoryRequirements structure returned from a call to slink:VkMemoryRequirements structure returned from a call to
flink:vkGetImageMemoryRequirements with the same pname:image flink:vkGetImageMemoryRequirements with the same pname:image
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01615]] If the pname:pNext chain does not include an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01615]]
If the pname:pNext chain does not include an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memory must: have slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memory must: have
been allocated using one of the memory types allowed in the been allocated using one of the memory types allowed in the
pname:memoryTypeBits member of the slink:VkMemoryRequirements structure pname:memoryTypeBits member of the slink:VkMemoryRequirements structure
returned from a call to flink:vkGetImageMemoryRequirements2KHR with returned from a call to flink:vkGetImageMemoryRequirements2KHR with
pname:image pname:image
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01616]] If the pname:pNext chain does not include an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01616]]
If the pname:pNext chain does not include an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memoryOffset must: slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memoryOffset must:
be an integer multiple of the pname:alignment member of the be an integer multiple of the pname:alignment member of the
slink:VkMemoryRequirements structure returned from a call to slink:VkMemoryRequirements structure returned from a call to
flink:vkGetImageMemoryRequirements2KHR with pname:image flink:vkGetImageMemoryRequirements2KHR with pname:image
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01617]] If the pname:pNext chain does not include an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01617]]
If the pname:pNext chain does not include an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, the difference of the slink:VkBindImagePlaneMemoryInfoKHR structure, the difference of the
size of pname:memory and pname:memoryOffset must: be greater than or size of pname:memory and pname:memoryOffset must: be greater than or
equal to the pname:size member of the slink:VkMemoryRequirements equal to the pname:size member of the slink:VkMemoryRequirements
structure returned from a call to flink:vkGetImageMemoryRequirements2KHR structure returned from a call to flink:vkGetImageMemoryRequirements2KHR
with the same pname:image with the same pname:image
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01618]] If the pname:pNext chain includes an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01618]]
If the pname:pNext chain includes an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, pname:image must: have slink:VkBindImagePlaneMemoryInfoKHR structure, pname:image must: have
been created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR bit set. been created with the ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR bit set.
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01619]] If the pname:pNext chain includes an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01619]]
If the pname:pNext chain includes an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memory must: have slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memory must: have
been allocated using one of the memory types allowed in the been allocated using one of the memory types allowed in the
pname:memoryTypeBits member of the slink:VkMemoryRequirements structure pname:memoryTypeBits member of the slink:VkMemoryRequirements structure
@ -3417,7 +3476,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
pname:image and the correct pname:planeAspect for this plane in the pname:image and the correct pname:planeAspect for this plane in the
slink:VkImagePlaneMemoryRequirementsInfoKHR structure attached to the slink:VkImagePlaneMemoryRequirementsInfoKHR structure attached to the
slink:VkImageMemoryRequirementsInfo2KHR's pname:pNext chain slink:VkImageMemoryRequirementsInfo2KHR's pname:pNext chain
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01620]] If the pname:pNext chain includes an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01620]]
If the pname:pNext chain includes an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memoryOffset must: slink:VkBindImagePlaneMemoryInfoKHR structure, pname:memoryOffset must:
be an integer multiple of the pname:alignment member of the be an integer multiple of the pname:alignment member of the
slink:VkMemoryRequirements structure returned from a call to slink:VkMemoryRequirements structure returned from a call to
@ -3425,7 +3485,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
pname:planeAspect for this plane in the pname:planeAspect for this plane in the
slink:VkImagePlaneMemoryRequirementsInfoKHR structure attached to the slink:VkImagePlaneMemoryRequirementsInfoKHR structure attached to the
slink:VkImageMemoryRequirementsInfo2KHR's pname:pNext chain slink:VkImageMemoryRequirementsInfo2KHR's pname:pNext chain
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01621]] If the pname:pNext chain includes an instance of the * [[VUID-VkBindImageMemoryInfoKHR-pNext-01621]]
If the pname:pNext chain includes an instance of the
slink:VkBindImagePlaneMemoryInfoKHR structure, the difference of the slink:VkBindImagePlaneMemoryInfoKHR structure, the difference of the
size of pname:memory and pname:memoryOffset must: be greater than or size of pname:memory and pname:memoryOffset must: be greater than or
equal to the pname:size member of the slink:VkMemoryRequirements equal to the pname:size member of the slink:VkMemoryRequirements
@ -3436,7 +3497,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
chain chain
endif::VK_KHR_sampler_ycbcr_conversion[] endif::VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_dedicated_allocation[] ifdef::VK_KHR_dedicated_allocation[]
* [[VUID-VkBindImageMemoryInfoKHR-image-01622]] If pname:image requires a dedicated allocation (as reported by * [[VUID-VkBindImageMemoryInfoKHR-image-01622]]
If pname:image requires a dedicated allocation (as reported by
flink:vkGetImageMemoryRequirements2KHR in flink:vkGetImageMemoryRequirements2KHR in
slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for
pname:image), pname:memory must: have been created with pname:image), pname:memory must: have been created with
@ -3444,49 +3506,59 @@ ifdef::VK_KHR_dedicated_allocation[]
and pname:memoryOffset must: be zero and pname:memoryOffset must: be zero
endif::VK_KHR_dedicated_allocation[] endif::VK_KHR_dedicated_allocation[]
ifdef::VK_NV_dedicated_allocation[] ifdef::VK_NV_dedicated_allocation[]
* [[VUID-VkBindImageMemoryInfoKHR-image-01623]] If pname:image was created with * [[VUID-VkBindImageMemoryInfoKHR-image-01623]]
If pname:image was created with
slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: have been created with equal to ename:VK_TRUE, pname:memory must: have been created with
slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:image equal to slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:image equal to
pname:image and pname:memoryOffset must: be zero pname:image and pname:memoryOffset must: be zero
ifndef::VK_KHR_dedicated_allocation[] ifndef::VK_KHR_dedicated_allocation[]
* [[VUID-VkBindImageMemoryInfoKHR-image-01624]] If pname:image was not created with * [[VUID-VkBindImageMemoryInfoKHR-image-01624]]
If pname:image was not created with
slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation slink:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: not have been allocated equal to ename:VK_TRUE, pname:memory must: not have been allocated
dedicated for a specific buffer or image dedicated for a specific buffer or image
endif::VK_KHR_dedicated_allocation[] endif::VK_KHR_dedicated_allocation[]
endif::VK_NV_dedicated_allocation[] endif::VK_NV_dedicated_allocation[]
ifndef::VK_KHX_device_group[] ifndef::VK_KHX_device_group[]
* [[VUID-VkBindImageMemoryInfoKHR-memory-01625]] pname:memory must: be a valid dname:VkDeviceMemory handle * [[VUID-VkBindImageMemoryInfoKHR-memory-01625]]
pname:memory must: be a valid dname:VkDeviceMemory handle
endif::VK_KHX_device_group[] endif::VK_KHX_device_group[]
ifdef::VK_KHX_device_group[] ifdef::VK_KHX_device_group[]
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01626]] If the pname:pNext chain includes * [[VUID-VkBindImageMemoryInfoKHR-pNext-01626]]
If the pname:pNext chain includes
slink:VkBindImageMemoryDeviceGroupInfoKHX, all instances of pname:memory slink:VkBindImageMemoryDeviceGroupInfoKHX, all instances of pname:memory
specified by specified by
slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pDeviceIndices must: slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pDeviceIndices must:
have been allocated have been allocated
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01627]] If the pname:pNext chain includes * [[VUID-VkBindImageMemoryInfoKHR-pNext-01627]]
If the pname:pNext chain includes
slink:VkBindImageMemoryDeviceGroupInfoKHX, and slink:VkBindImageMemoryDeviceGroupInfoKHX, and
slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:SFRRectCount is not slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:SFRRectCount is not
zero, then pname:image must: have been created with the zero, then pname:image must: have been created with the
ename:VK_IMAGE_CREATE_BIND_SFR_BIT_KHX bit set ename:VK_IMAGE_CREATE_BIND_SFR_BIT_KHX bit set
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01628]] If the pname:pNext chain includes * [[VUID-VkBindImageMemoryInfoKHR-pNext-01628]]
If the pname:pNext chain includes
slink:VkBindImageMemoryDeviceGroupInfoKHX, all elements of slink:VkBindImageMemoryDeviceGroupInfoKHX, all elements of
slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pSFRRects must: be slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pSFRRects must: be
valid rectangles contained within the dimensions of pname:image valid rectangles contained within the dimensions of pname:image
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01629]] If the pname:pNext chain includes * [[VUID-VkBindImageMemoryInfoKHR-pNext-01629]]
If the pname:pNext chain includes
slink:VkBindImageMemoryDeviceGroupInfoKHX, the union of the areas of all slink:VkBindImageMemoryDeviceGroupInfoKHX, the union of the areas of all
elements of slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pSFRRects elements of slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pSFRRects
that correspond to the same instance of pname: image must: cover the that correspond to the same instance of pname: image must: cover the
entire image. entire image.
* [[VUID-VkBindImageMemoryInfoKHR-image-01630]] If pname:image was created with a valid swapchain handle in * [[VUID-VkBindImageMemoryInfoKHR-image-01630]]
If pname:image was created with a valid swapchain handle in
slink:VkImageSwapchainCreateInfoKHX::pname:swapchain, then the slink:VkImageSwapchainCreateInfoKHX::pname:swapchain, then the
pname:pNext chain must: include a valid instance of pname:pNext chain must: include a valid instance of
slink:VkBindImageMemorySwapchainInfoKHX slink:VkBindImageMemorySwapchainInfoKHX
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01631]] If the pname:pNext chain includes an instance of * [[VUID-VkBindImageMemoryInfoKHR-pNext-01631]]
If the pname:pNext chain includes an instance of
slink:VkBindImageMemorySwapchainInfoKHX, pname:memory must: be slink:VkBindImageMemorySwapchainInfoKHX, pname:memory must: be
dlink:VK_NULL_HANDLE dlink:VK_NULL_HANDLE
* [[VUID-VkBindImageMemoryInfoKHR-pNext-01632]] If the pname:pNext chain does not include an instance of * [[VUID-VkBindImageMemoryInfoKHR-pNext-01632]]
If the pname:pNext chain does not include an instance of
slink:VkBindImageMemorySwapchainInfoKHX, pname:memory must: be a valid slink:VkBindImageMemorySwapchainInfoKHX, pname:memory must: be a valid
dname:VkDeviceMemory handle dname:VkDeviceMemory handle
endif::VK_KHX_device_group[] endif::VK_KHX_device_group[]
@ -3552,28 +3624,37 @@ In other words, by default each physical device attaches to instance zero.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-deviceIndexCount-01633]] At least one of pname:deviceIndexCount and pname:SFRRectCount must: be * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-deviceIndexCount-01633]]
At least one of pname:deviceIndexCount and pname:SFRRectCount must: be
zero. zero.
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-deviceIndexCount-01634]] pname:deviceIndexCount must: either be zero or equal to the number of * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-deviceIndexCount-01634]]
pname:deviceIndexCount must: either be zero or equal to the number of
physical devices in the logical device physical devices in the logical device
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-pDeviceIndices-01635]] All elements of pname:pDeviceIndices must: be valid device indices. * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-pDeviceIndices-01635]]
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-SFRRectCount-01636]] pname:SFRRectCount must: either be zero or equal to the number of All elements of pname:pDeviceIndices must: be valid device indices.
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-SFRRectCount-01636]]
pname:SFRRectCount must: either be zero or equal to the number of
physical devices in the logical device squared physical devices in the logical device squared
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-pSFRRects-01637]] Elements of pname:pSFRRects that correspond to the same instance of an * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-pSFRRects-01637]]
Elements of pname:pSFRRects that correspond to the same instance of an
image must: not overlap. image must: not overlap.
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-offset-01638]] The pname:offset.x member of any element of pname:pSFRRects must: be a * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-offset-01638]]
The pname:offset.x member of any element of pname:pSFRRects must: be a
multiple of the sparse image block width multiple of the sparse image block width
(sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of (sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
all non-metadata aspects of the image all non-metadata aspects of the image
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-offset-01639]] The pname:offset.y member of any element of pname:pSFRRects must: be a * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-offset-01639]]
The pname:offset.y member of any element of pname:pSFRRects must: be a
multiple of the sparse image block height multiple of the sparse image block height
(sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of (sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
all non-metadata aspects of the image all non-metadata aspects of the image
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-extent-01640]] The pname:extent.width member of any element of pname:pSFRRects must: * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-extent-01640]]
The pname:extent.width member of any element of pname:pSFRRects must:
either be a multiple of the sparse image block width of all non-metadata either be a multiple of the sparse image block width of all non-metadata
aspects of the image, or else pname:extent.width + pname:offset.x must: aspects of the image, or else pname:extent.width + pname:offset.x must:
equal the width of the image subresource equal the width of the image subresource
* [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-extent-01641]] The pname:extent.height member of any element of pname:pSFRRects must: * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-extent-01641]]
The pname:extent.height member of any element of pname:pSFRRects must:
either be a multiple of the sparse image block height of all either be a multiple of the sparse image block height of all
non-metadata aspects of the image, or else pname:extent.height + non-metadata aspects of the image, or else pname:extent.height +
pname:offset.y must: equal the width of the image subresource pname:offset.y must: equal the width of the image subresource
@ -3601,14 +3682,16 @@ include::../api/structs/VkBindImagePlaneMemoryInfoKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkBindImagePlaneMemoryInfoKHR-planeAspect-01642]] pname:planeAspect must: be a single valid plane aspect for the image * [[VUID-VkBindImagePlaneMemoryInfoKHR-planeAspect-01642]]
pname:planeAspect must: be a single valid plane aspect for the image
format (that is, pname:planeAspect must: be format (that is, pname:planeAspect must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR for "`etext:_2PLANE`" formats and ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR for "`etext:_2PLANE`" formats and
pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR for "`etext:_3PLANE`" formats) ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR for "`etext:_3PLANE`" formats)
* [[VUID-VkBindImagePlaneMemoryInfoKHR-None-01643]] A single call to flink:vkBindImageMemory2KHR must: bind all or none of * [[VUID-VkBindImagePlaneMemoryInfoKHR-None-01643]]
A single call to flink:vkBindImageMemory2KHR must: bind all or none of
the planes of an image (i.e. bindings to all planes of an image must: be the planes of an image (i.e. bindings to all planes of an image must: be
made in a single flink:vkBindImageMemory2KHR call), as separate bindings made in a single flink:vkBindImageMemory2KHR call), as separate bindings
**** ****
@ -3644,7 +3727,8 @@ pname:pSFRRects members of slink:VkBindImageMemoryDeviceGroupInfoKHX.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkBindImageMemorySwapchainInfoKHX-imageIndex-01644]] pname:imageIndex must: be less than the number of images in * [[VUID-VkBindImageMemorySwapchainInfoKHX-imageIndex-01644]]
pname:imageIndex must: be less than the number of images in
pname:swapchain pname:swapchain
**** ****

View File

@ -168,7 +168,8 @@ pname:maxSamplerAllocationCount limit.
between `1.0` and between `1.0` and
sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkSamplerCreateInfo-minFilter-01645]] If <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is * [[VUID-VkSamplerCreateInfo-minFilter-01645]]
If <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is
enabled and enabled and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
is not set for the format, pname:minFilter and pname:magFilter must: be is not set for the format, pname:minFilter and pname:magFilter must: be
@ -199,13 +200,15 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
are ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, pname:borderColor are ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, pname:borderColor
must: be a valid elink:VkBorderColor value must: be a valid elink:VkBorderColor value
ifdef::VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkSamplerCreateInfo-addressModeU-01646]] If <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is * [[VUID-VkSamplerCreateInfo-addressModeU-01646]]
If <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is
enabled, pname:addressModeU, pname:addressModeV, and pname:addressModeW enabled, pname:addressModeU, pname:addressModeV, and pname:addressModeW
must: be ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, must: be ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
pname:anisotropyEnable must: be ename:VK_FALSE, and pname:anisotropyEnable must: be ename:VK_FALSE, and
pname:unnormalizedCoordinates must: be ename:VK_FALSE pname:unnormalizedCoordinates must: be ename:VK_FALSE
ifdef::VK_EXT_sampler_filter_minmax[] ifdef::VK_EXT_sampler_filter_minmax[]
* [[VUID-VkSamplerCreateInfo-None-01647]] The sampler reduction mode must: be set to * [[VUID-VkSamplerCreateInfo-None-01647]]
The sampler reduction mode must: be set to
ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT if ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT if
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is enabled <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is enabled
endif::VK_EXT_sampler_filter_minmax[] endif::VK_EXT_sampler_filter_minmax[]
@ -468,7 +471,8 @@ Operations>> chapter.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkCreateSamplerYcbcrConversionKHR-None-01648]] The <<features-features-sampler-YCbCr-conversion, sampler Y'C~B~C~R~ * [[VUID-vkCreateSamplerYcbcrConversionKHR-None-01648]]
The <<features-features-sampler-YCbCr-conversion, sampler Y'C~B~C~R~
conversion feature>> must: be enabled conversion feature>> must: be enabled
**** ****
@ -517,21 +521,27 @@ the default mode of operation.
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01649]] pname:format must: not be ename:VK_FORMAT_UNDEFINED * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01649]]
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01650]] pname:format must: support pname:format must: not be ename:VK_FORMAT_UNDEFINED
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01650]]
pname:format must: support
ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR or ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR or
ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-xChromaOffset-01651]] If the format does not support * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-xChromaOffset-01651]]
If the format does not support
ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR, ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR,
pname:xChromaOffset and pname:yChromaOffset must: not be pname:xChromaOffset and pname:yChromaOffset must: not be
ename:VK_CHROMA_LOCATION_COSITED_EVEN_KHR ename:VK_CHROMA_LOCATION_COSITED_EVEN_KHR
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-xChromaOffset-01652]] If the format does not support * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-xChromaOffset-01652]]
If the format does not support
ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR, ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR,
pname:xChromaOffset and pname:yChromaOffset must: not be pname:xChromaOffset and pname:yChromaOffset must: not be
ename:VK_CHROMA_LOCATION_MIDPOINT_KHR ename:VK_CHROMA_LOCATION_MIDPOINT_KHR
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01653]] pname:format must: represent unsigned normalized values (i.e. the format * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01653]]
pname:format must: represent unsigned normalized values (i.e. the format
must be a etext:UNORM format) must be a etext:UNORM format)
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-None-01654]] If the format has a _422 or _420 suffix: * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-None-01654]]
If the format has a _422 or _420 suffix:
** pname:components.g must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY ** pname:components.g must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY
** pname:components.a must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY, ** pname:components.a must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY,
ename:VK_COMPONENT_SWIZZLE_ONE, or ename:VK_COMPONENT_SWIZZLE_ZERO ename:VK_COMPONENT_SWIZZLE_ONE, or ename:VK_COMPONENT_SWIZZLE_ZERO
@ -542,7 +552,8 @@ the default mode of operation.
** If either pname:components.r or pname:components.b is ** If either pname:components.r or pname:components.b is
ename:VK_COMPONENT_SWIZZLE_IDENTITY, both values must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY, both values must: be
ename:VK_COMPONENT_SWIZZLE_IDENTITY ename:VK_COMPONENT_SWIZZLE_IDENTITY
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-ycbcrModel-01655]] If pname:ycbcrModel is not * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-ycbcrModel-01655]]
If pname:ycbcrModel is not
ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR, then ename:VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR, then
pname:components.r, pname:components.g, and pname:components.b must: pname:components.r, pname:components.g, and pname:components.b must:
correspond to channels of the pname:format; that is, pname:components.r, correspond to channels of the pname:format; that is, pname:components.r,
@ -550,10 +561,12 @@ the default mode of operation.
ename:VK_COMPONENT_SWIZZLE_ZERO or ename:VK_COMPONENT_SWIZZLE_ONE, and ename:VK_COMPONENT_SWIZZLE_ZERO or ename:VK_COMPONENT_SWIZZLE_ONE, and
must: not correspond to a channel which contains zero or one as a must: not correspond to a channel which contains zero or one as a
consequence of <<textures-conversion-to-rgba,conversion to RGBA>> consequence of <<textures-conversion-to-rgba,conversion to RGBA>>
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-forceExplicitReconstruction-01656]] If the format does not support * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-forceExplicitReconstruction-01656]]
If the format does not support
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR, ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR,
pname:forceExplicitReconstruction must: be FALSE pname:forceExplicitReconstruction must: be FALSE
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-chromaFilter-01657]] If the format does not support * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-chromaFilter-01657]]
If the format does not support
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR, ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR,
pname:chromaFilter must: be ename:VK_FILTER_NEAREST pname:chromaFilter must: be ename:VK_FILTER_NEAREST
**** ****

View File

@ -1326,10 +1326,10 @@ include::../api/structs/VkSparseImageOpaqueMemoryBindInfo.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103]] * [[VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103]]
For any given element of pname:pBinds, if the pname:flags member of that If the pname:flags member of any element of pname:pBinds contains
element contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding range defined
range defined must: be within the mip tail region of the metadata aspect must: be within the mip tail region of the metadata aspect of
of pname:image pname:image
**** ****
include::../validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt[] include::../validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt[]
@ -1509,9 +1509,9 @@ Additional information about fence and semaphore operation is described in
associated with any other queue command that has not yet completed associated with any other queue command that has not yet completed
execution on that queue execution on that queue
* [[VUID-vkQueueBindSparse-pSignalSemaphores-01115]] * [[VUID-vkQueueBindSparse-pSignalSemaphores-01115]]
Any given element of the pname:pSignalSemaphores member of any element Each element of the pname:pSignalSemaphores member of each element of
of pname:pBindInfo must: be unsignaled when the semaphore signal pname:pBindInfo must: be unsignaled when the semaphore signal operation
operation it defines is executed on the device it defines is executed on the device
* [[VUID-vkQueueBindSparse-pWaitSemaphores-01116]] * [[VUID-vkQueueBindSparse-pWaitSemaphores-01116]]
When a semaphore unsignal operation defined by any element of the When a semaphore unsignal operation defined by any element of the
pname:pWaitSemaphores member of any element of pname:pBindInfo executes pname:pWaitSemaphores member of any element of pname:pBindInfo executes

View File

@ -1318,9 +1318,8 @@ that fence.
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkResetFences-pFences-01123]] * [[VUID-vkResetFences-pFences-01123]]
Any given element of pname:pFences must: not currently be associated Each element of pname:pFences must: not be currently associated with any
with any queue command that has not yet completed execution on that queue command that has not yet completed execution on that queue
queue
**** ****
include::../validity/protos/vkResetFences.txt[] include::../validity/protos/vkResetFences.txt[]
@ -1513,6 +1512,53 @@ the permanence and transference of each handle type.
==== ====
endif::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[] endif::VK_KHR_external_fence_win32,VK_KHR_external_fence_fd[]
<<fundamentals-threadingbehavior,External synchronization>> allows
implementations to modify an object's internal state, i.e. payload, without
internal synchronization.
However, for fences sharing a payload across processes, satisfying the
external synchronization requirements of fname:VkFence parameters as if all
fences in the set were the same object is sometimes infeasible.
Satisfying valid usage constraints on the state of a fence would similarly
require impractical coordination or levels of trust between processes.
Therefore, these constraints only apply to a specific fence handle, not to
its payload.
For distinct fence objects which share a payload:
* If multiple commands which queue a signal operation, or which unsignal a
fence, are called concurrently, behavior will be as if the commands were
called in an arbitrary sequential order.
* If a queue submission command is called with a fence that is sharing a
payload, and the payload is already associated with another queue command
that has not yet completed execution, either one or both of the commands
will cause the fence to become signaled when they complete execution.
* If a fence payload is reset while it is associated with a queue command
that has not yet completed execution, the payload will become unsignaled,
but may: become signaled again when the command completes execution.
* In the preceding cases, any of the devices associated with the fences
sharing the payload may: be lost, or any of the queue submission or fence
reset commands may: return ename:VK_ERROR_INITIALIZATION_FAILED.
Other than these non-deterministic results, behavior is well defined.
In particular:
* The implementation must: not crash or enter an internally inconsistent
state where future valid Vulkan commands might cause undefined results,
* Timeouts on future wait commands on fences sharing the payload must: be
effective.
[NOTE]
.Note
====
These rules allow processes to synchronize access to shared memory without
trusting each other.
However, such processes must still be cautious not to use the shared fence
for more than synchronizing access to the shared memory.
For example, a process should not use a fence with shared payload to tell
when commands it submitted to a queue have completed and objects used by
those commands may be destroyed, since the other process can accidentally or
maliciously cause the fence to signal before the commands actually complete.
====
When a fence is using an imported payload, its When a fence is using an imported payload, its
slink:VkExportFenceCreateInfoKHR::pname:handleTypes value is that specified slink:VkExportFenceCreateInfoKHR::pname:handleTypes value is that specified
when creating the fence from which the payload was exported, rather than when creating the fence from which the payload was exported, rather than
@ -1596,7 +1642,7 @@ include::../api/structs/VkImportFenceWin32HandleInfoKHR.txt[]
The handle types supported by pname:handleType are: The handle types supported by pname:handleType are:
[[synchronization-handletypes-win32]] [[synchronization-fence-handletypes-win32]]
.Handle Types Supported by VkImportFenceWin32HandleInfoKHR .Handle Types Supported by VkImportFenceWin32HandleInfoKHR
[width="80%",options="header"] [width="80%",options="header"]
|==== |====
@ -1687,7 +1733,7 @@ include::../api/structs/VkImportFenceFdInfoKHR.txt[]
The handle types supported by pname:handleType are: The handle types supported by pname:handleType are:
[[synchronization-handletypes-fd]] [[synchronization-fence-handletypes-fd]]
.Handle Types Supported by VkImportFenceFdInfoKHR .Handle Types Supported by VkImportFenceFdInfoKHR
[width="80%",options="header"] [width="80%",options="header"]
|==== |====
@ -2269,29 +2315,6 @@ unsignal operation>> is submitted to a queue:
ifdef::VK_KHR_external_semaphore[] ifdef::VK_KHR_external_semaphore[]
Generally, the implementation behavior will be undefined when applications
fail to ensure these requirements are met.
However, to avoid requiring Vulkan instances that import semaphore payloads
to trust the source of that payload, the side effects of violating the
requirements are better defined in certain cases.
When the semaphore that violates the requirements is using an imported
payload at the time of the violation, the implementation must: ensure side
effects are limited to one or more of the following:
* Returning the error code ename:VK_ERROR_INITIALIZATION_FAILED from the
command which resulted in the violation.
* Allowing the logical device on which the violation occured to enter an
undefined state immediately or in the future and returning the error
code ename:VK_ERROR_DEVICE_LOST from any subsequent command, including
the one causing the violation, after the device enters such a state.
* Continuing execution of the violating command or operation as if the
semaphore wait completed successfully after an implementation-dependent
timeout.
In this case, the state of the semaphore becomes undefined.
The semaphore must: be destroyed or have its state replaced by an import
operation to again meet valid usage requirements.
[[synchronization-semaphores-importing]] [[synchronization-semaphores-importing]]
=== Importing Semaphore Payloads === Importing Semaphore Payloads
@ -2362,6 +2385,48 @@ the permanence and transference of each handle type.
==== ====
endif::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd[] endif::VK_KHR_external_semaphore_win32,VK_KHR_external_semaphore_fd[]
<<fundamentals-threadingbehavior,External synchronization>> allows
implementations to modify an object's internal state, i.e. payload, without
internal synchronization.
However, for semaphores sharing a payload across processes, satisfying the
external synchronization requirements of fname:VkSemaphore parameters as if
all semaphores in the set were the same object is sometimes infeasible.
Satisfying the <<synchronization-semaphores-waiting-state,wait operation
state requirements>> would similarly require impractical coordination or
levels of trust between processes.
Therefore, these constraints only apply to a specific semaphore handle, not
to its payload.
For distinct semaphore objects which share a payload:
* If the semaphores are passed to multiple queue submission commands
concurrently, behavior will be as if the commands were called in an
arbitrary sequential order.
* If the <<synchronization-semaphores-waiting-state,wait operation state
requirements>> are violated for the payload by a queue submission command,
or if a signal operation is queued for a payload that is already signaled or
has a pending signal operation, the command may: return
ename:VK_ERROR_INITIALIZATION_FAILED, the queue's device may: be lost
immediately or later, or the wait operation or future wait operations on the
payload may: complete immediately when executed or when any one of the queue
signal operations completes.
However, a wait operation on a semaphore sharing the payload must: not
continue to wait after the last signal operation queued for the payload
completes.
[NOTE]
.Note
====
These rules allow processes to synchronize access to shared memory without
trusting each other.
However, such processes must still be cautious not to use the shared
semaphore for more than synchronizing access to the shared memory.
For example, a process should not use a shared semaphore as part of a
execution dependency chain that, when complete, leads to objects being
destroyed, if it does not trust other processes sharing the semaphore
payload.
====
When a semaphore is using an imported payload, its When a semaphore is using an imported payload, its
slink:VkExportSemaphoreCreateInfoKHR::pname:handleTypes value is that slink:VkExportSemaphoreCreateInfoKHR::pname:handleTypes value is that
specified when creating the semaphore from which the payload was exported, specified when creating the semaphore from which the payload was exported,
@ -2618,6 +2683,8 @@ endif::VK_KHR_external_semaphore[]
Events are a synchronization primitive that can: be used to insert a Events are a synchronization primitive that can: be used to insert a
fine-grained dependency between commands submitted to the same queue, or fine-grained dependency between commands submitted to the same queue, or
between the host and a queue. between the host and a queue.
Events must: not be used to insert a dependency between commands submitted
to different queues.
Events have two states - signaled and unsignaled. Events have two states - signaled and unsignaled.
An application can: signal an event, or unsignal it, on either the host or An application can: signal an event, or unsignal it, on either the host or
the device. the device.
@ -2928,7 +2995,10 @@ include::../api/protos/vkCmdWaitEvents.txt[]
slink:VkImageMemoryBarrier structures. slink:VkImageMemoryBarrier structures.
When fname:vkCmdWaitEvents is submitted to a queue, it defines a memory When fname:vkCmdWaitEvents is submitted to a queue, it defines a memory
dependency between prior event signal operations, and subsequent commands. dependency between prior event signal operations on the same queue or the
host, and subsequent commands.
fname:vkCmdWaitEvents must: not be used to wait on event signal operations
occuring on other queues.
The first synchronization scope only includes event signal operations that The first synchronization scope only includes event signal operations that
operate on members of pname:pEvents, and the operations that happened-before operate on members of pname:pEvents, and the operations that happened-before
@ -3031,15 +3101,15 @@ semaphore).
<<synchronization-pipeline-stages-supported, table of supported pipeline <<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>. stages>>.
* [[VUID-vkCmdWaitEvents-pMemoryBarriers-01165]] * [[VUID-vkCmdWaitEvents-pMemoryBarriers-01165]]
Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers or
or pname:pImageMemoryBarriers must: not have any access flag included in pname:pImageMemoryBarriers must: not have any access flag included in
its pname:srcAccessMask member if that bit is not supported by any of its pname:srcAccessMask member if that bit is not supported by any of
the pipeline stages in pname:srcStageMask, as specified in the the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access <<synchronization-access-types-supported, table of supported access
types>>. types>>.
* [[VUID-vkCmdWaitEvents-pMemoryBarriers-01166]] * [[VUID-vkCmdWaitEvents-pMemoryBarriers-01166]]
Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers or
or pname:pImageMemoryBarriers must: not have any access flag included in pname:pImageMemoryBarriers must: not have any access flag included in
its pname:dstAccessMask member if that bit is not supported by any of its pname:dstAccessMask member if that bit is not supported by any of
the pipeline stages in pname:dstStageMask, as specified in the the pipeline stages in pname:dstStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access <<synchronization-access-types-supported, table of supported access
@ -3233,15 +3303,15 @@ framebuffer-space>> pipeline stages is
<<synchronization-pipeline-stages-supported, table of supported pipeline <<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>. stages>>.
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01184]] * [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01184]]
Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers and
or pname:pImageMemoryBarriers must: not have any access flag included in pname:pImageMemoryBarriers must: not have any access flag included in
its pname:srcAccessMask member if that bit is not supported by any of its pname:srcAccessMask member if that bit is not supported by any of
the pipeline stages in pname:srcStageMask, as specified in the the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access <<synchronization-access-types-supported, table of supported access
types>>. types>>.
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01185]] * [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01185]]
Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers and
or pname:pImageMemoryBarriers must: not have any access flag included in pname:pImageMemoryBarriers must: not have any access flag included in
its pname:dstAccessMask member if that bit is not supported by any of its pname:dstAccessMask member if that bit is not supported by any of
the pipeline stages in pname:dstStageMask, as specified in the the pipeline stages in pname:dstStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access <<synchronization-access-types-supported, table of supported access
@ -3609,6 +3679,17 @@ would equal ename:VK_IMAGE_LAYOUT_UNDEFINED.
endif::VK_EXT_sample_locations[] endif::VK_EXT_sample_locations[]
ifdef::VK_KHR_sampler_ycbcr_conversion[]
If pname:image has a multi-planar format and the image is _disjoint_, then
including ename:VK_IMAGE_ASPECT_COLOR_BIT in the pname:aspectMask member of
pname:subresourceRange is equivalent to including
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, and (for three-plane formats only)
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR.
endif::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkImageMemoryBarrier-oldLayout-01197]] * [[VUID-VkImageMemoryBarrier-oldLayout-01197]]
@ -3692,9 +3773,26 @@ endif::VK_KHR_external_memory[]
pname:image was created pname:image was created
* [[VUID-VkImageMemoryBarrier-image-01207]] * [[VUID-VkImageMemoryBarrier-image-01207]]
If pname:image has a depth/stencil format with both depth and stencil If pname:image has a depth/stencil format with both depth and stencil
components, then pname:aspectMask member of pname:subresourceRange must: components, then the pname:aspectMask member of pname:subresourceRange
include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and must: include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
ename:VK_IMAGE_ASPECT_STENCIL_BIT ename:VK_IMAGE_ASPECT_STENCIL_BIT
ifdef::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkImageMemoryBarrier-image-01671]]
If pname:image has a single-plane color format or is not _disjoint_,
then the pname:aspectMask member of pname:subresourceRange must: be
ename:VK_IMAGE_ASPECT_COLOR_BIT
* [[VUID-VkImageMemoryBarrier-image-01672]]
If pname:image has a multi-planar format and the image is _disjoint_,
then the pname:aspectMask member of pname:subresourceRange must: include
either at least one of ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, and
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR; or must: include
ename:VK_IMAGE_ASPECT_COLOR_BIT
* [[VUID-VkImageMemoryBarrier-image-01673]]
If pname:image has a multi-planar format with only two planes, then the
pname:aspectMask member of pname:subresourceRange must: not include
ename:VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkImageMemoryBarrier-oldLayout-01208]] * [[VUID-VkImageMemoryBarrier-oldLayout-01208]]
If either pname:oldLayout or pname:newLayout is If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then pname:image must: ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then pname:image must:
@ -3710,11 +3808,13 @@ endif::VK_KHR_external_memory[]
must: have been created with must: have been created with
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
ifdef::VK_KHR_maintenance2[] ifdef::VK_KHR_maintenance2[]
* [[VUID-VkImageMemoryBarrier-oldLayout-01658]] If either pname:oldLayout or pname:newLayout is * [[VUID-VkImageMemoryBarrier-oldLayout-01658]]
If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR
then pname:image must: have been created with then pname:image must: have been created with
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
* [[VUID-VkImageMemoryBarrier-oldLayout-01659]] If either pname:oldLayout or pname:newLayout is * [[VUID-VkImageMemoryBarrier-oldLayout-01659]]
If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
then pname:image must: have been created with then pname:image must: have been created with
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set

View File

@ -320,6 +320,7 @@ They include the following steps, which are performed in the listed order:
** <<textures-operation-validation,Instruction/Sampler/Image validation>> ** <<textures-operation-validation,Instruction/Sampler/Image validation>>
** <<textures-integer-coordinate-validation,Coordinate validation>> ** <<textures-integer-coordinate-validation,Coordinate validation>>
** <<textures-sparse-validation,Sparse validation>> ** <<textures-sparse-validation,Sparse validation>>
** <<textures-layout-validation,Layout validation>>
* <<textures-format-conversion,Format conversion>> * <<textures-format-conversion,Format conversion>>
* <<textures-texel-replacement,Texel replacement>> * <<textures-texel-replacement,Texel replacement>>
* <<textures-depth-compare-operation,Depth comparison>> * <<textures-depth-compare-operation,Depth comparison>>
@ -534,6 +535,17 @@ If the texel reads from an unbound region of a sparse image, the texel is a
_sparse unbound texel_, and processing continues with _sparse unbound texel_, and processing continues with
<<textures-texel-replacement,texel replacement>>. <<textures-texel-replacement,texel replacement>>.
ifdef::VK_KHR_sampler_ycbcr_conversion[]
[[textures-layout-validation]]
==== Layout Validation
If all planes of a _disjoint_ _multi-planar_ image are not in the same
<<resources-image-layouts,image layout>> when the image is sampled with
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>>, the result of
texel reads is undefined.
endif::VK_KHR_sampler_ycbcr_conversion[]
[[textures-format-conversion]] [[textures-format-conversion]]
=== Format Conversion === Format Conversion
@ -561,8 +573,8 @@ Signed integer components smaller than 32 bits are sign-extended.
If the image format is sRGB, the color components are first converted as if If the image format is sRGB, the color components are first converted as if
they are UNORM, and then sRGB to linear conversion is applied to the R, G, they are UNORM, and then sRGB to linear conversion is applied to the R, G,
and B components as described in the "`sRGB EOTF`" section of and B components as described in the "`sRGB EOTF`" section of the
the <<data-format,Khronos Data Format Specification>>. <<data-format,Khronos Data Format Specification>>.
The A component, if present, is unchanged. The A component, if present, is unchanged.
If the image view format is block-compressed, then the texel value is first If the image view format is block-compressed, then the texel value is first
@ -2177,25 +2189,6 @@ values with non-zero weights.
endif::VK_EXT_sampler_filter_minmax[] endif::VK_EXT_sampler_filter_minmax[]
ifdef::editing-notes[]
[NOTE]
.editing-note
==================
(Bill) EXT_texture_filter_anisotropic has not been updated since 2000,
except for ES extension number (2007) and a minor speeling (sic) correction
(2014), neither of which are functional changes.
It is showing its age.
In particular, there is an open issue about 3D textures.
There are no interactions with ARB_texture_cube_map (approved 1999, promoted
to core OpenGL 1.3 in 2001), let alone interactions with
ARB_seamless_cube_map (approved and promoted to core OpenGL 3.2 in 2009).
There are no interactions with texture offsets or texture gather.
==================
endif::editing-notes[]
[[textures-instructions]] [[textures-instructions]]
== Image Operation Steps == Image Operation Steps

View File

@ -37,6 +37,7 @@
# For error and file-loading interfaces only # For error and file-loading interfaces only
from reflib import * from reflib import *
from reflow_count import startVUID
import argparse, copy, os, pdb, re, string, sys import argparse, copy, os, pdb, re, string, sys
@ -588,6 +589,21 @@ def reflowFile(filename, args):
logWarn('Updated nextvu to', state.nextvu, 'after file', filename) logWarn('Updated nextvu to', state.nextvu, 'after file', filename)
args.nextvu = state.nextvu args.nextvu = state.nextvu
def reflowAllAdocFiles(folder_to_reflow, args):
for root, subdirs, files in os.walk(folder_to_reflow):
for file in files:
if file.endswith(".txt"):
file_path = os.path.join(root, file)
reflowFile(file_path, args)
for subdir in subdirs:
sub_folder = os.path.join(root, subdir)
print('Sub-folder = %s' % sub_folder)
if not (subdir.lower() == "scripts") and not (subdir.lower() == "style"):
print(' Parsing = %s' % sub_folder)
reflowAllAdocFiles(sub_folder, args)
else:
print(' Skipping = %s' % sub_folder)
# Patterns used to recognize interesting lines in an asciidoc source file. # Patterns used to recognize interesting lines in an asciidoc source file.
# These patterns are only compiled once. # These patterns are only compiled once.
@ -597,8 +613,6 @@ def reflowFile(filename, args):
global vuPat global vuPat
vuPat = re.compile('^(?P<head> [*]+)( *)(?P<tail>.*)', re.DOTALL) vuPat = re.compile('^(?P<head> [*]+)( *)(?P<tail>.*)', re.DOTALL)
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 1660
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
@ -643,10 +657,23 @@ if __name__ == '__main__':
if args.nextvu != None: if args.nextvu != None:
logWarn('Tagging untagged Valid Usage statements starting at', args.nextvu) logWarn('Tagging untagged Valid Usage statements starting at', args.nextvu)
for file in args.files: # If no files are specified, reflow the entire specification chapters folder
reflowFile(file, args) if len(args.files) == 0:
folder_to_reflow = os.getcwd()
folder_to_reflow += '/doc/specs/vulkan'
reflowAllAdocFiles(folder_to_reflow, args)
else:
for file in args.files:
reflowFile(file, args)
if args.nextvu != None and args.nextvu != startVUID: if args.nextvu != None and args.nextvu != startVUID:
logWarn('You must now edit the value of reflow.py:startVUID to', try:
args.nextvu, reflow_count_file_path = os.path.dirname(os.path.realpath(__file__))
'so that future runs will not overwrite existing VUID tags') reflow_count_file_path += '/reflow_count.py'
reflow_count_file = open(reflow_count_file_path, 'w', encoding='utf8')
print('# The value to start tagging VU statements at, unless overridden by -nextvu\n', file=reflow_count_file, end='')
count_string = 'startVUID = %d\n' % args.nextvu
print(count_string, file=reflow_count_file, end='')
reflow_count_file.close()
except:
logWarn('Cannot open output count file reflow_count.py', ':', sys.exc_info()[0])

View File

@ -0,0 +1,2 @@
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 1676

View File

@ -99,6 +99,39 @@ except for noted exceptions in the table below.
|==== |====
[[writing-arrays]]
=== Describing Properties of Array Elements
Many Vulkan parameters are arrays, or pointers to arrays.
When describing array elements, use the terminology "`each element`" when
the description applies uniformly and independently to every element of the
array.
For example:
[source,asciidoc]
.Example Markup
----
* Each element of the pname:pCommandBuffers member of each element of
pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
executable state>>.
----
Use the terminology "`any element`" when the description is of zero or more
elements of the array sharing a property.
For example:
[source,asciidoc]
.Example Markup
----
* If any element of the pname:pCommandBuffers member of any element
of pname:pSubmits was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
the <<commandbuffers-lifecycle, pending state>>.
----
Never use the redundant terminology "`any *given* element`".
[[writing-compound-words]] [[writing-compound-words]]
=== Compound Words and Preferred Orthography === Compound Words and Preferred Orthography

View File

@ -157,6 +157,8 @@ include::style/vuid.txt[]
= Revision History = Revision History
* 2017-09-10 - Add descriptions of <<writing-arrays, how to use `each` and
`any`>> to refer to properties of elments of arrays (internal issue 884).
* 2017-09-10 - Add <<extensions-interactions-parent, Valid Usage and * 2017-09-10 - Add <<extensions-interactions-parent, Valid Usage and
Extension pname:pNext Chains>> language specifying where to describe Extension pname:pNext Chains>> language specifying where to describe
interactions of structures in a pname:pNext chain (internal issue 715). interactions of structures in a pname:pNext chain (internal issue 715).

View File

@ -1020,6 +1020,57 @@ VkResult vkBindImageMemory2KHR(
} }
#endif /* VK_KHR_bind_memory2 */ #endif /* VK_KHR_bind_memory2 */
#ifdef VK_ANDROID_native_buffer
static PFN_vkGetSwapchainGrallocUsageANDROID pfn_vkGetSwapchainGrallocUsageANDROID;
VkResult vkGetSwapchainGrallocUsageANDROID(
VkDevice device,
VkFormat format,
VkImageUsageFlags imageUsage,
int* grallocUsage)
{
return pfn_vkGetSwapchainGrallocUsageANDROID(
device,
format,
imageUsage,
grallocUsage
);
}
static PFN_vkAcquireImageANDROID pfn_vkAcquireImageANDROID;
VkResult vkAcquireImageANDROID(
VkDevice device,
VkImage image,
int nativeFenceFd,
VkSemaphore semaphore,
VkFence fence)
{
return pfn_vkAcquireImageANDROID(
device,
image,
nativeFenceFd,
semaphore,
fence
);
}
static PFN_vkQueueSignalReleaseImageANDROID pfn_vkQueueSignalReleaseImageANDROID;
VkResult vkQueueSignalReleaseImageANDROID(
VkQueue queue,
uint32_t waitSemaphoreCount,
const VkSemaphore* pWaitSemaphores,
VkImage image,
int* pNativeFenceFd)
{
return pfn_vkQueueSignalReleaseImageANDROID(
queue,
waitSemaphoreCount,
pWaitSemaphores,
image,
pNativeFenceFd
);
}
#endif /* VK_ANDROID_native_buffer */
#ifdef VK_EXT_debug_report #ifdef VK_EXT_debug_report
static PFN_vkCreateDebugReportCallbackEXT pfn_vkCreateDebugReportCallbackEXT; static PFN_vkCreateDebugReportCallbackEXT pfn_vkCreateDebugReportCallbackEXT;
VkResult vkCreateDebugReportCallbackEXT( VkResult vkCreateDebugReportCallbackEXT(
@ -1951,6 +2002,11 @@ void vkExtInitInstance(VkInstance instance)
pfn_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)vkGetInstanceProcAddr(instance, "vkBindBufferMemory2KHR"); pfn_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)vkGetInstanceProcAddr(instance, "vkBindBufferMemory2KHR");
pfn_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)vkGetInstanceProcAddr(instance, "vkBindImageMemory2KHR"); pfn_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)vkGetInstanceProcAddr(instance, "vkBindImageMemory2KHR");
#endif /* VK_KHR_bind_memory2 */ #endif /* VK_KHR_bind_memory2 */
#ifdef VK_ANDROID_native_buffer
pfn_vkGetSwapchainGrallocUsageANDROID = (PFN_vkGetSwapchainGrallocUsageANDROID)vkGetInstanceProcAddr(instance, "vkGetSwapchainGrallocUsageANDROID");
pfn_vkAcquireImageANDROID = (PFN_vkAcquireImageANDROID)vkGetInstanceProcAddr(instance, "vkAcquireImageANDROID");
pfn_vkQueueSignalReleaseImageANDROID = (PFN_vkQueueSignalReleaseImageANDROID)vkGetInstanceProcAddr(instance, "vkQueueSignalReleaseImageANDROID");
#endif /* VK_ANDROID_native_buffer */
#ifdef VK_EXT_debug_report #ifdef VK_EXT_debug_report
pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"); pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT");
pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"); pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT");
@ -2199,6 +2255,11 @@ void vkExtInitDevice(VkDevice device)
pfn_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(device, "vkBindBufferMemory2KHR"); pfn_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(device, "vkBindBufferMemory2KHR");
pfn_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(device, "vkBindImageMemory2KHR"); pfn_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(device, "vkBindImageMemory2KHR");
#endif /* VK_KHR_bind_memory2 */ #endif /* VK_KHR_bind_memory2 */
#ifdef VK_ANDROID_native_buffer
pfn_vkGetSwapchainGrallocUsageANDROID = (PFN_vkGetSwapchainGrallocUsageANDROID)vkGetDeviceProcAddr(device, "vkGetSwapchainGrallocUsageANDROID");
pfn_vkAcquireImageANDROID = (PFN_vkAcquireImageANDROID)vkGetDeviceProcAddr(device, "vkAcquireImageANDROID");
pfn_vkQueueSignalReleaseImageANDROID = (PFN_vkQueueSignalReleaseImageANDROID)vkGetDeviceProcAddr(device, "vkQueueSignalReleaseImageANDROID");
#endif /* VK_ANDROID_native_buffer */
#ifdef VK_EXT_debug_report #ifdef VK_EXT_debug_report
pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkCreateDebugReportCallbackEXT"); pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkCreateDebugReportCallbackEXT");
pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugReportCallbackEXT"); pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugReportCallbackEXT");

View File

@ -393,13 +393,19 @@ Extension = element extension {
ProfileName ? , ProfileName ? ,
ExtensionName ? , ExtensionName ? ,
Comment ? , Comment ? ,
InterfaceElement * (
InterfaceElement |
element comment { text }
) *
} | } |
element remove { element remove {
attribute api { text } ? , attribute api { text } ? ,
ProfileName ? , ProfileName ? ,
Comment ? , Comment ? ,
InterfaceElement * (
InterfaceElement |
element comment { text }
) *
} }
) * ) *
} }

View File

@ -107,7 +107,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="define">// Vulkan 1.0 version number <type category="define">// Vulkan 1.0 version number
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)// Patch version should always be set to 0</type> #define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file <type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 61</type> #define <name>VK_HEADER_VERSION</name> 62</type>
<type category="define"> <type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type> #define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -493,10 +493,6 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<member><type>VkOffset2D</type> <name>offset</name></member> <member><type>VkOffset2D</type> <name>offset</name></member>
<member><type>VkExtent2D</type> <name>extent</name></member> <member><type>VkExtent2D</type> <name>extent</name></member>
</type> </type>
<type category="struct" name="VkRect3D">
<member><type>VkOffset3D</type> <name>offset</name></member>
<member><type>VkExtent3D</type> <name>extent</name></member>
</type>
<type category="struct" name="VkClearRect"> <type category="struct" name="VkClearRect">
<member><type>VkRect2D</type> <name>rect</name></member> <member><type>VkRect2D</type> <name>rect</name></member>
<member><type>uint32_t</type> <name>baseArrayLayer</name></member> <member><type>uint32_t</type> <name>baseArrayLayer</name></member>
@ -2543,7 +2539,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<member optional="true"><type>uint32_t</type> <name>attachmentInitialSampleLocationsCount</name></member> <member optional="true"><type>uint32_t</type> <name>attachmentInitialSampleLocationsCount</name></member>
<member len="attachmentInitialSampleLocationsCount">const <type>VkAttachmentSampleLocationsEXT</type>* <name>pAttachmentInitialSampleLocations</name></member> <member len="attachmentInitialSampleLocationsCount">const <type>VkAttachmentSampleLocationsEXT</type>* <name>pAttachmentInitialSampleLocations</name></member>
<member optional="true"><type>uint32_t</type> <name>postSubpassSampleLocationsCount</name></member> <member optional="true"><type>uint32_t</type> <name>postSubpassSampleLocationsCount</name></member>
<member len="postSubpassSampleLocationsCount">const <type>VkSubpassSampleLocationsEXT</type>* <name>pSubpassSampleLocations</name></member> <member len="postSubpassSampleLocationsCount">const <type>VkSubpassSampleLocationsEXT</type>* <name>pPostSubpassSampleLocations</name></member>
</type> </type>
<type category="struct" name="VkPipelineSampleLocationsStateCreateInfoEXT" structextends="VkPipelineMultisampleStateCreateInfo"> <type category="struct" name="VkPipelineSampleLocationsStateCreateInfoEXT" structextends="VkPipelineMultisampleStateCreateInfo">
<member values="VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member> <member values="VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
@ -2619,6 +2615,14 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure --> <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkValidationCacheEXT</type> <name>validationCache</name></member> <!-- Validation cache handle --> <member><type>VkValidationCacheEXT</type> <name>validationCache</name></member> <!-- Validation cache handle -->
</type> </type>
<type category="struct" name="VkNativeBufferANDROID">
<member values="VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>handle</name></member>
<member><type>int</type> <name>stride</name></member>
<member><type>int</type> <name>format</name></member>
<member><type>int</type> <name>usage</name></member>
</type>
</types> </types>
<comment>Vulkan enumerant (token) definitions</comment> <comment>Vulkan enumerant (token) definitions</comment>
@ -5337,7 +5341,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<param optional="true" externsync="true"><type>VkSamplerYcbcrConversionKHR</type> <name>ycbcrConversion</name></param> <param optional="true" externsync="true"><type>VkSamplerYcbcrConversionKHR</type> <name>ycbcrConversion</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command> </command>
<command> <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
<proto><type>VkResult</type> <name>vkCreateValidationCacheEXT</name></proto> <proto><type>VkResult</type> <name>vkCreateValidationCacheEXT</name></proto>
<param><type>VkDevice</type> <name>device</name></param> <param><type>VkDevice</type> <name>device</name></param>
<param>const <type>VkValidationCacheCreateInfoEXT</type>* <name>pCreateInfo</name></param> <param>const <type>VkValidationCacheCreateInfoEXT</type>* <name>pCreateInfo</name></param>
@ -5364,6 +5368,29 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<param><type>uint32_t</type> <name>srcCacheCount</name></param> <param><type>uint32_t</type> <name>srcCacheCount</name></param>
<param len="srcCacheCount">const <type>VkValidationCacheEXT</type>* <name>pSrcCaches</name></param> <param len="srcCacheCount">const <type>VkValidationCacheEXT</type>* <name>pSrcCaches</name></param>
</command> </command>
<command>
<proto><type>VkResult</type> <name>vkGetSwapchainGrallocUsageANDROID</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param><type>VkFormat</type> <name>format</name></param>
<param><type>VkImageUsageFlags</type> <name>imageUsage</name></param>
<param><type>int</type>* <name>grallocUsage</name></param>
</command>
<command>
<proto><type>VkResult</type> <name>vkAcquireImageANDROID</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param><type>VkImage</type> <name>image</name></param>
<param><type>int</type> <name>nativeFenceFd</name></param>
<param><type>VkSemaphore</type> <name>semaphore</name></param>
<param><type>VkFence</type> <name>fence</name></param>
</command>
<command>
<proto><type>VkResult</type> <name>vkQueueSignalReleaseImageANDROID</name></proto>
<param><type>VkQueue</type> <name>queue</name></param>
<param><type>uint32_t</type> <name>waitSemaphoreCount</name></param>
<param>const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></param>
<param><type>VkImage</type> <name>image</name></param>
<param><type>int</type>* <name>pNativeFenceFd</name></param>
</command>
</commands> </commands>
<feature api="vulkan" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions"> <feature api="vulkan" name="VK_VERSION_1_0" number="1.0" comment="Vulkan core API interface definitions">
@ -5727,9 +5754,14 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</extension> </extension>
<extension name="VK_ANDROID_native_buffer" number="11" supported="disabled"> <extension name="VK_ANDROID_native_buffer" number="11" supported="disabled">
<require> <require>
<enum value="4" name="VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION"/> <enum value="5" name="VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION"/>
<enum value="11" name="VK_ANDROID_NATIVE_BUFFER_NUMBER"/> <enum value="11" name="VK_ANDROID_NATIVE_BUFFER_NUMBER"/>
<enum value="&quot;VK_ANDROID_native_buffer&quot;" name="VK_ANDROID_NATIVE_BUFFER_NAME"/> <enum value="&quot;VK_ANDROID_native_buffer&quot;" name="VK_ANDROID_NATIVE_BUFFER_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"/>
<type name="VkNativeBufferANDROID"/>
<command name="vkGetSwapchainGrallocUsageANDROID"/>
<command name="vkAcquireImageANDROID"/>
<command name="vkQueueSignalReleaseImageANDROID"/>
</require> </require>
</extension> </extension>
<extension name="VK_EXT_debug_report" number="12" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney" supported="vulkan"> <extension name="VK_EXT_debug_report" number="12" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney" supported="vulkan">
@ -5981,10 +6013,10 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enum value="&quot;VK_AMD_extension_46&quot;" name="VK_AMD_EXTENSION_46_EXTENSION_NAME"/> <enum value="&quot;VK_AMD_extension_46&quot;" name="VK_AMD_EXTENSION_46_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="VK_AMD_extension_47" number="47" author="AMD" contact="Daniel Rakos @aqnuep" supported="disabled"> <extension name="VK_AMD_shader_image_load_store_lod" number="47" author="AMD" contact="Dominik Witczak @dominikwitczak_amd" supported="vulkan" type="device">
<require> <require>
<enum value="0" name="VK_AMD_EXTENSION_47_SPEC_VERSION"/> <enum value="1" name="VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_extension_47&quot;" name="VK_AMD_EXTENSION_47_EXTENSION_NAME"/> <enum value="&quot;VK_AMD_shader_image_load_store_lod&quot;" name="VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="VK_NVX_extension_48" number="48" author="NVX" contact="James Jones @cubanismo" supported="disabled"> <extension name="VK_NVX_extension_48" number="48" author="NVX" contact="James Jones @cubanismo" supported="disabled">
@ -7153,69 +7185,69 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</extension> </extension>
<extension name="VK_KHR_sampler_ycbcr_conversion" number="157" type="device" requires="VK_KHR_maintenance1,VK_KHR_bind_memory2,VK_KHR_get_memory_requirements2,VK_KHR_get_physical_device_properties2" author="KHR" contact="Andrew Garrard @fluppeteer" supported="vulkan"> <extension name="VK_KHR_sampler_ycbcr_conversion" number="157" type="device" requires="VK_KHR_maintenance1,VK_KHR_bind_memory2,VK_KHR_get_memory_requirements2,VK_KHR_get_physical_device_properties2" author="KHR" contact="Andrew Garrard @fluppeteer" supported="vulkan">
<require> <require>
<enum value="1" name="VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"/> <enum value="1" name="VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_sampler_ycbcr_conversion&quot;" name="VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"/> <enum value="&quot;VK_KHR_sampler_ycbcr_conversion&quot;" name="VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR"/> <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR"/> <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR"/> <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR"/>
<enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR"/> <enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR"/>
<enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR"/> <enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR"/>
<enum offset="5" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR"/> <enum offset="5" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR"/>
<enum offset="0" extends="VkDebugReportObjectTypeEXT" name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT"/> <enum offset="0" extends="VkDebugReportObjectTypeEXT" name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR"/>
<enum offset="0" extends="VkFormat" name="VK_FORMAT_G8B8G8R8_422_UNORM_KHR"/> <enum offset="0" extends="VkFormat" name="VK_FORMAT_G8B8G8R8_422_UNORM_KHR"/>
<enum offset="1" extends="VkFormat" name="VK_FORMAT_B8G8R8G8_422_UNORM_KHR"/> <enum offset="1" extends="VkFormat" name="VK_FORMAT_B8G8R8G8_422_UNORM_KHR"/>
<enum offset="2" extends="VkFormat" name="VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR"/> <enum offset="2" extends="VkFormat" name="VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR"/>
<enum offset="3" extends="VkFormat" name="VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR"/> <enum offset="3" extends="VkFormat" name="VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR"/>
<enum offset="4" extends="VkFormat" name="VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR"/> <enum offset="4" extends="VkFormat" name="VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR"/>
<enum offset="5" extends="VkFormat" name="VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR"/> <enum offset="5" extends="VkFormat" name="VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR"/>
<enum offset="6" extends="VkFormat" name="VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR"/> <enum offset="6" extends="VkFormat" name="VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR"/>
<enum offset="7" extends="VkFormat" name="VK_FORMAT_R10X6_UNORM_PACK16_KHR"/> <enum offset="7" extends="VkFormat" name="VK_FORMAT_R10X6_UNORM_PACK16_KHR"/>
<enum offset="8" extends="VkFormat" name="VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR"/> <enum offset="8" extends="VkFormat" name="VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR"/>
<enum offset="9" extends="VkFormat" name="VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR"/> <enum offset="9" extends="VkFormat" name="VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR"/>
<enum offset="10" extends="VkFormat" name="VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR"/> <enum offset="10" extends="VkFormat" name="VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR"/>
<enum offset="11" extends="VkFormat" name="VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR"/> <enum offset="11" extends="VkFormat" name="VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR"/>
<enum offset="12" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR"/> <enum offset="12" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR"/>
<enum offset="13" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR"/> <enum offset="13" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR"/>
<enum offset="14" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR"/> <enum offset="14" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR"/>
<enum offset="15" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR"/> <enum offset="15" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR"/>
<enum offset="16" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR"/> <enum offset="16" extends="VkFormat" name="VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR"/>
<enum offset="17" extends="VkFormat" name="VK_FORMAT_R12X4_UNORM_PACK16_KHR"/> <enum offset="17" extends="VkFormat" name="VK_FORMAT_R12X4_UNORM_PACK16_KHR"/>
<enum offset="18" extends="VkFormat" name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR"/> <enum offset="18" extends="VkFormat" name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR"/>
<enum offset="19" extends="VkFormat" name="VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR"/> <enum offset="19" extends="VkFormat" name="VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR"/>
<enum offset="20" extends="VkFormat" name="VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR"/> <enum offset="20" extends="VkFormat" name="VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR"/>
<enum offset="21" extends="VkFormat" name="VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR"/> <enum offset="21" extends="VkFormat" name="VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR"/>
<enum offset="22" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR"/> <enum offset="22" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR"/>
<enum offset="23" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR"/> <enum offset="23" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR"/>
<enum offset="24" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR"/> <enum offset="24" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR"/>
<enum offset="25" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR"/> <enum offset="25" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR"/>
<enum offset="26" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR"/> <enum offset="26" extends="VkFormat" name="VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR"/>
<enum offset="27" extends="VkFormat" name="VK_FORMAT_G16B16G16R16_422_UNORM_KHR"/> <enum offset="27" extends="VkFormat" name="VK_FORMAT_G16B16G16R16_422_UNORM_KHR"/>
<enum offset="28" extends="VkFormat" name="VK_FORMAT_B16G16R16G16_422_UNORM_KHR"/> <enum offset="28" extends="VkFormat" name="VK_FORMAT_B16G16R16G16_422_UNORM_KHR"/>
<enum offset="29" extends="VkFormat" name="VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR"/> <enum offset="29" extends="VkFormat" name="VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR"/>
<enum offset="30" extends="VkFormat" name="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR"/> <enum offset="30" extends="VkFormat" name="VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR"/>
<enum offset="31" extends="VkFormat" name="VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR"/> <enum offset="31" extends="VkFormat" name="VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR"/>
<enum offset="32" extends="VkFormat" name="VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR"/> <enum offset="32" extends="VkFormat" name="VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR"/>
<enum offset="33" extends="VkFormat" name="VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR"/> <enum offset="33" extends="VkFormat" name="VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR"/>
<enum bitpos="4" extends="VkImageAspectFlagBits" name="VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"/> <enum bitpos="4" extends="VkImageAspectFlagBits" name="VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"/>
<enum bitpos="5" extends="VkImageAspectFlagBits" name="VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"/> <enum bitpos="5" extends="VkImageAspectFlagBits" name="VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"/>
<enum bitpos="6" extends="VkImageAspectFlagBits" name="VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"/> <enum bitpos="6" extends="VkImageAspectFlagBits" name="VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"/>
<enum bitpos="9" extends="VkImageCreateFlagBits" name="VK_IMAGE_CREATE_DISJOINT_BIT_KHR"/> <enum bitpos="9" extends="VkImageCreateFlagBits" name="VK_IMAGE_CREATE_DISJOINT_BIT_KHR"/>
<enum bitpos="17" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR" comment="Format can have midpoint rather than cosited chroma samples"/> <enum bitpos="17" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR" comment="Format can have midpoint rather than cosited chroma samples"/>
<enum bitpos="18" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR" comment="Format can be used with linear filtering whilst color conversion is enabled"/> <enum bitpos="18" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR" comment="Format can be used with linear filtering whilst color conversion is enabled"/>
<enum bitpos="19" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR" comment="Format can have different chroma, min and mag filters"/> <enum bitpos="19" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR" comment="Format can have different chroma, min and mag filters"/>
<enum bitpos="20" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"/> <enum bitpos="20" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"/>
<enum bitpos="21" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"/> <enum bitpos="21" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"/>
<enum bitpos="22" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_DISJOINT_BIT_KHR" comment="Format supports disjoint planes"/> <enum bitpos="22" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_DISJOINT_BIT_KHR" comment="Format supports disjoint planes"/>
<enum bitpos="23" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR" comment="Format can have cosited rather than midpoint chroma samples"/> <enum bitpos="23" extends="VkFormatFeatureFlagBits" name="VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR" comment="Format can have cosited rather than midpoint chroma samples"/>
<type name="VkSamplerYcbcrConversionCreateInfoKHR"/> <type name="VkSamplerYcbcrConversionCreateInfoKHR"/>
<type name="VkSamplerYcbcrConversionInfoKHR"/> <type name="VkSamplerYcbcrConversionInfoKHR"/>
<type name="VkBindImagePlaneMemoryInfoKHR"/> <type name="VkBindImagePlaneMemoryInfoKHR"/>
<type name="VkImagePlaneMemoryRequirementsInfoKHR"/> <type name="VkImagePlaneMemoryRequirementsInfoKHR"/>
<type name="VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"/> <type name="VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"/>
<type name="VkSamplerYcbcrConversionImageFormatPropertiesKHR"/> <type name="VkSamplerYcbcrConversionImageFormatPropertiesKHR"/>
<command name="vkCreateSamplerYcbcrConversionKHR"/> <command name="vkCreateSamplerYcbcrConversionKHR"/>
<command name="vkDestroySamplerYcbcrConversionKHR"/> <command name="vkDestroySamplerYcbcrConversionKHR"/>
</require> </require>
</extension> </extension>
<extension name="VK_KHR_bind_memory2" number="158" type="device" author="KHR" contact="Tobias Hector @tobias" supported="vulkan"> <extension name="VK_KHR_bind_memory2" number="158" type="device" author="KHR" contact="Tobias Hector @tobias" supported="vulkan">
@ -7315,5 +7347,53 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enum value="&quot;VK_EXT_extension_170&quot;" name="VK_EXT_EXTENSION_170_EXTENSION_NAME"/> <enum value="&quot;VK_EXT_extension_170&quot;" name="VK_EXT_EXTENSION_170_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="VK_QCOM_extension_171" number="171" author="QCOM" contact="Bill Licea-Kane @billl" supported="disabled">
<require>
<enum value="0" name="VK_QCOM_extension_171_SPEC_VERSION"/>
<enum value="&quot;VK_QCOM_extension_171&quot;" name="VK_QCOM_extension_171_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_QCOM_extension_172" number="172" author="QCOM" contact="Bill Licea-Kane @billl" supported="disabled">
<require>
<enum value="0" name="VK_QCOM_extension_172_SPEC_VERSION"/>
<enum value="&quot;VK_QCOM_extension_172&quot;" name="VK_QCOM_extension_172_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_QCOM_extension_173" number="173" author="QCOM" contact="Bill Licea-Kane @billl" supported="disabled">
<require>
<enum value="0" name="VK_QCOM_extension_173_SPEC_VERSION"/>
<enum value="&quot;VK_QCOM_extension_173&quot;" name="VK_QCOM_extension_173_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_QCOM_extension_174" number="174" author="QCOM" contact="Bill Licea-Kane @billl" supported="disabled">
<require>
<enum value="0" name="VK_QCOM_extension_174_SPEC_VERSION"/>
<enum value="&quot;VK_QCOM_extension_174&quot;" name="VK_QCOM_extension_174_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_extension_175" number="175" author="EXT" contact="Andres Rodriguez @lostgoat" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_175_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_175&quot;" name="VK_KHR_EXTENSION_175_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_extension_176" number="176" author="EXT" contact="Neil Henning @neil_henning" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_176_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_176&quot;" name="VK_KHR_EXTENSION_176_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_extension_177" number="177" author="EXT" contact="Neil Henning @neil_henning" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_177_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_177&quot;" name="VK_KHR_EXTENSION_177_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_EXT_extension_178" number="178" author="EXT" contact="Alexander Galazin @debater" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_178_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_178&quot;" name="VK_KHR_EXTENSION_178_EXTENSION_NAME"/>
</require>
</extension>
</extensions> </extensions>
</registry> </registry>

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file // Version of this file
#define VK_HEADER_VERSION 61 #define VK_HEADER_VERSION 62
#define VK_NULL_HANDLE 0 #define VK_NULL_HANDLE 0
@ -5486,6 +5486,11 @@ typedef struct VkTextureLODGatherFormatPropertiesAMD {
#define VK_AMD_shader_image_load_store_lod 1
#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1
#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod"
#define VK_KHX_multiview 1 #define VK_KHX_multiview 1
#define VK_KHX_MULTIVIEW_SPEC_VERSION 1 #define VK_KHX_MULTIVIEW_SPEC_VERSION 1
#define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview" #define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview"
@ -6647,7 +6652,7 @@ typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
uint32_t attachmentInitialSampleLocationsCount; uint32_t attachmentInitialSampleLocationsCount;
const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations; const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations;
uint32_t postSubpassSampleLocationsCount; uint32_t postSubpassSampleLocationsCount;
const VkSubpassSampleLocationsEXT* pSubpassSampleLocations; const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations;
} VkRenderPassSampleLocationsBeginInfoEXT; } VkRenderPassSampleLocationsBeginInfoEXT;
typedef struct VkPipelineSampleLocationsStateCreateInfoEXT { typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {

6
update_valid_usage_ids.sh Executable file
View File

@ -0,0 +1,6 @@
# This script updates the valid usage IDs in the specification
# AsciiDoctor files. If a valid usage entry already contains
# an ID, it skips that entry. If it does not contain an ID,
# it will generate a new one.
./doc/specs/vulkan/reflow.py -overwrite -noflow -tagvu