diff --git a/.gitignore b/.gitignore index 5e7c51a9..9990d375 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 1cbe0829..0f0e0f25 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 <> and + <> sections (internal issue 820). + * Define the term "`retired swapchain`", reorganize some swapchain + language, and improve language for pname:oldSwapchain in + flink:VkSwapchainCreateInfoKHR, the <> + table, flink:vkDestroySwapchainKHR, and flink:vkAcquireNextImage2KHX + (internal issue 869). + * Describe in the <> 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 <> 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 <> 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 a1caa410..a23df3ec 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 00000000..77f7d355 --- /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 216544bb..42cea165 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 5d756605..07f9dd2a 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 4071823c..d0a1b3b2 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 | <> endif::VK_KHX_device_group[] +ifdef::VK_AMD_shader_image_load_store_lod[] +[[spirvenv-capabilities-table-imagereadwritelodamd]] +| code:ImageReadWriteLodAMD | <> +endif::VK_AMD_shader_image_load_store_lod[] ifdef::VK_AMD_texture_gather_bias_lod[] [[spirvenv-capabilities-table-imagegatherbiaslodamd]] | code:ImageGatherBiasLodAMD | <> @@ -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 3191fa36..d8196571 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 66c00ae8..46eff902 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 5e443760..a06e9cf9 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, 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, 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 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 <>). +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 38bf9f85..c7788105 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 <> 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 <<<> 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 94e4fcce..29688422 100644 --- a/doc/specs/vulkan/chapters/cmdbuffers.txt +++ b/doc/specs/vulkan/chapters/cmdbuffers.txt @@ -864,9 +864,9 @@ See <>. <>. * [[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 <>. <> 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 <>. * [[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 <>. * [[VUID-vkQueueSubmit-pCommandBuffers-00072]] Any <> - into any given element of the pname:pCommandBuffers member of any - element of pname:pSubmits must: be in the <>. + into any element of the pname:pCommandBuffers member of any element of + pname:pSubmits must: be in the <>. * [[VUID-vkQueueSubmit-pCommandBuffers-00073]] If any <> - 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 <>. * [[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 <> 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 <> - 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 <>. 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 <>. * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00090]] If any element of pname:pCommandBuffers was not recorded with the @@ -1208,21 +1207,21 @@ command buffer becomes <>. recorded into any other primary command buffer, that primary command buffer must: not be in the <> * [[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 <>. * [[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 <>. 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 <>. <> 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 <> feature @@ -1278,9 +1276,8 @@ command buffer becomes <>. 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 <> in - pname:commandBuffer + Each element of pname:pCommandBuffers must: not begin any query types + that are <> 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 e2b84380..f4cb2b5f 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 <> 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 <>, the elink:VkFormat of each of pname:srcImage and pname:dstImage must: be compatible, as defined <> - * [[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 <>, the elink:VkFormat of the image and plane must: be compatible according to <> 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 <>, 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 <> 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 <> 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 <> 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 <> 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 <> 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 <> 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 <> 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 <>,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 <>, 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 <>, 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 <> 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 <> 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 d95fbc92..6e40b263 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 <>, that command buffer becomes <>. .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 <>. **** @@ -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 <>: ** 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 <> and the elink:VkFormat of the image is a <>. +described in the "`sRGB EOTF`" section of the <>. 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^ -1^`" section of the Khronos Data -Format Specification. +described in the "`sRGB EOTF^ -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 9dcac212..dddc4a3c 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 -<> -appropriately in +vk_platform.h+. +defining <> 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 550320a6..010220ee 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 6ff31697..61a724ea 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 f09e8e17..4dc2e3f4 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 59e514a7..3879827e 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 025b00c8..902ebc20 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 <>, an <>, or an <>. - * [[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 <>: ** 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 <>. - * [[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 <> 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 <> 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 <> with the corresponding -plane of the image, as defined in, and the sampler to be used with the image -view must: not enable <>. +plane of the image, and the sampler to be used with the image view must: not +enable <>. 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 <> for the plane. @@ -2211,18 +2222,21 @@ endif::VK_KHR_sampler_ycbcr_conversion[] pname:image, as defined in <> 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 <> @@ -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 <>. -If <> is enabled in -the sampler, the pname:aspectMask used by a sname:VkImageView must: be +When creating a sname:VkImageView, if <> 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 <>, 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 26886041..4efbbeaa 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 <> is + * [[VUID-VkSamplerCreateInfo-minFilter-01645]] + If <> 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 <> is + * [[VUID-VkSamplerCreateInfo-addressModeU-01646]] + If <> 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 <> is enabled endif::VK_EXT_sampler_filter_minmax[] @@ -468,7 +471,8 @@ Operations>> chapter. .Valid Usage **** - * [[VUID-vkCreateSamplerYcbcrConversionKHR-None-01648]] The <> 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 <> - * [[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 cdd55932..b24592e9 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 df99307e..511c04d7 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[] +<> 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[] +<> 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 <> 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 <> 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). <>. * [[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 <>. * [[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 <> pipeline stages is <>. * [[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 <>. * [[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 <> ** <> ** <> + ** <> * <> * <> * <> @@ -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 <>. +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 +<> when the image is sampled with +<>, 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 <>. +and B components as described in the "`sRGB EOTF`" section of the +<>. 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 2d9ace3a..f1748e6d 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 [*]+)( *)(?P.*)', 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 00000000..e3174915 --- /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 13abdc28..be2c4689 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 <>. +---- + +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 <>. +---- + +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 c65d5640..4f978268 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 <> to refer to properties of elments of arrays (internal issue 884). * 2017-09-10 - Add <> 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 0997153c..4b66d733 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 f81b55c2..e8b87ba9 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 f4182d85..7ed72c5f 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. // Vulkan 1.0 version number #define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 61 +#define VK_HEADER_VERSION 62 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -493,10 +493,6 @@ private version is maintained in the 1.0 branch of the member gitlab server. VkOffset2D offset VkExtent2D extent - - VkOffset3D offset - VkExtent3D extent - VkRect2D rect uint32_t baseArrayLayer @@ -2543,7 +2539,7 @@ private version is maintained in the 1.0 branch of the member gitlab server. uint32_t attachmentInitialSampleLocationsCount const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations uint32_t postSubpassSampleLocationsCount - const VkSubpassSampleLocationsEXT* pSubpassSampleLocations + const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations VkStructureType sType @@ -2619,6 +2615,14 @@ private version is maintained in the 1.0 branch of the member gitlab server. const void* pNext VkValidationCacheEXT validationCache + + VkStructureType sType + const void* pNext + const void* handle + int stride + int format + int usage + Vulkan enumerant (token) definitions @@ -5337,7 +5341,7 @@ private version is maintained in the 1.0 branch of the member gitlab server. VkSamplerYcbcrConversionKHR ycbcrConversion const VkAllocationCallbacks* pAllocator - + VkResult vkCreateValidationCacheEXT VkDevice device const VkValidationCacheCreateInfoEXT* pCreateInfo @@ -5364,6 +5368,29 @@ private version is maintained in the 1.0 branch of the member gitlab server. uint32_t srcCacheCount const VkValidationCacheEXT* pSrcCaches + + VkResult vkGetSwapchainGrallocUsageANDROID + VkDevice device + VkFormat format + VkImageUsageFlags imageUsage + int* grallocUsage + + + VkResult vkAcquireImageANDROID + VkDevice device + VkImage image + int nativeFenceFd + VkSemaphore semaphore + VkFence fence + + + VkResult vkQueueSignalReleaseImageANDROID + VkQueue queue + uint32_t waitSemaphoreCount + const VkSemaphore* pWaitSemaphores + VkImage image + int* pNativeFenceFd + @@ -5727,9 +5754,14 @@ private version is maintained in the 1.0 branch of the member gitlab server. - + + + + + + @@ -5981,10 +6013,10 @@ private version is maintained in the 1.0 branch of the member gitlab server. - + - - + + @@ -7153,69 +7185,69 @@ private version is maintained in the 1.0 branch of the member gitlab server. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7315,5 +7347,53 @@ private version is maintained in the 1.0 branch of the member gitlab server. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index b19c1eff..4cf2c217 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 00000000..8623e1a6 --- /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 +