summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Leech <oddhack@sonic.net>2017-10-06 21:51:59 -0700
committerJon Leech <oddhack@sonic.net>2017-10-06 21:51:59 -0700
commit6012d138c7d6939e00772f80477569b25abad52b (patch)
tree9ac32663f73daf15bb42b36be8872349fdeb1b2c
parentd893b6a79a73ce6bf268d82d2cdac059db7bd725 (diff)
downloadvulkan-spec-6012d138c7d6939e00772f80477569b25abad52b.zip
vulkan-spec-6012d138c7d6939e00772f80477569b25abad52b.tar.xz
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`
-rw-r--r--.gitignore1
-rw-r--r--ChangeLog.txt63
-rw-r--r--doc/specs/vulkan/Makefile10
-rw-r--r--doc/specs/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt26
-rw-r--r--doc/specs/vulkan/appendices/extensions.txt4
-rw-r--r--doc/specs/vulkan/appendices/glossary.txt7
-rw-r--r--doc/specs/vulkan/appendices/spirvenv.txt9
-rw-r--r--doc/specs/vulkan/chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.txt2
-rw-r--r--doc/specs/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt12
-rw-r--r--doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt145
-rw-r--r--doc/specs/vulkan/chapters/clears.txt22
-rw-r--r--doc/specs/vulkan/chapters/cmdbuffers.txt81
-rw-r--r--doc/specs/vulkan/chapters/copies.txt103
-rw-r--r--doc/specs/vulkan/chapters/descriptorsets.txt89
-rw-r--r--doc/specs/vulkan/chapters/devsandqueues.txt2
-rw-r--r--doc/specs/vulkan/chapters/drawing.txt30
-rw-r--r--doc/specs/vulkan/chapters/framebuffer.txt8
-rw-r--r--doc/specs/vulkan/chapters/fundamentals.txt39
-rw-r--r--doc/specs/vulkan/chapters/fxvertex.txt2
-rw-r--r--doc/specs/vulkan/chapters/memory.txt6
-rw-r--r--doc/specs/vulkan/chapters/pipelines.txt33
-rw-r--r--doc/specs/vulkan/chapters/renderpass.txt74
-rw-r--r--doc/specs/vulkan/chapters/resources.txt258
-rw-r--r--doc/specs/vulkan/chapters/samplers.txt39
-rw-r--r--doc/specs/vulkan/chapters/sparsemem.txt14
-rw-r--r--doc/specs/vulkan/chapters/synchronization.txt182
-rw-r--r--doc/specs/vulkan/chapters/textures.txt35
-rwxr-xr-xdoc/specs/vulkan/reflow.py41
-rw-r--r--doc/specs/vulkan/reflow_count.py2
-rw-r--r--doc/specs/vulkan/style/writing.txt33
-rw-r--r--doc/specs/vulkan/styleguide.txt2
-rw-r--r--src/ext_loader/vulkan_ext.c61
-rw-r--r--src/spec/registry.rnc10
-rw-r--r--src/spec/vk.xml228
-rw-r--r--src/vulkan/vulkan.h9
-rwxr-xr-xupdate_valid_usage_ids.sh6
36 files changed, 1147 insertions, 541 deletions
diff --git a/.gitignore b/.gitignore
index 5e7c51a..9990d37 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,6 +40,7 @@ __pycache__
doc/specs/vulkan/api
doc/specs/vulkan/hostsynctable
doc/specs/vulkan/validity
+doc/specs/vulkan/appendices/meta
# Files generated by extraction from spec source
doc/specs/vulkan/man/PFN*.txt
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 1cbe082..0f0e0f2 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -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:
* Bump API patch number and header version number to 61 for this update.
diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile
index a1caa41..a23df3e 100644
--- a/doc/specs/vulkan/Makefile
+++ b/doc/specs/vulkan/Makefile
@@ -87,25 +87,19 @@ VERBOSE =
# $(EXTENSIONS))
# ADOCOPTS options for asciidoc->HTML5 output
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
SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`)
# 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
# This used to be a dependency in the spec html/pdf targets,
# but that's likely to lead to merge conflicts. Just regenerate
# when pushing a new spec for review to the sandbox.
# The dependency on HEAD is per the suggestion in
# 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"`)
-endif
ATTRIBOPTS = -a revnumber="$(SPECREVISION)" \
-a revdate="$(SPECDATE)" \
diff --git a/doc/specs/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt b/doc/specs/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt
new file mode 100644
index 0000000..77f7d35
--- /dev/null
+++ b/doc/specs/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt
@@ -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
diff --git a/doc/specs/vulkan/appendices/extensions.txt b/doc/specs/vulkan/appendices/extensions.txt
index 216544b..42cea16 100644
--- a/doc/specs/vulkan/appendices/extensions.txt
+++ b/doc/specs/vulkan/appendices/extensions.txt
@@ -375,6 +375,10 @@ ifdef::VK_AMD_shader_fragment_mask[]
include::VK_AMD_shader_fragment_mask.txt[]
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[]
include::VK_AMD_shader_trinary_minmax.txt[]
endif::VK_AMD_shader_trinary_minmax[]
diff --git a/doc/specs/vulkan/appendices/glossary.txt b/doc/specs/vulkan/appendices/glossary.txt
index 5d75660..07f9dd2 100644
--- a/doc/specs/vulkan/appendices/glossary.txt
+++ b/doc/specs/vulkan/appendices/glossary.txt
@@ -977,6 +977,13 @@ Resolve Attachment::
multisample resolve operation from the corresponding color attachment at
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::
A descriptor type that represents an image view, and supports filtered
(sampled) and unfiltered read-only acccess in a shader.
diff --git a/doc/specs/vulkan/appendices/spirvenv.txt b/doc/specs/vulkan/appendices/spirvenv.txt
index 4071823..d0a1b3b 100644
--- a/doc/specs/vulkan/appendices/spirvenv.txt
+++ b/doc/specs/vulkan/appendices/spirvenv.txt
@@ -106,6 +106,10 @@ ifdef::VK_KHX_device_group[]
[[spirvenv-capabilities-table-devicegroup]]
| code:DeviceGroup | <<VK_KHX_device_group,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[]
[[spirvenv-capabilities-table-imagegatherbiaslodamd]]
| 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.
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[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the +SPV_AMD_shader_trinary_minmax+ SPIR-V extension.
diff --git a/doc/specs/vulkan/chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.txt b/doc/specs/vulkan/chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.txt
index 3191fa3..d819657 100644
--- a/doc/specs/vulkan/chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.txt
+++ b/doc/specs/vulkan/chapters/VK_IMG_filter_cubic/filter_cubic_texel_selection.txt
@@ -8,7 +8,7 @@ as well as weights [eq]#{alpha}# and [eq]#{beta}#.
++++++++++++++++++++++++
\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]
-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]
\beta & = \mathbin{frac} \left ( v - \frac{1}{2} \right )
diff --git a/doc/specs/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt b/doc/specs/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
index 66c00ae..46eff90 100644
--- a/doc/specs/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
+++ b/doc/specs/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
@@ -1,5 +1,7 @@
-If a swapchain associated with a display surface is destroyed and there are
-no valid descendants of that swapchain, the implementation must: either
-revert any display resources modified by presenting images with the
-swapchain to their state prior to the first present performed with the
-swapchain and its ancestors, or leave such resources in their current state.
+When a swapchain associated with a display surface is destroyed, if the
+image most recently presented to the display surface is from the swapchain
+being destroyed, then either any display resources modified by presenting
+images from any swapchain associated with the display surface must: be
+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.
diff --git a/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt b/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt
index 5e44376..a06e9cf 100644
--- a/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt
+++ b/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt
@@ -111,7 +111,8 @@ include::../../api/structs/VkSwapchainCreateInfoKHR.txt[]
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is a bitmask of elink:VkSwapchainCreateFlagBitsKHR
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
application needs.
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.
====
- * pname:oldSwapchain, if not dlink:VK_NULL_HANDLE, specifies the swapchain
- that will be replaced by the new swapchain being created.
- The new swapchain will be a descendant of pname:oldSwapchain.
- Further, any descendants of the new swapchain will also be descendants
- of pname:oldSwapchain.
+ * pname:oldSwapchain, if not dlink:VK_NULL_HANDLE, specifies an existing
+ non-retired swapchain that is associated with surface.
+
+ Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that
+ is not dlink:VK_NULL_HANDLE, pname:oldSwapchain is retired, even if
+ creation of the new swapchain fails.
+ The new swapchain is created in the non-retired state whether or not
+ pname:oldSwapchain is dlink:VK_NULL_HANDLE.
+
Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that
- is not dlink:VK_NULL_HANDLE, any images not acquired by the application
- may: be freed by the implementation, which may: occur even if creation
- of the new swapchain fails.
- The application must: destroy the old swapchain to free all memory
- associated with the old swapchain.
- The application must: wait for the completion of any outstanding
- rendering to images it currently has acquired at the time the swapchain
- is destroyed.
- The application can: continue to present any images it acquired and has
- not yet presented using the old swapchain, as long as it has not entered
- a state that causes it to return ename:VK_ERROR_OUT_OF_DATE_KHR.
- However, the application cannot: acquire any more images from the old
- swapchain regardless of whether or not creation of the new swapchain
- succeeds.
+ is not dlink:VK_NULL_HANDLE, any images from pname:oldSwapchain that are
+ not acquired by the application may: be freed by the implementation,
+ which may: occur even if creation of the new swapchain fails.
+ The application must: destroy sname:oldSwapchain to free all memory
+ associated with sname:oldSwapchain.
+[NOTE]
+.Note
+====
+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[]
- The application can: continue to use a shared presentable image obtained
- from pname:oldSwapchain until a presentable image is acquired from the
- new swapchain, as long as it has not entered a state that causes it to
- return ename:VK_ERROR_OUT_OF_DATE_KHR.
+The application can: continue to use a shared presentable image obtained
+from pname:oldSwapchain until a presentable image is acquired from the new
+swapchain, as long as it has not entered a state that causes it to return
+ename:VK_ERROR_OUT_OF_DATE_KHR.
endif::VK_KHR_shared_presentable_image[]
+====
.Valid Usage
****
@@ -308,6 +320,9 @@ ifdef::VK_KHX_device_group[]
to 1, pname:flags must: not contain
ename:VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX
endif::VK_KHX_device_group[]
+ * [[VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01674]]
+ pname:oldSwapchain must: not be in the retired state
+
****
include::../../validity/structs/VkSwapchainCreateInfoKHR.txt[]
@@ -393,12 +408,17 @@ endif::VK_KHX_device_group[]
| pname:initialLayout | ename:VK_IMAGE_LAYOUT_UNDEFINED
|====
-The sname:VkSurfaceKHR associated with a swapchain must: not be destroyed
-until after the swapchain is destroyed.
+The pname:surface must: not be destroyed until after the swapchain is
+destroyed.
-The native window referred to by pname:surface must: not already be
-associated with a swapchain other than pname:oldSwapchain, or with a
-non-Vulkan graphics API surface.
+If pname:oldSwapchain is not VK_NULL_HANDLE then pname:surface must: be
+associated with pname:oldSwapchain.
+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
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
<<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
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
-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,
the memory for that image may: not be freed until the window is destroyed,
or another swapchain is created for the window.
@@ -549,7 +571,8 @@ that image, call:
include::../../api/protos/vkAcquireNextImageKHR.txt[]
* 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
no image is available.
* pname:semaphore is dlink:VK_NULL_HANDLE or a semaphore to signal.
@@ -561,9 +584,7 @@ include::../../api/protos/vkAcquireNextImageKHR.txt[]
.Valid Usage
****
* [[VUID-vkAcquireNextImageKHR-swapchain-01285]]
- pname:swapchain must: not have been replaced by being passed as the
- sname:VkSwapchainCreateInfoKHR::pname:oldSwapchain value to
- fname:vkCreateSwapchainKHR
+ pname:swapchain must: not be in the retired state
* [[VUID-vkAcquireNextImageKHR-semaphore-01286]]
If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* [[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
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
-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.
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
the platform is able to scale the presented images to the new size to
produce valid surface updates.
-It is up to applications to decide whether they prefer to continue using the
-current swapchain indefinitely or temporarily in this state, or to re-create
-the swapchain to better match the platform surface properties.
+It is up to the application to decide whether it prefers to continue using
+the current swapchain indefinitely or temporarily in this state, or to
+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
@@ -836,7 +866,8 @@ include::../../api/structs/VkAcquireNextImageInfoKHX.txt[]
* pname:sType is the type of this 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
no image is available.
* 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
****
+ * [[VUID-VkAcquireNextImageInfoKHX-swapchain-01675]]
+ pname:swapchain must: not be in the retired state
* [[VUID-VkAcquireNextImageInfoKHX-semaphore-01288]]
If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* [[VUID-VkAcquireNextImageInfoKHX-fence-01289]]
@@ -897,9 +930,9 @@ include::../../api/protos/vkQueuePresentKHR.txt[]
.Valid Usage
****
* [[VUID-vkQueuePresentKHR-pSwapchains-01292]]
- Any given element of pname:pSwapchains member of pname:pPresentInfo
- must: be a swapchain that is created for a surface for which
- presentation is supported from pname:queue as determined using a call to
+ Each element of pname:pSwapchains member of pname:pPresentInfo must: be
+ a swapchain that is created for a surface for which presentation is
+ supported from pname:queue as determined using a call to
fname:vkGetPhysicalDeviceSurfaceSupportKHR
ifdef::VK_KHR_display_swapchain[]
* [[VUID-vkQueuePresentKHR-pSwapchains-01293]]
@@ -966,19 +999,19 @@ include::../../api/structs/VkPresentInfoKHR.txt[]
****
ifndef::VK_KHR_shared_presentable_image[]
* [[VUID-VkPresentInfoKHR-pImageIndices-01296]]
- Any given element of pname:pImageIndices must: be the index of a
- presentable image acquired from the swapchain specified by the
- corresponding element of the pname:pSwapchains array, and the presented
- image subresource must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
- layout at the time the operation is executed on a sname:VkDevice
+ Each element of pname:pImageIndices must: be the index of a presentable
+ image acquired from the swapchain specified by the corresponding element
+ of the pname:pSwapchains array, and the presented image subresource
+ must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout at the time
+ the operation is executed on a sname:VkDevice
endif::VK_KHR_shared_presentable_image[]
ifdef::VK_KHR_shared_presentable_image[]
* [[VUID-VkPresentInfoKHR-pImageIndices-01430]]
- Any given element of pname:pImageIndices must: be the index of a
- presentable image acquired from the swapchain specified by the
- corresponding element of the pname:pSwapchains array, and the presented
- image subresource must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
- or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the
+ Each element of pname:pImageIndices must: be the index of a presentable
+ image acquired from the swapchain specified by the corresponding element
+ of the pname:pSwapchains array, and the presented image subresource
+ must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR or
+ ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the
operation is executed on a sname:VkDevice
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
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[]
include::../VK_EXT_hdr_metadata.txt[]
endif::VK_EXT_hdr_metadata[]
diff --git a/doc/specs/vulkan/chapters/clears.txt b/doc/specs/vulkan/chapters/clears.txt
index 38bf9f8..c778810 100644
--- a/doc/specs/vulkan/chapters/clears.txt
+++ b/doc/specs/vulkan/chapters/clears.txt
@@ -61,7 +61,8 @@ endif::VK_KHR_maintenance1[]
pname:image must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
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>>
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdClearColorImage-image-00003]]
@@ -238,17 +239,16 @@ attachments and the command parameters.
.Valid Usage
****
* [[VUID-vkCmdClearAttachments-aspectMask-00015]]
- If the pname:aspectMask member of any given element of
- pname:pAttachments contains ename:VK_IMAGE_ASPECT_COLOR_BIT, the
- pname:colorAttachment member of those elements must: refer to a valid
- color attachment in the current subpass
+ If the pname:aspectMask member of any element of pname:pAttachments
+ contains ename:VK_IMAGE_ASPECT_COLOR_BIT, the pname:colorAttachment
+ member of that element must: refer to a valid color attachment in the
+ current subpass
* [[VUID-vkCmdClearAttachments-pRects-00016]]
- The rectangular region specified by a given element of pname:pRects
- must: be contained within the render area of the current render pass
- instance
+ The rectangular region specified by each element of pname:pRects must:
+ be contained within the render area of the current render pass instance
* [[VUID-vkCmdClearAttachments-pRects-00017]]
- The layers specified by a given element of pname:pRects must: be
- contained within every attachment that pname:pAttachments refers to
+ The layers specified by each element of pname:pRects must: be contained
+ within every attachment that pname:pAttachments refers to
ifdef::VK_KHX_multiview[]
* [[VUID-vkCmdClearAttachments-baseArrayLayer-00018]]
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
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
amounts of data, and is why it is limited to only 65536 bytes.
diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt
index 94e4fcc..2968842 100644
--- a/doc/specs/vulkan/chapters/cmdbuffers.txt
+++ b/doc/specs/vulkan/chapters/cmdbuffers.txt
@@ -864,9 +864,9 @@ See <<devsandqueues-lost-device,Lost Device>>.
<<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>.
* [[VUID-vkQueueSubmit-pSignalSemaphores-00067]]
- Any given element of the pname:pSignalSemaphores member of any element
- of pname:pSubmits must: be unsignaled when the semaphore signal
- operation it defines is executed on the device
+ Each element of the pname:pSignalSemaphores member of any element of
+ pname:pSubmits must: be unsignaled when the semaphore signal operation
+ it defines is executed on the device
* [[VUID-vkQueueSubmit-pWaitSemaphores-00068]]
When a semaphore unsignal operation defined by any element of the
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>>
previously submitted for execution.
* [[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
executable state>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00071]]
- If any given element of the pname:pCommandBuffers member of any element
- of pname:pSubmits was not recorded with the
+ 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>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00072]]
Any <<commandbuffers-secondary, secondary command buffers recorded>>
- into any given element of the pname:pCommandBuffers member of any
- element of pname:pSubmits must: be in the <<commandbuffers-lifecycle,
- pending or executable state>>.
+ into any element of the pname:pCommandBuffers member of any element of
+ pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
+ executable state>>.
* [[VUID-vkQueueSubmit-pCommandBuffers-00073]]
If any <<commandbuffers-secondary, secondary command buffers recorded>>
- into any given element of the pname:pCommandBuffers member of any
- element of pname:pSubmits was not recorded with the
+ into 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>>.
* [[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
was created for the same queue family pname:queue belongs to.
****
@@ -947,20 +947,19 @@ otherwise execute out of order.
.Valid Usage
****
* [[VUID-VkSubmitInfo-pCommandBuffers-00075]]
- Any given element of pname:pCommandBuffers must: not have been allocated
- with ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
+ Each element of pname:pCommandBuffers must: not have been allocated with
+ ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00076]]
If the <<features-features-geometryShader,geometry shaders>> feature is
- not enabled, any given element of pname:pWaitDstStageMask must: not
- contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+ not enabled, each element of pname:pWaitDstStageMask must: not contain
+ ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00077]]
If the <<features-features-tessellationShader,tessellation shaders>>
- feature is not enabled, any given element of pname:pWaitDstStageMask
- must: not contain
- ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+ feature is not enabled, each element of pname:pWaitDstStageMask must:
+ not contain ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* [[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.
****
@@ -1197,10 +1196,10 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
pname:commandBuffer must: have been allocated with a pname:level of
ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00088]]
- Any given element of pname:pCommandBuffers must: have been allocated
- with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
+ Each element of pname:pCommandBuffers must: have been allocated with a
+ pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
* [[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>>.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00090]]
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
buffer must: not be in the <<commandbuffers-lifecycle, pending state>>
* [[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
in the <<commandbuffers-lifecycle, pending state>>.
* [[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
have already been recorded to pname:commandBuffer.
* [[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
appear more than once in pname:pCommandBuffers.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00094]]
- Any given element of pname:pCommandBuffers must: have been allocated
- from a sname:VkCommandPool that was created for the same queue family as
- the sname:VkCommandPool from which pname:commandBuffer was allocated
+ Each element of pname:pCommandBuffers must: have been allocated from a
+ sname:VkCommandPool that was created for the same queue family as the
+ sname:VkCommandPool from which pname:commandBuffer was allocated
* [[VUID-vkCmdExecuteCommands-contents-00095]]
If fname:vkCmdExecuteCommands is being called within a render pass
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
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00096]]
If fname:vkCmdExecuteCommands is being called within a render pass
- instance, any given element of pname:pCommandBuffers must: have been
- recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+ instance, each element of pname:pCommandBuffers must: have been recorded
+ with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00097]]
If fname:vkCmdExecuteCommands is being called within a render pass
- instance, any given element of pname:pCommandBuffers must: have been
- recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to
- the index of the subpass which the given command buffer will be executed
- in
+ instance, each element of pname:pCommandBuffers must: have been recorded
+ with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the
+ index of the subpass which the given command buffer will be executed in
* [[VUID-vkCmdExecuteCommands-pInheritanceInfo-00098]]
If fname:vkCmdExecuteCommands is being called within a render pass
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.
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00099]]
If fname:vkCmdExecuteCommands is being called within a render pass
- instance, and any given element of pname:pCommandBuffers was recorded
- with sname:VkCommandBufferInheritanceInfo::pname:framebuffer not equal
- to dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the
+ instance, and any element of pname:pCommandBuffers was recorded with
+ sname:VkCommandBufferInheritanceInfo::pname:framebuffer not equal to
+ dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the
sname:VkFramebuffer used in the current render pass instance
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00100]]
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
* [[VUID-vkCmdExecuteCommands-commandBuffer-00101]]
If the <<features-features-inheritedQueries,inherited queries>> feature
@@ -1278,9 +1276,8 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having
all bits set that are set in the sname:VkQueryPool the query uses
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00105]]
- Any given element of pname:pCommandBuffers must: not begin any query
- types that are <<queries-operation-active,active>> in
- pname:commandBuffer
+ Each element of pname:pCommandBuffers must: not begin any query types
+ that are <<queries-operation-active,active>> in pname:commandBuffer
****
include::../validity/protos/vkCmdExecuteCommands.txt[]
diff --git a/doc/specs/vulkan/chapters/copies.txt b/doc/specs/vulkan/chapters/copies.txt
index e2b8438..f4cb2b5 100644
--- a/doc/specs/vulkan/chapters/copies.txt
+++ b/doc/specs/vulkan/chapters/copies.txt
@@ -100,19 +100,19 @@ memory.
.Valid Usage
****
* [[VUID-vkCmdCopyBuffer-size-00112]]
- The pname:size member of a given element of pname:pRegions must: be
- greater than `0`
+ The pname:size member of each element of pname:pRegions must: be greater
+ than `0`
* [[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
* [[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
* [[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
* [[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
* [[VUID-vkCmdCopyBuffer-pRegions-00117]]
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
****
* [[VUID-vkCmdCopyImage-pRegions-00122]]
- The source region specified by a given element of pname:pRegions must:
- be a region that is contained within pname:srcImage
+ The source region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:srcImage
ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:srcImage's elink:VkFormat is not a
<<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
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImage-pRegions-00123]]
- The destination region specified by a given element of pname:pRegions
- must: be a region that is contained within pname:dstImage
+ The destination region specified by each element of pname:pRegions must:
+ be a region that is contained within pname:dstImage
ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:dstImage's elink:VkFormat is not a
<<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
endif::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
sname:VkDeviceMemory object
endif::VK_KHR_sampler_ycbcr_conversion[]
@@ -382,7 +383,8 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
contiguously to a single sname:VkDeviceMemory object
endif::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
contiguously to a single sname:VkDeviceMemory object
endif::VK_KHR_sampler_ycbcr_conversion[]
@@ -408,18 +410,21 @@ ifndef::VK_KHR_sampler_ycbcr_conversion[]
compatible, as defined <<copies-images-format-compatibility, below>>
endif::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
<<features-formats-requiring-sampler-ycbcr-conversion,_multi-planar
format_>>, the elink:VkFormat of each of pname:srcImage and
pname:dstImage must: be compatible, as defined
<<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
image>>, the elink:VkFormat of the image and plane must: be compatible
according to <<features-formats-compatible-planes,the description of
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
format>>, the pname:aspectMask of the pname:srcSubresource and/or
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
endif::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
<<features-formats-requiring-sampler-ycbcr-conversion, multi-planar
image format>> then the pname:aspectMask member of pname:srcSubresource
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
the pname:srcSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
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>>
then the pname:srcSubresource pname:aspectMask must: be
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
- * [[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
the pname:dstSubresource pname:aspectMask must: be
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
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>>
then the pname:dstSubresource pname:aspectMask must: be
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
- * [[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
format>> and the pname:dstImage does not have a multi-planar image
format, the pname:dstSubresource pname:aspectMask must: be
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
format>> and the pname:srcImage does not have a multi-planar image
format, the pname:srcSubresource pname:aspectMask must: be
@@ -760,11 +772,11 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage
****
* [[VUID-vkCmdCopyBufferToImage-pRegions-00171]]
- The buffer region specified by a given element of pname:pRegions must:
- be a region that is contained within pname:srcBuffer
+ The buffer region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:srcBuffer
* [[VUID-vkCmdCopyBufferToImage-pRegions-00172]]
- The image region specified by a given element of pname:pRegions must: be
- a region that is contained within pname:dstImage
+ The image region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:dstImage
ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:dstImage's elink:VkFormat is not a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@@ -863,8 +875,8 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
.Valid Usage
****
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00182]]
- The image region specified by a given element of pname:pRegions must: be
- a region that is contained within pname:srcImage
+ The image region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:srcImage
ifdef::VK_KHR_sampler_ycbcr_conversion[]
if the pname:srcImage's elink:VkFormat is not a
<<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
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00183]]
- The buffer region specified by a given element of pname:pRegions must:
- be a region that is contained within pname:dstBuffer
+ The buffer region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:dstBuffer
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00184]]
The union of all source regions, and the union of all destination
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
endif::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
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
format>>,cthen pname:bufferOffset must: be a multiple of the format's
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
format>>, then pname:bufferOffset must: be a multiple of the element
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
aspects present in the calling command's sname:VkImage parameter
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
format>>, then the pname:aspectMask member of pname:imageSubresource
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
****
* [[VUID-vkCmdBlitImage-pRegions-00215]]
- The source region specified by a given element of pname:pRegions must:
- be a region that is contained within pname:srcImage
+ The source region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:srcImage
* [[VUID-vkCmdBlitImage-pRegions-00216]]
- The destination region specified by a given element of pname:pRegions
- must: be a region that is contained within pname:dstImage
+ The destination region specified by each element of pname:pRegions must:
+ be a region that is contained within pname:dstImage
* [[VUID-vkCmdBlitImage-pRegions-00217]]
The union of all destination regions, specified by the elements of
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
fname:vkGetPhysicalDeviceFormatProperties
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>>
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdBlitImage-srcImage-00219]]
@@ -1375,7 +1391,8 @@ endif::VK_KHR_shared_presentable_image[]
optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties
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>>
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkCmdBlitImage-dstImage-00224]]
@@ -1575,11 +1592,11 @@ pname:layerCount layers are resolved to the destination image.
.Valid Usage
****
* [[VUID-vkCmdResolveImage-pRegions-00253]]
- The source region specified by a given element of pname:pRegions must:
- be a region that is contained within pname:srcImage
+ The source region specified by each element of pname:pRegions must: be a
+ region that is contained within pname:srcImage
* [[VUID-vkCmdResolveImage-pRegions-00254]]
- The destination region specified by a given element of pname:pRegions
- must: be a region that is contained within pname:dstImage
+ The destination region specified by each element of pname:pRegions must:
+ be a region that is contained within pname:dstImage
* [[VUID-vkCmdResolveImage-pRegions-00255]]
The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap
diff --git a/doc/specs/vulkan/chapters/descriptorsets.txt b/doc/specs/vulkan/chapters/descriptorsets.txt
index d95fbc9..6e40b26 100644
--- a/doc/specs/vulkan/chapters/descriptorsets.txt
+++ b/doc/specs/vulkan/chapters/descriptorsets.txt
@@ -1563,23 +1563,22 @@ include::../api/structs/VkDescriptorSetAllocateInfo.txt[]
* pname:pSetLayouts is an array of descriptor set layouts, with each
member specifying how the corresponding descriptor set is allocated.
-ifndef::VK_KHR_maintenance1[]
-
.Valid Usage
****
+ifndef::VK_KHR_maintenance1[]
* [[VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306]]
pname:descriptorSetCount must: not be greater than the number of sets
that are currently available for allocation in pname:descriptorPool
* [[VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307]]
pname:descriptorPool must: have enough free descriptor capacity
remaining to allocate the descriptor sets of the specified layouts
+endif::VK_KHR_maintenance1[]
ifdef::VK_KHR_push_descriptor[]
* [[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
endif::VK_KHR_push_descriptor[]
****
-endif::VK_KHR_maintenance1[]
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
descriptors between sets.
-If the pname:dstSet member of any given element of pname:pDescriptorWrites
-or pname:pDescriptorCopies is bound, accessed, or modified by any command
-that was recorded to a command buffer which is currently in the
+If the pname:dstSet member of any element of pname:pDescriptorWrites or
+pname:pDescriptorCopies is bound, accessed, or modified by any command that
+was recorded to a command buffer which is currently in the
<<commandbuffers-lifecycle, recording or executable state>>, that command
buffer becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* [[VUID-vkUpdateDescriptorSets-dstSet-00314]]
- The pname:dstSet member of any given element of pname:pDescriptorWrites
- or pname:pDescriptorCopies must: not be used by any command that was
+ The pname:dstSet member of each element of pname:pDescriptorWrites or
+ pname:pDescriptorCopies must: not be used by any command that was
recorded to a command buffer which is in the <<commandbuffers-lifecycle,
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
not allocated with a layout that included immutable samplers for
pname:dstBinding with pname:descriptorType, the pname:sampler member of
- any given element of pname:pImageInfo must: be a valid sname:VkSampler
- object
+ each element of pname:pImageInfo must: be a valid sname:VkSampler object
* [[VUID-VkWriteDescriptorSet-descriptorType-00326]]
If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView and
- pname:imageLayout members of any given element of pname:pImageInfo must:
- be a valid sname:VkImageView and elink:VkImageLayout, respectively
+ pname:imageLayout members of each element of pname:pImageInfo must: be a
+ valid sname:VkImageView and elink:VkImageLayout, respectively
* [[VUID-VkWriteDescriptorSet-descriptorType-01402]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, for
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]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
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
* [[VUID-VkWriteDescriptorSet-descriptorType-00328]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
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
* [[VUID-VkWriteDescriptorSet-descriptorType-00329]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or
- ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
- of any given element of pname:pBufferInfo that is non-sparse must: be
- bound completely and contiguously to a single sname:VkDeviceMemory
- object
+ ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, and the pname:buffer
+ member of any element of pname:pBufferInfo is the handle of a non-sparse
+ buffer, then that buffer must: be bound completely and contiguously to a
+ single sname:VkDeviceMemory object
* [[VUID-VkWriteDescriptorSet-descriptorType-00330]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
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
* [[VUID-VkWriteDescriptorSet-descriptorType-00331]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
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
* [[VUID-VkWriteDescriptorSet-descriptorType-00332]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
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
sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange
* [[VUID-VkWriteDescriptorSet-descriptorType-00333]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
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
sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange
* [[VUID-VkWriteDescriptorSet-descriptorType-00334]]
If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that
- any given element of pname:pTexelBufferView was created from must: have
- been created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set
+ each element of pname:pTexelBufferView was created from must: have been
+ created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00335]]
If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that
- any given element of pname:pTexelBufferView was created from must: have
- been created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set
+ each element of pname:pTexelBufferView was created from must: have been
+ created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00336]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or
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
* [[VUID-VkWriteDescriptorSet-descriptorType-00337]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageView
- member of any given element of pname:pImageInfo must: have been created
- with ename:VK_IMAGE_USAGE_SAMPLED_BIT set
+ member of each element of pname:pImageInfo must: have been created with
+ ename:VK_IMAGE_USAGE_SAMPLED_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-01403]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
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_DEPTH_STENCIL_READ_ONLY_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-VkWriteDescriptorSet-descriptorType-00338]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
- the pname:imageView member of any given element of pname:pImageInfo
- must: have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
- set
+ the pname:imageView member of each element of pname:pImageInfo must:
+ have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
* [[VUID-VkWriteDescriptorSet-descriptorType-00339]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
- pname:imageView member of any given element of pname:pImageInfo must:
- have been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
+ pname:imageView member of each element of pname:pImageInfo must: have
+ been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
****
include::../validity/structs/VkWriteDescriptorSet.txt[]
@@ -2013,7 +2010,8 @@ endif::VK_KHR_maintenance1[]
subresource accessible from pname:imageView at the time this descriptor
is accessed
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>>:
** The pname:format of the pname:imageView must: be the same as the
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
the sname:VkSamplerYcbcrConversionInfoKHR which is in the pname:pNext
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
elink:VkFormat of the image is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar
@@ -2442,7 +2441,7 @@ const VkDescriptorUpdateTemplateCreateInfoKHR createInfo =
};
VkDescriptorUpdateTemplateKHR myDescriptorUpdateTemplate;
-myResult = vkCreatePipelineLayout(
+myResult = vkCreateDescriptorUpdateTemplateKHR(
myDevice,
&createInfo,
NULL,
@@ -2548,10 +2547,10 @@ descriptor set.
.Valid Usage
****
* [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358]]
- Any given element of pname:pDescriptorSets must: have been allocated
- with a sname:VkDescriptorSetLayout that matches (is the same as, or
- identically defined as) the sname:VkDescriptorSetLayout at set _n_ in
- pname:layout, where _n_ is the sum of pname:firstSet and the index into
+ Each element of pname:pDescriptorSets must: have been allocated with a
+ sname:VkDescriptorSetLayout that matches (is the same as, or identically
+ defined as) the sname:VkDescriptorSetLayout at set _n_ in pname:layout,
+ where _n_ is the sum of pname:firstSet and the index into
pname:pDescriptorSets
* [[VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359]]
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
parent sname:VkCommandPool's queue family
* [[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
****
@@ -2749,7 +2748,7 @@ const VkDescriptorUpdateTemplateCreateInfoKHR createInfo =
};
VkDescriptorUpdateTemplateKHR myDescriptorUpdateTemplate;
-myResult = vkCreatePipelineLayout(
+myResult = vkCreateDescriptorUpdateTemplateKHR(
myDevice,
&createInfo,
NULL,
diff --git a/doc/specs/vulkan/chapters/devsandqueues.txt b/doc/specs/vulkan/chapters/devsandqueues.txt
index 6cdc98f..2de6c42 100644
--- a/doc/specs/vulkan/chapters/devsandqueues.txt
+++ b/doc/specs/vulkan/chapters/devsandqueues.txt
@@ -714,7 +714,7 @@ include::../api/structs/VkDeviceCreateInfo.txt[]
.Valid Usage
****
* [[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
ifdef::VK_KHR_get_physical_device_properties2[]
* [[VUID-VkDeviceCreateInfo-pNext-00373]]
diff --git a/doc/specs/vulkan/chapters/drawing.txt b/doc/specs/vulkan/chapters/drawing.txt
index a9aa337..31afbff 100644
--- a/doc/specs/vulkan/chapters/drawing.txt
+++ b/doc/specs/vulkan/chapters/drawing.txt
@@ -873,6 +873,9 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
* [[VUID-vkCmdDrawIndirect-buffer-00474]]
If pname:buffer is non-sparse then it must: be bound completely and
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]]
pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirect-drawCount-00476]]
@@ -1091,6 +1094,18 @@ located at pname:countBufferOffset and use this as the draw count.
.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]]
pname:offset must: be a multiple of `4`
* [[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]]
If pname:buffer is non-sparse then it must: be bound completely and
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]]
pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00528]]
@@ -1493,6 +1511,18 @@ located at pname:countBufferOffset and use this as the draw count.
.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]]
pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBufferOffset-00556]]
diff --git a/doc/specs/vulkan/chapters/framebuffer.txt b/doc/specs/vulkan/chapters/framebuffer.txt
index 67eff59..78c80bc 100644
--- a/doc/specs/vulkan/chapters/framebuffer.txt
+++ b/doc/specs/vulkan/chapters/framebuffer.txt
@@ -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
hence are linearized prior to their use in blending.
Each R, G, and B component is converted from nonlinear to linear as
-described in the "`sRGB EOTF`" section of the
-<<data-format,Khronos Data Format Specification>>.
+described in the "`sRGB EOTF`" section of the <<data-format,Khronos Data
+Format Specification>>.
If the format is not sRGB, no linearization is performed.
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
representation before being written to the framebuffer attachment as
-described in the "`sRGB EOTF^&#160;-1^`" section of the Khronos Data
-Format Specification.
+described in the "`sRGB EOTF^&#160;-1^`" section of the Khronos Data Format
+Specification.
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.
diff --git a/doc/specs/vulkan/chapters/fundamentals.txt b/doc/specs/vulkan/chapters/fundamentals.txt
index 9dcac21..dddc4a3 100644
--- a/doc/specs/vulkan/chapters/fundamentals.txt
+++ b/doc/specs/vulkan/chapters/fundamentals.txt
@@ -436,8 +436,8 @@ endif::VK_KHR_external_memory_capabilities,VK_KHR_external_semaphore_capabilitie
[[fundamentals-abi]]
== Application Binary Interface
-The mechanism by which Vulkan is made available to applications is platform- or
-implementation- defined.
+The mechanism by which Vulkan is made available to applications is platform-
+or implementation- defined.
On many platforms the C interface described in this Specification is
provided by a shared library.
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
Interface (ABI) of the standard C compiler for the platform, or provide
-customized API headers that cause application code to use the implementation's
-non-default ABI.
-An ABI in this context means the the size, alignment, and
-layout of C data types; the procedure calling convention; and the naming
-convention for shared library symbols corresponding to C functions.
+customized API headers that cause application code to use the
+implementation's non-default ABI.
+An ABI in this context means the the size, alignment, and layout of C data
+types; the procedure calling convention; and the naming convention for
+shared library symbols corresponding to C functions.
Customizing the calling convention for a platform is usually accomplished by
-defining
-<<boilerplate-platform-specific-calling-conventions,calling convention macros>>
-appropriately in +vk_platform.h+.
+defining <<boilerplate-platform-specific-calling-conventions,calling
+convention macros>> appropriately in +vk_platform.h+.
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
for use by the implementation.
-Applications which use Vulkan must: not provide definitions of these symbols.
-This allows the Vulkan shared library to be updated with additional symbols for
-new API versions or extensions without causing symbol conflicts with existing
-applications.
+Applications which use Vulkan must: not provide definitions of these
+symbols.
+This allows the Vulkan shared library to be updated with additional symbols
+for new API versions or extensions without causing symbol conflicts with
+existing applications.
Shared library implementations should: provide library symbols for commands
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
take advantage of platform-specific conventions for SDKs, ABIs, library
-versioning mechanisms, etc. while still minimizing the code changes necessary
-to port applications or libraries between platforms.
-Platform vendors, or providers of the _de facto_ standard Vulkan shared 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.
+versioning mechanisms, etc.
+while still minimizing the code changes necessary to port applications or
+libraries between platforms.
+Platform vendors, or providers of the _de facto_ standard Vulkan shared
+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.
====
diff --git a/doc/specs/vulkan/chapters/fxvertex.txt b/doc/specs/vulkan/chapters/fxvertex.txt
index 550320a..010220e 100644
--- a/doc/specs/vulkan/chapters/fxvertex.txt
+++ b/doc/specs/vulkan/chapters/fxvertex.txt
@@ -301,7 +301,7 @@ include::../api/structs/VkPipelineVertexInputStateCreateInfo.txt[]
pname:vertexAttributeDescriptionCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
* [[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
sname:VkVertexInputBindingDescription must: exist in
pname:pVertexBindingDescriptions with the same value of pname:binding
diff --git a/doc/specs/vulkan/chapters/memory.txt b/doc/specs/vulkan/chapters/memory.txt
index 6ff3169..61a724e 100644
--- a/doc/specs/vulkan/chapters/memory.txt
+++ b/doc/specs/vulkan/chapters/memory.txt
@@ -1738,7 +1738,7 @@ to maintaining memory access ordering.
.Valid Usage
****
* [[VUID-vkMapMemory-memory-00678]]
- pname:memory must: not currently be mapped
+ pname:memory must: not be currently mapped
* [[VUID-vkMapMemory-offset-00679]]
pname:offset must: be less than the size of pname:memory
* [[VUID-vkMapMemory-size-00680]]
@@ -1865,7 +1865,7 @@ include::../api/structs/VkMappedMemoryRange.txt[]
.Valid Usage
****
* [[VUID-VkMappedMemoryRange-memory-00684]]
- pname:memory must: currently be mapped
+ pname:memory must: be currently mapped
* [[VUID-VkMappedMemoryRange-size-00685]]
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
@@ -1906,7 +1906,7 @@ include::../api/protos/vkUnmapMemory.txt[]
.Valid Usage
****
* [[VUID-vkUnmapMemory-memory-00689]]
- pname:memory must: currently be mapped
+ pname:memory must: be currently mapped
****
include::../validity/protos/vkUnmapMemory.txt[]
diff --git a/doc/specs/vulkan/chapters/pipelines.txt b/doc/specs/vulkan/chapters/pipelines.txt
index f09e8e1..4dc2e3f 100644
--- a/doc/specs/vulkan/chapters/pipelines.txt
+++ b/doc/specs/vulkan/chapters/pipelines.txt
@@ -141,15 +141,15 @@ endif::editing-notes[]
.Valid Usage
****
* [[VUID-vkCreateComputePipelines-flags-00695]]
- If the pname:flags member of any given element of pname:pCreateInfos
- contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
+ If the pname:flags member of any element of pname:pCreateInfos contains
+ the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
pname:basePipelineIndex member of that same element is not `-1`,
pname:basePipelineIndex must: be less than the index into
pname:pCreateInfos that corresponds to that element
* [[VUID-vkCreateComputePipelines-flags-00696]]
- If the pname:flags member of any given element of pname:pCreateInfos
- contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base
- pipeline must: have been created with the
+ If the pname:flags member of any element of pname:pCreateInfos contains
+ the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
+ must: have been created with the
ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
****
@@ -388,15 +388,15 @@ pipeline layout.
.Valid Usage
****
* [[VUID-vkCreateGraphicsPipelines-flags-00720]]
- If the pname:flags member of any given element of pname:pCreateInfos
- contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
+ If the pname:flags member of any element of pname:pCreateInfos contains
+ the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
pname:basePipelineIndex member of that same element is not `-1`,
pname:basePipelineIndex must: be less than the index into
pname:pCreateInfos that corresponds to that element
* [[VUID-vkCreateGraphicsPipelines-flags-00721]]
- If the pname:flags member of any given element of pname:pCreateInfos
- contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base
- pipeline must: have been created with the
+ If the pname:flags member of any element of pname:pCreateInfos contains
+ the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline
+ must: have been created with the
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
ename:VK_SHADER_STAGE_VERTEX_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-stage-00728]]
- The pname:stage member of any given element of pname:pStages must: not
- be ename:VK_SHADER_STAGE_COMPUTE_BIT
+ The pname:stage member of each element of pname:pStages must: not be
+ ename:VK_SHADER_STAGE_COMPUTE_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]]
If pname:pStages includes a tessellation control shader stage, it must:
include a tessellation evaluation shader stage
@@ -755,7 +755,8 @@ ifdef::VK_KHX_device_group[]
ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHX flag.
endif::VK_KHX_device_group[]
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
slink:VkRenderPassInputAttachmentAspectCreateInfoKHR at renderpass
create time, its shader code must: not read from any aspect that was not
@@ -1375,10 +1376,10 @@ slink:VkSpecializationMapEntry.
.Valid Usage
****
* [[VUID-VkSpecializationInfo-offset-00773]]
- The pname:offset member of any given element of pname:pMapEntries must:
- be less than pname:dataSize
+ The pname:offset member of each element of pname:pMapEntries must: be
+ less than pname:dataSize
* [[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
* [[VUID-VkSpecializationInfo-mapEntryCount-00775]]
If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer
diff --git a/doc/specs/vulkan/chapters/renderpass.txt b/doc/specs/vulkan/chapters/renderpass.txt
index 59e514a..3879827 100644
--- a/doc/specs/vulkan/chapters/renderpass.txt
+++ b/doc/specs/vulkan/chapters/renderpass.txt
@@ -169,7 +169,7 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
pname:pInputAttachments, pname:pColorAttachments,
pname:pResolveAttachments or pname:pDepthStencilAttachment, or the
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
any subpass (including the same subpass), the
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
pname:pInputAttachments, pname:pColorAttachments,
pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
- element of pname:pPreserveAttachments in any given element of
- pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less
- than pname:attachmentCount
+ element of pname:pPreserveAttachments in any element of pname:pSubpasses
+ is not ename:VK_ATTACHMENT_UNUSED, it must: be less than
+ pname:attachmentCount
* [[VUID-VkRenderPassCreateInfo-pPreserveAttachments-00835]]
- The value of any element of the pname:pPreserveAttachments member in any
- given element of pname:pSubpasses must: not be
- ename:VK_ATTACHMENT_UNUSED
+ The value of each element of the pname:pPreserveAttachments member in
+ each element of pname:pSubpasses must: not be ename:VK_ATTACHMENT_UNUSED
* [[VUID-VkRenderPassCreateInfo-pAttachments-00836]]
For any member of pname:pAttachments with a pname:loadOp equal to
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_DEPTH_STENCIL_READ_ONLY_OPTIMAL.
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
must: not specify a pname:layout equal to
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
must: not specify a pname:layout equal to
pname:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR.
@@ -531,10 +532,13 @@ include::../api/structs/VkInputAttachmentAspectReferenceKHR.txt[]
.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].
- * [[VUID-VkInputAttachmentAspectReferenceKHR-None-01569]] 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
+ * [[VUID-VkInputAttachmentAspectReferenceKHR-None-01569]]
+ 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.
****
@@ -795,10 +799,10 @@ attachment.
element of pname:pColorAttachments must: be anything other than
ename:VK_SAMPLE_COUNT_1_BIT
* [[VUID-VkSubpassDescription-pResolveAttachments-00849]]
- Any given element of pname:pResolveAttachments must: have a sample count
- of ename:VK_SAMPLE_COUNT_1_BIT
+ Each element of pname:pResolveAttachments must: have a sample count of
+ ename:VK_SAMPLE_COUNT_1_BIT
* [[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
* [[VUID-VkSubpassDescription-pColorAttachments-01417]]
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
attachments from the fragment shader
* [[VUID-VkSubpassDescription-attachment-00853]]
- The pname:attachment member of any element of pname:pPreserveAttachments
- must: not be ename:VK_ATTACHMENT_UNUSED
+ The pname:attachment member of each element of
+ pname:pPreserveAttachments must: not be ename:VK_ATTACHMENT_UNUSED
* [[VUID-VkSubpassDescription-pPreserveAttachments-00854]]
- Any given element of pname:pPreserveAttachments must: not also be an
- element of any other member of the subpass description
+ Each element of pname:pPreserveAttachments must: not also be an element
+ of any other member of the subpass description
* [[VUID-VkSubpassDescription-layout-00855]]
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
@@ -1504,35 +1508,33 @@ slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
pname:attachmentCount must: be equal to the attachment count specified
in pname:renderPass
* [[VUID-VkFramebufferCreateInfo-pAttachments-00877]]
- Any given element of pname:pAttachments that is used as a color
- attachment or resolve attachment by pname:renderPass must: have been
- created with a pname:usage value including
- ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+ Each element of pname:pAttachments that is used as a color attachment or
+ resolve attachment by pname:renderPass must: have been created with a
+ pname:usage value including ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
* [[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
pname:usage value including
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
* [[VUID-VkFramebufferCreateInfo-pAttachments-00879]]
- Any given element of pname:pAttachments that is used as an input
- attachment by pname:renderPass must: have been created with a
- pname:usage value including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+ Each element of pname:pAttachments that is used as an input attachment
+ by pname:renderPass must: have been created with a pname:usage value
+ including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
* [[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
corresponding sname:VkAttachmentDescription in pname:renderPass
* [[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
the corresponding sname:VkAttachmentDescription in pname:renderPass
* [[VUID-VkFramebufferCreateInfo-pAttachments-00882]]
- Any given element of pname:pAttachments must: have dimensions at least
- as large as the corresponding framebuffer dimension
+ Each element of pname:pAttachments must: have dimensions at least as
+ large as the corresponding framebuffer dimension
* [[VUID-VkFramebufferCreateInfo-pAttachments-00883]]
- Any given element of pname:pAttachments must: only specify a single mip
- level
+ Each element of pname:pAttachments must: only specify a single mip level
* [[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
* [[VUID-VkFramebufferCreateInfo-width-00885]]
pname:width must: be greater than `0`.
@@ -1551,8 +1553,8 @@ slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers
ifdef::VK_KHR_maintenance1[]
* [[VUID-VkFramebufferCreateInfo-pAttachments-00891]]
- Any given element of pname:pAttachments that is a 2D or 2D array image
- view taken from a 3D image must: not be a depth/stencil format
+ Each element of pname:pAttachments that is a 2D or 2D array image view
+ taken from a 3D image must: not be a depth/stencil format
endif::VK_KHR_maintenance1[]
****
diff --git a/doc/specs/vulkan/chapters/resources.txt b/doc/specs/vulkan/chapters/resources.txt
index 025b00c..902ebc2 100644
--- a/doc/specs/vulkan/chapters/resources.txt
+++ b/doc/specs/vulkan/chapters/resources.txt
@@ -145,7 +145,8 @@ ifdef::VK_KHR_external_memory[]
slink:VkExternalMemoryBufferCreateInfoKHR::pname:handleTypes
endif::VK_KHR_external_memory[]
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
pname:dedicatedAllocation member of the chained structure is
ename:VK_TRUE, then pname:flags must: not include
@@ -909,13 +910,15 @@ ifdef::VK_KHX_device_group[]
be ename:VK_IMAGE_TILING_OPTIMAL
endif::VK_KHX_device_group[]
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
pname:format must: be a <<appendix-compressedtex-bc,block-compressed
image format>>, an <<appendix-compressedtex-etc2, ETC compressed image
format>>, or an <<appendix-compressedtex-astc, ASTC compressed image
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
pname:flags must: also contain ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT.
endif::VK_KHR_maintenance2[]
@@ -932,25 +935,29 @@ ifdef::VK_NV_external_memory[slink:VkExternalMemoryImageCreateInfoNV]
must: be ename:VK_IMAGE_LAYOUT_UNDEFINED
endif::VK_KHR_external_memory,VK_NV_external_memory[]
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>>:
** pname:mipLevels must: be 1
** pname:samples must be ename:VK_SAMPLE_COUNT_1_BIT
** pname:imageType must: be ename:VK_IMAGE_TYPE_2D
** 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
sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include ename:VK_FORMAT_FEATURE_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
sname:VkFormatProperties::pname:linearTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include ename:VK_FORMAT_FEATURE_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
contain ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR
endif::VK_KHR_sampler_ycbcr_conversion[]
@@ -1111,14 +1118,17 @@ were not included in the pname:pNext list of slink:VkImageCreateInfo.
.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
in the pname:format field of sname:VkImageCreateInfo, as described in
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
`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.
****
@@ -1334,12 +1344,14 @@ image.
The pname:aspectMask member of pname:pSubresource must: only have a
single bit set
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
format>> with two planes, the pname:aspectMask member of
pname:pSubresource must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
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
format>> with three planes, the pname:aspectMask member of
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_2_BIT_KHR, pname:format must: be
<<features-formats-compatible-planes,compatible>> with the corresponding
-plane of the image, as defined in, and the sampler to be used with the image
-view must: not enable <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
-conversion>>.
+plane of the image, and the sampler to be used with the image view must: not
+enable <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>>.
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
<<features-formats-compatible-planes,plane compatibility>> for the plane.
@@ -2211,18 +2222,21 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
pname:image, as defined in
<<features-formats-compatibility-classes,Format Compatibility Classes>>
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,
pname:format must: be compatible with, or must: be an uncompressed
format that is size-compatible with, the pname:format used to create
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
pname:levelCount and pname:layerCount members of pname:subresourceRange
must: both be `1`.
endif::VK_KHR_maintenance2[]
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
creating pname:image and the pname:viewFormatCount field of
sname:VkImageFormatListCreateInfoKHR is not zero then pname:format must:
@@ -2230,7 +2244,8 @@ ifdef::VK_KHR_image_format_list[]
sname:VkImageFormatListCreateInfoKHR::pname:pViewFormats.
endif::VK_KHR_image_format_list[]
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
the pname:image is a
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>>
@@ -2293,7 +2308,8 @@ determining the valid usage conditions of slink:VkImageViewCreateInfo.
.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
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~
conversion>>.
-If <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is enabled in
-the sampler, the pname:aspectMask used by a sname:VkImageView must: be
+When creating a sname:VkImageView, if <<samplers-YCbCr-conversion,sampler
+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.
-If sampler Y'C~B~C~R~ conversion is not enabled in the sampler and the
-format is
+When creating a sname:VkImageView, if sampler Y'C~B~C~R~ conversion is not
+enabled in the sampler and the image pname:format is
<<features-formats-requiring-sampler-ycbcr-conversion,multi-planar>>, the
image must: have been created with ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,
-and the pname:aspectMask of the sname:VkImageView's
-sname:VkImageSubresourceRange must: be
-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.
+and the pname:aspectMask of the sname:VkImageView's pname:subresourceRange
+must: be 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.
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[]
--
@@ -2437,7 +2463,7 @@ include::../api/structs/VkComponentMapping.txt[]
placed in the G component of the output vector.
* pname:b is a elink:VkComponentSwizzle specifying the component value
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.
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:image is the image to query.
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+
.Valid Usage
****
-ifdef::VK_KHR_sampler_ycbcr_conversion[]
- * [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01589]] If pname:image was created with a _multi-planar_ format and the
+ * [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01589]]
+ If pname:image was created with a _multi-planar_ format and the
ename:VK_IMAGE_CREATE_DISJOINT_BIT_KHR flag, there must: be a
slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext chain of
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
slink:VkImagePlaneMemoryRequirementsInfoKHR in the pname:pNext chain of
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
chain of the slink:VkImageMemoryRequirementsInfo2KHR structure
-endif::VK_KHR_sampler_ycbcr_conversion[]
****
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
include::../validity/structs/VkImageMemoryRequirementsInfo2KHR.txt[]
--
@@ -2839,7 +2870,8 @@ include::../api/structs/VkImagePlaneMemoryRequirementsInfoKHR.txt[]
.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
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
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
****
- * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01593]] 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
+ * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01593]]
+ 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
- * [[VUID-VkBindBufferMemoryInfoKHR-memoryOffset-01595]] pname:memoryOffset must: be less than the size of pname:memory
- * [[VUID-VkBindBufferMemoryInfoKHR-buffer-01596]] If pname:buffer was created with the
+ * [[VUID-VkBindBufferMemoryInfoKHR-memoryOffset-01595]]
+ 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_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must:
be a multiple of
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
multiple of
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
multiple of
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
sname:VkMemoryRequirements structure returned from a call to
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
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
pname:buffer must: be less than or equal to the size of pname:memory
minus pname:memoryOffset
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
slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for
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
endif::VK_KHR_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
equal to ename:VK_TRUE, pname:memory must: have been created with
slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to
pname:buffer and pname:memoryOffset must: be zero
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
equal to ename:VK_TRUE, pname:memory must: not have been allocated
dedicated for a specific buffer or image
endif::VK_KHR_dedicated_allocation[]
endif::VK_NV_dedicated_allocation[]
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
pname:memory specified by
slink:VkBindBufferMemoryDeviceGroupInfoKHX::pname:pDeviceIndices must:
@@ -3223,9 +3268,11 @@ In other words, by default each physical device attaches to instance zero.
.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
- * [[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[]
@@ -3268,7 +3315,8 @@ endif::VK_KHR_bind_memory2[]
.Valid Usage
****
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.
endif::VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-vkBindImageMemory-image-01044]]
@@ -3371,45 +3419,56 @@ include::../api/structs/VkBindImageMemoryInfoKHR.txt[]
.Valid Usage
****
- * [[VUID-VkBindImageMemoryInfoKHR-image-01609]] 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
+ * [[VUID-VkBindImageMemoryInfoKHR-image-01609]]
+ 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
- * [[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[]
- * [[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
slink:VkMemoryRequirements structure returned from a call to
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
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
slink:VkMemoryRequirements structure returned from a call to
flink:vkGetImageMemoryRequirements with the same pname:image
endif::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
been allocated using one of the memory types allowed in the
pname:memoryTypeBits member of the slink:VkMemoryRequirements structure
returned from a call to flink:vkGetImageMemoryRequirements2KHR with
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:
be an integer multiple of the pname:alignment member of the
slink:VkMemoryRequirements structure returned from a call to
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
size of pname:memory and pname:memoryOffset must: be greater than or
equal to the pname:size member of the slink:VkMemoryRequirements
structure returned from a call to flink:vkGetImageMemoryRequirements2KHR
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
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
been allocated using one of the memory types allowed in the
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
slink:VkImagePlaneMemoryRequirementsInfoKHR structure attached to the
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:
be an integer multiple of the pname:alignment member of the
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
slink:VkImagePlaneMemoryRequirementsInfoKHR structure attached to the
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
size of pname:memory and pname:memoryOffset must: be greater than or
equal to the pname:size member of the slink:VkMemoryRequirements
@@ -3436,7 +3497,8 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
chain
endif::VK_KHR_sampler_ycbcr_conversion[]
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
slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for
pname:image), pname:memory must: have been created with
@@ -3444,49 +3506,59 @@ ifdef::VK_KHR_dedicated_allocation[]
and pname:memoryOffset must: be zero
endif::VK_KHR_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
equal to ename:VK_TRUE, pname:memory must: have been created with
slink:VkDedicatedAllocationMemoryAllocateInfoNV::pname:image equal to
pname:image and pname:memoryOffset must: be zero
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
equal to ename:VK_TRUE, pname:memory must: not have been allocated
dedicated for a specific buffer or image
endif::VK_KHR_dedicated_allocation[]
endif::VK_NV_dedicated_allocation[]
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[]
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
specified by
slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pDeviceIndices must:
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::pname:SFRRectCount is not
zero, then pname:image must: have been created with the
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::pname:pSFRRects must: be
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
elements of slink:VkBindImageMemoryDeviceGroupInfoKHX::pname:pSFRRects
that correspond to the same instance of pname: image must: cover the
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
pname:pNext chain must: include a valid instance of
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
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
dname:VkDeviceMemory handle
endif::VK_KHX_device_group[]
@@ -3552,28 +3624,37 @@ In other words, by default each physical device attaches to instance zero.
.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.
- * [[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
- * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-pDeviceIndices-01635]] 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
+ * [[VUID-VkBindImageMemoryDeviceGroupInfoKHX-pDeviceIndices-01635]]
+ 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
- * [[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.
- * [[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
(sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
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
(sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
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
aspects of the image, or else pname:extent.width + pname:offset.x must:
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
non-metadata aspects of the image, or else pname:extent.height +
pname:offset.y must: equal the width of the image subresource
@@ -3601,14 +3682,16 @@ include::../api/structs/VkBindImagePlaneMemoryInfoKHR.txt[]
.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
ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR or
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,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, or
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
made in a single flink:vkBindImageMemory2KHR call), as separate bindings
****
@@ -3644,7 +3727,8 @@ pname:pSFRRects members of slink:VkBindImageMemoryDeviceGroupInfoKHX.
.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
****
diff --git a/doc/specs/vulkan/chapters/samplers.txt b/doc/specs/vulkan/chapters/samplers.txt
index 2688604..4efbbea 100644
--- a/doc/specs/vulkan/chapters/samplers.txt
+++ b/doc/specs/vulkan/chapters/samplers.txt
@@ -168,7 +168,8 @@ pname:maxSamplerAllocationCount limit.
between `1.0` and
sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive
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
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
@@ -199,13 +200,15 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
are ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, pname:borderColor
must: be a valid elink:VkBorderColor value
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
must: be ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
pname:anisotropyEnable must: be ename:VK_FALSE, and
pname:unnormalizedCoordinates must: be ename:VK_FALSE
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
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is enabled
endif::VK_EXT_sampler_filter_minmax[]
@@ -468,7 +471,8 @@ Operations>> chapter.
.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
****
@@ -517,21 +521,27 @@ the default mode of operation.
.Valid Usage
****
- * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01649]] pname:format must: not be ename:VK_FORMAT_UNDEFINED
- * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01650]] pname:format must: support
+ * [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01649]]
+ 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_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,
pname:xChromaOffset and pname:yChromaOffset must: not be
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,
pname:xChromaOffset and pname:yChromaOffset must: not be
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)
- * [[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.a must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY,
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
ename:VK_COMPONENT_SWIZZLE_IDENTITY, both values must: be
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
pname:components.r, pname:components.g, and pname:components.b must:
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
must: not correspond to a channel which contains zero or one as a
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,
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,
pname:chromaFilter must: be ename:VK_FILTER_NEAREST
****
diff --git a/doc/specs/vulkan/chapters/sparsemem.txt b/doc/specs/vulkan/chapters/sparsemem.txt
index cdd5593..b24592e 100644
--- a/doc/specs/vulkan/chapters/sparsemem.txt
+++ b/doc/specs/vulkan/chapters/sparsemem.txt
@@ -1326,10 +1326,10 @@ include::../api/structs/VkSparseImageOpaqueMemoryBindInfo.txt[]
.Valid Usage
****
* [[VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103]]
- For any given element of pname:pBinds, if the pname:flags member of that
- element contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding
- range defined must: be within the mip tail region of the metadata aspect
- of pname:image
+ If the pname:flags member of any element of pname:pBinds contains
+ ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding range defined
+ must: be within the mip tail region of the metadata aspect of
+ pname:image
****
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
execution on that queue
* [[VUID-vkQueueBindSparse-pSignalSemaphores-01115]]
- Any given element of the pname:pSignalSemaphores member of any element
- of pname:pBindInfo must: be unsignaled when the semaphore signal
- operation it defines is executed on the device
+ Each element of the pname:pSignalSemaphores member of each element of
+ pname:pBindInfo must: be unsignaled when the semaphore signal operation
+ it defines is executed on the device
* [[VUID-vkQueueBindSparse-pWaitSemaphores-01116]]
When a semaphore unsignal operation defined by any element of the
pname:pWaitSemaphores member of any element of pname:pBindInfo executes
diff --git a/doc/specs/vulkan/chapters/synchronization.txt b/doc/specs/vulkan/chapters/synchronization.txt
index df99307..511c04d 100644
--- a/doc/specs/vulkan/chapters/synchronization.txt
+++ b/doc/specs/vulkan/chapters/synchronization.txt
@@ -1318,9 +1318,8 @@ that fence.
.Valid Usage
****
* [[VUID-vkResetFences-pFences-01123]]
- Any given element of pname:pFences must: not currently be associated
- with any queue command that has not yet completed execution on that
- queue
+ Each element of pname:pFences must: not be currently associated with any
+ queue command that has not yet completed execution on that queue
****
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[]
+<<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
slink:VkExportFenceCreateInfoKHR::pname:handleTypes value is that specified
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:
-[[synchronization-handletypes-win32]]
+[[synchronization-fence-handletypes-win32]]
.Handle Types Supported by VkImportFenceWin32HandleInfoKHR
[width="80%",options="header"]
|====
@@ -1687,7 +1733,7 @@ include::../api/structs/VkImportFenceFdInfoKHR.txt[]
The handle types supported by pname:handleType are:
-[[synchronization-handletypes-fd]]
+[[synchronization-fence-handletypes-fd]]
.Handle Types Supported by VkImportFenceFdInfoKHR
[width="80%",options="header"]
|====
@@ -2269,29 +2315,6 @@ unsignal operation>> is submitted to a queue:
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]]
=== 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[]
+<<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
slink:VkExportSemaphoreCreateInfoKHR::pname:handleTypes value is that
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
fine-grained dependency between commands submitted to the same queue, or
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.
An application can: signal an event, or unsignal it, on either the host or
the device.
@@ -2928,7 +2995,10 @@ include::../api/protos/vkCmdWaitEvents.txt[]
slink:VkImageMemoryBarrier structures.
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
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
stages>>.
* [[VUID-vkCmdWaitEvents-pMemoryBarriers-01165]]
- Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
- or pname:pImageMemoryBarriers must: not have any access flag included in
+ Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers or
+ pname:pImageMemoryBarriers must: not have any access flag included in
its pname:srcAccessMask member if that bit is not supported by any of
the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
* [[VUID-vkCmdWaitEvents-pMemoryBarriers-01166]]
- Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
- or pname:pImageMemoryBarriers must: not have any access flag included in
+ Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers or
+ pname:pImageMemoryBarriers must: not have any access flag included in
its pname:dstAccessMask member if that bit is not supported by any of
the pipeline stages in pname:dstStageMask, as specified in the
<<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
stages>>.
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01184]]
- Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
- or pname:pImageMemoryBarriers must: not have any access flag included in
+ Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers and
+ pname:pImageMemoryBarriers must: not have any access flag included in
its pname:srcAccessMask member if that bit is not supported by any of
the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01185]]
- Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
- or pname:pImageMemoryBarriers must: not have any access flag included in
+ Each element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers and
+ pname:pImageMemoryBarriers must: not have any access flag included in
its pname:dstAccessMask member if that bit is not supported by any of
the pipeline stages in pname:dstStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
@@ -3609,6 +3679,17 @@ would equal ename:VK_IMAGE_LAYOUT_UNDEFINED.
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
****
* [[VUID-VkImageMemoryBarrier-oldLayout-01197]]
@@ -3692,9 +3773,26 @@ endif::VK_KHR_external_memory[]
pname:image was created
* [[VUID-VkImageMemoryBarrier-image-01207]]
If pname:image has a depth/stencil format with both depth and stencil
- components, then pname:aspectMask member of pname:subresourceRange must:
- include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
+ components, then the pname:aspectMask member of pname:subresourceRange
+ must: include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
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]]
If either pname:oldLayout or pname:newLayout is
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
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
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
then pname:image must: have been created with
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
then pname:image must: have been created with
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
diff --git a/doc/specs/vulkan/chapters/textures.txt b/doc/specs/vulkan/chapters/textures.txt
index 1678bce..804cd18 100644
--- a/doc/specs/vulkan/chapters/textures.txt
+++ b/doc/specs/vulkan/chapters/textures.txt
@@ -320,6 +320,7 @@ They include the following steps, which are performed in the listed order:
** <<textures-operation-validation,Instruction/Sampler/Image validation>>
** <<textures-integer-coordinate-validation,Coordinate validation>>
** <<textures-sparse-validation,Sparse validation>>
+ ** <<textures-layout-validation,Layout validation>>
* <<textures-format-conversion,Format conversion>>
* <<textures-texel-replacement,Texel replacement>>
* <<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
<<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]]
=== 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
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
-the <<data-format,Khronos Data Format Specification>>.
+and B components as described in the "`sRGB EOTF`" section of the
+<<data-format,Khronos Data Format Specification>>.
The A component, if present, is unchanged.
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[]
-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]]
== Image Operation Steps
diff --git a/doc/specs/vulkan/reflow.py b/doc/specs/vulkan/reflow.py
index 2d9ace3..f1748e6 100755
--- a/doc/specs/vulkan/reflow.py
+++ b/doc/specs/vulkan/reflow.py
@@ -37,6 +37,7 @@
# For error and file-loading interfaces only
from reflib import *
+from reflow_count import startVUID
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)
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.
# These patterns are only compiled once.
@@ -597,8 +613,6 @@ def reflowFile(filename, args):
global vuPat
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__':
parser = argparse.ArgumentParser()
@@ -643,10 +657,23 @@ if __name__ == '__main__':
if args.nextvu != None:
logWarn('Tagging untagged Valid Usage statements starting at', args.nextvu)
- for file in args.files:
- reflowFile(file, args)
+ # If no files are specified, reflow the entire specification chapters folder
+ 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:
- logWarn('You must now edit the value of reflow.py:startVUID to',
- args.nextvu,
- 'so that future runs will not overwrite existing VUID tags')
+ try:
+ reflow_count_file_path = os.path.dirname(os.path.realpath(__file__))
+ 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])
diff --git a/doc/specs/vulkan/reflow_count.py b/doc/specs/vulkan/reflow_count.py
new file mode 100644
index 0000000..e317491
--- /dev/null
+++ b/doc/specs/vulkan/reflow_count.py
@@ -0,0 +1,2 @@
+# The value to start tagging VU statements at, unless overridden by -nextvu
+startVUID = 1676
diff --git a/doc/specs/vulkan/style/writing.txt b/doc/specs/vulkan/style/writing.txt
index 13abdc2..be2c468 100644
--- a/doc/specs/vulkan/style/writing.txt
+++ b/doc/specs/vulkan/style/writing.txt
@@ -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]]
=== Compound Words and Preferred Orthography
diff --git a/doc/specs/vulkan/styleguide.txt b/doc/specs/vulkan/styleguide.txt
index c65d564..4f97826 100644
--- a/doc/specs/vulkan/styleguide.txt
+++ b/doc/specs/vulkan/styleguide.txt
@@ -157,6 +157,8 @@ include::style/vuid.txt[]
= 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
Extension pname:pNext Chains>> language specifying where to describe
interactions of structures in a pname:pNext chain (internal issue 715).
diff --git a/src/ext_loader/vulkan_ext.c b/src/ext_loader/vulkan_ext.c
index 0997153..4b66d73 100644
--- a/src/ext_loader/vulkan_ext.c
+++ b/src/ext_loader/vulkan_ext.c
@@ -1020,6 +1020,57 @@ VkResult vkBindImageMemory2KHR(
}
#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
static PFN_vkCreateDebugReportCallbackEXT pfn_vkCreateDebugReportCallbackEXT;
VkResult vkCreateDebugReportCallbackEXT(
@@ -1951,6 +2002,11 @@ void vkExtInitInstance(VkInstance instance)
pfn_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)vkGetInstanceProcAddr(instance, "vkBindBufferMemory2KHR");
pfn_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)vkGetInstanceProcAddr(instance, "vkBindImageMemory2KHR");
#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
pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT");
pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT");
@@ -2199,6 +2255,11 @@ void vkExtInitDevice(VkDevice device)
pfn_vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(device, "vkBindBufferMemory2KHR");
pfn_vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(device, "vkBindImageMemory2KHR");
#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
pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkCreateDebugReportCallbackEXT");
pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugReportCallbackEXT");
diff --git a/src/spec/registry.rnc b/src/spec/registry.rnc
index f81b55c..e8b87ba 100644
--- a/src/spec/registry.rnc
+++ b/src/spec/registry.rnc
@@ -393,13 +393,19 @@ Extension = element extension {
ProfileName ? ,
ExtensionName ? ,
Comment ? ,
- InterfaceElement *
+ (
+ InterfaceElement |
+ element comment { text }
+ ) *
} |
element remove {
attribute api { text } ? ,
ProfileName ? ,
Comment ? ,
- InterfaceElement *
+ (
+ InterfaceElement |
+ element comment { text }
+ ) *
}
) *
}
diff --git a/src/spec/vk.xml b/src/spec/vk.xml
index f4182d8..7ed72c5 100644
--- a/src/spec/vk.xml
+++ b/src/spec/vk.xml
@@ -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
#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
-#define <name>VK_HEADER_VERSION</name> 61</type>
+#define <name>VK_HEADER_VERSION</name> 62</type>
<type category="define">
#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>VkExtent2D</type> <name>extent</name></member>
</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">
<member><type>VkRect2D</type> <name>rect</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 len="attachmentInitialSampleLocationsCount">const <type>VkAttachmentSampleLocationsEXT</type>* <name>pAttachmentInitialSampleLocations</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 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>
@@ -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><type>VkValidationCacheEXT</type> <name>validationCache</name></member> <!-- Validation cache handle -->
</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>
<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">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command>
- <command>
+ <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
<proto><type>VkResult</type> <name>vkCreateValidationCacheEXT</name></proto>
<param><type>VkDevice</type> <name>device</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 len="srcCacheCount">const <type>VkValidationCacheEXT</type>* <name>pSrcCaches</name></param>
</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>
<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 name="VK_ANDROID_native_buffer" number="11" supported="disabled">
<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="&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>
</extension>
<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"/>
</require>
</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>
- <enum value="0" name="VK_AMD_EXTENSION_47_SPEC_VERSION"/>
- <enum value="&quot;VK_AMD_extension_47&quot;" name="VK_AMD_EXTENSION_47_EXTENSION_NAME"/>
+ <enum value="1" name="VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION"/>
+ <enum value="&quot;VK_AMD_shader_image_load_store_lod&quot;" name="VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME"/>
</require>
</extension>
<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 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>
- <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 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="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="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="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="VkFormat" name="VK_FORMAT_G8B8G8R8_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="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="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="7" extends="VkFormat" name="VK_FORMAT_R10X6_UNORM_PACK16_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="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="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="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="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="18" extends="VkFormat" name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16_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="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="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="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="27" extends="VkFormat" name="VK_FORMAT_G16B16G16R16_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="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="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 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="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="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="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="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="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="VkSamplerYcbcrConversionInfoKHR"/>
- <type name="VkBindImagePlaneMemoryInfoKHR"/>
- <type name="VkImagePlaneMemoryRequirementsInfoKHR"/>
- <type name="VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"/>
- <type name="VkSamplerYcbcrConversionImageFormatPropertiesKHR"/>
- <command name="vkCreateSamplerYcbcrConversionKHR"/>
- <command name="vkDestroySamplerYcbcrConversionKHR"/>
+ <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 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="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="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="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="VkFormat" name="VK_FORMAT_G8B8G8R8_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="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="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="7" extends="VkFormat" name="VK_FORMAT_R10X6_UNORM_PACK16_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="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="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="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="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="18" extends="VkFormat" name="VK_FORMAT_R12X4G12X4_UNORM_2PACK16_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="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="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="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="27" extends="VkFormat" name="VK_FORMAT_G16B16G16R16_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="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="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 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="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="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="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="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="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="VkSamplerYcbcrConversionInfoKHR"/>
+ <type name="VkBindImagePlaneMemoryInfoKHR"/>
+ <type name="VkImagePlaneMemoryRequirementsInfoKHR"/>
+ <type name="VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"/>
+ <type name="VkSamplerYcbcrConversionImageFormatPropertiesKHR"/>
+ <command name="vkCreateSamplerYcbcrConversionKHR"/>
+ <command name="vkDestroySamplerYcbcrConversionKHR"/>
</require>
</extension>
<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"/>
</require>
</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>
</registry>
diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h
index b19c1ef..4cf2c21 100644
--- a/src/vulkan/vulkan.h
+++ b/src/vulkan/vulkan.h
@@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
-#define VK_HEADER_VERSION 61
+#define VK_HEADER_VERSION 62
#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_SPEC_VERSION 1
#define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview"
@@ -6647,7 +6652,7 @@ typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
uint32_t attachmentInitialSampleLocationsCount;
const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations;
uint32_t postSubpassSampleLocationsCount;
- const VkSubpassSampleLocationsEXT* pSubpassSampleLocations;
+ const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations;
} VkRenderPassSampleLocationsBeginInfoEXT;
typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {
diff --git a/update_valid_usage_ids.sh b/update_valid_usage_ids.sh
new file mode 100755
index 0000000..8623e1a
--- /dev/null
+++ b/update_valid_usage_ids.sh
@@ -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
+