From 1f875738fd9bd0aca5d36bf36794b4b2903e74a9 Mon Sep 17 00:00:00 2001 From: Jon Leech Date: Thu, 10 Mar 2016 17:33:02 -0800 Subject: [PATCH] Change log for March 10, 2016 Vulkan 1.0.6 spec update: * Bump API patch number and header version number to 6 for this update. Github Issues: * Define 'invocation group' for compute and graphics shaders. Cleanup definition and use of 'workgroup', and add glossary entries (public issue 1). * Various minor editorial fixes (public issue 33). * Clarify locations for block members in the <<interfaces-iointerfaces-locations,Location Assignment>> section (public issue 45). * Editorial fixes for <<commandbuffer-allocation,Command Buffer Allocation>> section (public issues 54, 59). * Clarify behavior of depth test in the <<fragops-depth,Depth Test>> section (public issues 80, 81). * Remove discussion of return codes from flink:vkGetPhysicalDeviceSparseImageFormatProperties and flink:vkGetImageSparseMemoryRequirements, which don't return values (public issue 82). * Allow flink:vkCmdDrawIndirect and flink:vkCmdDrawIndexedIndirect pname:drawCount of 0, as well as 1, when the multiDrawIndirect feature is not supported (public issue 88). * Remove confusing wording in the <<features-limits,Limits>> section describing the slink:VkPhysicalDeviceLimits pname:minTexelBufferOffsetAlignment, pname:minUniformBufferOffsetAlignment, and pname:minStorageBufferOffsetAlignment members as both minimums and maximums (public issue 91). * Clarified that only the RGB components should be affected in places where sRGB is referred to in the spec, such as ASTC formats. Minor re-wording to avoid "color space" when actively incorrect, now that we refer to the Data Format Spec which actually makes a distinction between color space and transfer function (public issue 94). * Treat pname:pPropertyCount == 0 consistently in flink:vkEnumerateInstanceLayerProperties and flink:vkEnumerateDeviceLayerProperties (public issue 99) * Cleanup minor editorial issues in chapters 14-17 (public issue 100). * Clarify definition of flink:vkEnumerateInstanceExtensionProperties and flink:vkEnumerateDeviceExtensionProperties (public issue 101). * Define the flink:vkEnumerateInstanceExtensionProperties and flink:vkEnumerateDeviceExtensionProperties pname:pLayerName parameter to be a pointer to a null-terminated UTF-8 string (public issue 101). * Rearrange "Missing information" references in mandatory format tables (public issue 101). * Clarify that the enumerated extensions returned by flink:vkEnumerateInstanceExtensionProperties and flink:vkEnumerateDeviceExtensionProperties will only include extensions provided by the platform or extensions implemented in implicitly enabled layers (public issue 101). * Miscellaneous editorial fixes. Include the Vulkan spec patch number in the PDF title. Fix label on <<fig-non-strict-lines,Non strict lines>> diagram. Use more easily distinguished symbols in tables in the <<features-required-format-support,Required Format Support>> section. Don't require FQDNs used as layer names be encoded in lower case if not possible, in the <<extensions-naming-conventions, Extension and Layer Naming Conventions>> section (public issues 101, 119, 121). Internal Issues: * Fixed excessive spacing in tables in XHTML (internal issue 18). * Clarify that ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT applies to secondary command buffers. Previously spec only referred to the members of pname:pCommandBuffers being affected by this bit. Added a separate slink:VkSubmitInfo Valid Usage restriction specifying that ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT also applies to any secondary command buffers that are recorded into the primary command buffers in pname:pCommandBuffers (internal issue 106). * Clarify that slink:VkDeviceCreateInfo::pname:pEnabledFeatures can be NULL (internal issue 117). * Remove "the value of" where it is redundant (e.g. speaking of an API parameter, struct member, or SPIR-V variable, but not when speaking of color components) (internal issue 175). * Forced patch version to always be 0 in the header. Add a "VK_API_VERSION__" macro for people to use to do the right thing. Add a VK_HEADER_VERSION which captures the header release number independent of the spec patch number (internal issue 176). * Correct description of slink:VkPipelineShaderStageCreateInfo::pname:pName to "a pointer to a null-terminated UTF-8 string" (internal issue #197). Other Commits: * Updated DataFormat spec reference to the new date for revision 5 of that spec. * Fixed KEEP option (to retain LaTeX intermediate files) in the Makefile to be included when edited there, as well as set on the command line. * Reserve and add "VK_IMG_filter_cubic" to the registry, and implement script functionality to add and remove validity from existing functions. Includes schema and readme changes. * Update GL_KHR_vulkan_glsl so push_constants do not have descriptor sets. --- ChangeLog.txt | 275 +++++++++++++++ README.md | 2 + doc/specs/misc/GL_KHR_vulkan_glsl.txt | 47 +-- doc/specs/vulkan/Makefile | 16 +- .../VK_KHR_sampler_mirror_clamp_to_edge.txt | 4 +- doc/specs/vulkan/appendices/compressedtex.txt | 16 +- doc/specs/vulkan/appendices/extensions.txt | 17 +- doc/specs/vulkan/appendices/glossary.txt | 16 + doc/specs/vulkan/chapters/clears.txt | 3 +- doc/specs/vulkan/chapters/cmdbuffers.txt | 18 +- doc/specs/vulkan/chapters/copies.txt | 9 +- doc/specs/vulkan/chapters/descriptorsets.txt | 20 +- doc/specs/vulkan/chapters/devsandqueues.txt | 24 +- doc/specs/vulkan/chapters/dispatch.txt | 10 +- doc/specs/vulkan/chapters/extensions.txt | 30 +- doc/specs/vulkan/chapters/features.txt | 333 ++++++++++-------- doc/specs/vulkan/chapters/fragops.txt | 26 +- doc/specs/vulkan/chapters/framebuffer.txt | 27 +- doc/specs/vulkan/chapters/fxvertex.txt | 2 +- doc/specs/vulkan/chapters/interfaces.txt | 64 ++-- doc/specs/vulkan/chapters/introduction.txt | 2 +- doc/specs/vulkan/chapters/memory.txt | 10 +- doc/specs/vulkan/chapters/pipelines.txt | 16 +- doc/specs/vulkan/chapters/primsrast.txt | 14 +- doc/specs/vulkan/chapters/queries.txt | 2 +- doc/specs/vulkan/chapters/resources.txt | 49 ++- doc/specs/vulkan/chapters/shaders.txt | 35 +- doc/specs/vulkan/chapters/sparsemem.txt | 18 +- doc/specs/vulkan/chapters/synchronization.txt | 8 +- doc/specs/vulkan/chapters/tessellation.txt | 23 +- doc/specs/vulkan/chapters/textures.txt | 6 +- doc/specs/vulkan/chapters/vertexpostproc.txt | 10 +- doc/specs/vulkan/config/vkspec-xhtml.css | 7 +- doc/specs/vulkan/images/non_strict_lines.svg | 8 +- .../validity/protos/vkBindBufferMemory.txt | 6 +- .../protos/vkCmdBindDescriptorSets.txt | 2 +- .../validity/protos/vkCmdBindIndexBuffer.txt | 2 +- .../validity/protos/vkCmdBindPipeline.txt | 8 +- .../protos/vkCmdBindVertexBuffers.txt | 2 +- .../vulkan/validity/protos/vkCmdBlitImage.txt | 2 +- .../validity/protos/vkCmdClearAttachments.txt | 4 +- .../validity/protos/vkCmdClearColorImage.txt | 2 +- .../protos/vkCmdClearDepthStencilImage.txt | 2 +- .../validity/protos/vkCmdCopyBuffer.txt | 2 +- .../protos/vkCmdCopyBufferToImage.txt | 2 +- .../vulkan/validity/protos/vkCmdCopyImage.txt | 2 +- .../protos/vkCmdCopyImageToBuffer.txt | 2 +- .../validity/protos/vkCmdDispatchIndirect.txt | 2 +- .../validity/protos/vkCmdDrawIndexed.txt | 2 +- .../protos/vkCmdDrawIndexedIndirect.txt | 10 +- .../validity/protos/vkCmdDrawIndirect.txt | 10 +- .../validity/protos/vkCmdExecuteCommands.txt | 6 +- .../validity/protos/vkCmdFillBuffer.txt | 2 +- .../validity/protos/vkCmdPushConstants.txt | 6 +- .../validity/protos/vkCmdResolveImage.txt | 2 +- .../validity/protos/vkCmdSetDepthBias.txt | 2 +- .../validity/protos/vkCmdSetDepthBounds.txt | 4 +- .../validity/protos/vkCmdSetLineWidth.txt | 2 +- .../validity/protos/vkCmdSetScissor.txt | 2 +- .../validity/protos/vkCmdSetViewport.txt | 2 +- .../validity/protos/vkCmdUpdateBuffer.txt | 12 +- .../validity/protos/vkCmdWaitEvents.txt | 2 +- .../validity/protos/vkCmdWriteTimestamp.txt | 2 +- .../protos/vkCreateComputePipelines.txt | 4 +- .../protos/vkCreateGraphicsPipelines.txt | 4 +- .../vkEnumerateDeviceLayerProperties.txt | 3 +- .../protos/vkFlushMappedMemoryRanges.txt | 2 +- .../validity/protos/vkFreeCommandBuffers.txt | 2 +- .../validity/protos/vkFreeDescriptorSets.txt | 4 +- ...sicalDeviceSparseImageFormatProperties.txt | 10 +- .../validity/protos/vkGetQueryPoolResults.txt | 2 +- .../protos/vkInvalidateMappedMemoryRanges.txt | 2 +- .../vulkan/validity/protos/vkMapMemory.txt | 2 +- .../validity/protos/vkMergePipelineCaches.txt | 2 +- .../vulkan/validity/protos/vkResetFences.txt | 2 +- .../validity/protos/vkWaitForFences.txt | 2 +- .../validity/structs/VkBufferCreateInfo.txt | 2 +- .../structs/VkBufferMemoryBarrier.txt | 4 +- .../structs/VkBufferViewCreateInfo.txt | 13 +- .../structs/VkDescriptorBufferInfo.txt | 2 +- .../structs/VkDescriptorPoolCreateInfo.txt | 4 +- .../validity/structs/VkDescriptorPoolSize.txt | 2 +- .../structs/VkDescriptorSetAllocateInfo.txt | 4 +- .../validity/structs/VkDeviceCreateInfo.txt | 4 +- .../structs/VkDeviceQueueCreateInfo.txt | 8 +- .../structs/VkDrawIndexedIndirectCommand.txt | 2 +- .../structs/VkFramebufferCreateInfo.txt | 10 +- .../structs/VkGraphicsPipelineCreateInfo.txt | 10 +- .../validity/structs/VkImageCreateInfo.txt | 58 +-- .../structs/VkImageSubresourceRange.txt | 4 +- .../validity/structs/VkMemoryAllocateInfo.txt | 4 +- .../structs/VkPhysicalDeviceFeatures.txt | 2 +- .../VkPipelineDepthStencilStateCreateInfo.txt | 2 +- .../VkPipelineDynamicStateCreateInfo.txt | 2 +- ...VkPipelineInputAssemblyStateCreateInfo.txt | 2 +- .../structs/VkPipelineLayoutCreateInfo.txt | 10 +- ...VkPipelineRasterizationStateCreateInfo.txt | 4 +- .../VkPipelineVertexInputStateCreateInfo.txt | 2 +- .../VkPipelineViewportStateCreateInfo.txt | 6 +- .../validity/structs/VkPushConstantRange.txt | 8 +- .../structs/VkRenderPassBeginInfo.txt | 2 +- .../structs/VkRenderPassCreateInfo.txt | 4 +- .../validity/structs/VkSamplerCreateInfo.txt | 2 +- .../structs/VkSparseBufferMemoryBindInfo.txt | 2 +- .../structs/VkSparseImageMemoryBindInfo.txt | 2 +- .../VkSparseImageOpaqueMemoryBindInfo.txt | 2 +- .../vulkan/validity/structs/VkSubmitInfo.txt | 1 + .../validity/structs/VkSubpassDependency.txt | 4 +- .../validity/structs/VkSubpassDescription.txt | 2 +- .../validity/structs/VkWriteDescriptorSet.txt | 16 +- doc/specs/vulkan/vkapi.py | 8 +- doc/specs/vulkan/vkspec.txt | 7 +- src/spec/generator.py | 31 +- src/spec/readme.tex | 26 +- src/spec/reg.py | 44 ++- src/spec/registry.rnc | 24 +- src/spec/vk.xml | 319 +++++++++-------- src/vulkan/vulkan.h | 17 +- 118 files changed, 1237 insertions(+), 759 deletions(-) create mode 100644 ChangeLog.txt diff --git a/ChangeLog.txt b/ChangeLog.txt new file mode 100644 index 00000000..bdebf9fe --- /dev/null +++ b/ChangeLog.txt @@ -0,0 +1,275 @@ +Update Log for the Vulkan-Docs repository on Github. This just +summarizes the periodic public updates, not individual commits to the +tree. For the most part, commits on Github are done as single large +patches at the release point, collecting together the resolution of many +Khronos internal and public issues. + +----------------------------------------------------- + +February 16, 2016 - Vulkan 1.0 initial public release + +----------------------------------------------------- + +Change log for February 25, 2015 Vulkan 1.0.4 spec update: + * Bump API patch number from 3 to 4 for the first public update to the + spec. Add patch number to the spec title (this will be done + automatically from XML, later). + * Fixes for numerous editorial issues. Regularize descriptions of + variable-length array queries. Properly tag enumerants so they come + out in the right font (many were mislabeled in usage tags in vk.xml, + or not tagged). Spelling and markup corrections (public issue 4). + * Fix typos and clearly separate description of different types of + memory areas (public issue 5). + * Use standards-compliant preprocessor guard symbols on headers + (public issue 7). + * Note that Github users can't currently set labels on issues, and + recommend a fallback approach (public issue 15). + * Use latexmath prefix on len= attributes (public issue 29). + * Make flink:vkCmdUpdateBuffer pname:dataSize limit consistent (public + issue 65). + * Add VK_KHR_mirror_clamp_to_edge extension to core API branch, as an + optional feature not introducing new commands or enums (internal + issue 104). + * Cleanup invariance language inherited from the GL specification to + not refer to nonexistent (GL-specific) state (internal issue 111). + * Modify the flink:vkCmdDrawIndexed pname:vertexOffset definition to + not be the "base offset within the index buffer" but rather the + "value added to the vertex index before indexing into the vertex + buffer" (internal issue 118). + * Fix drawing chapter in the "Programmable Primitive Shading" section + where it described categories of drawing commands. It referenced + flink:vkCmdDrawIndexed twice. Replace the second reference with + flink:vkCmdDrawIndexedIndirect (internal issue 119). + * Typo fixed in <> sparse memory example (internal issue 122). + * Add flink:VkDisplayPlaneAlphaFlagsKHR to section of + VK_KHR_display extension (internal issue 125) + * Add missing optional="false,true" to + flink:vkGetImageSparseMemoryRequirements + pname:pSparseMemoryRequirementCount parameter (internal issue 132) + * Rename ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT to + ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT + (internal issue 133) + * Fix a handful of broken cross-references in the + <> chapter (internal issue 134). + * Fix "Input Attachement" GLSL example to use correct syntax (internal + issue 135). + * Update XML schema and documentation to accomodate recently added + attributes for validity. Add some introductory material describing + design choices and pointing to the public repository to file issues. + * Put include of validity in the core spec extensions chapter on its + own line, so that asciidoc is happy. + * Fix vertexOffset language to specify that it's the value added to + the vertex index before indexing into the vertex buffer, not the + base offset within the index buffer. + * Fix error in the description of flink:vkCmdNextSubpass. + +----------------------------------------------------- + +Change log for March 4, 2016 Vulkan 1.0.5 spec update: + * Bump API patch number to 5 for this update. + +Github Issues: + * Correctly describe slink:VkPhysicalDeviceProperties pname:deviceName + member as a string, not a pointer to a string. Also one typo fix for + "hetereogeneous" (public issue 4). + * Replace maynot: macro with may: not, and "may: or maynot:" with + "may:" (public issue 4). + * Clarify that redundantly setting the state of a fence or event has + no effect (public issue 4). + * Minor fixes to ref pages to track descriptions of memory bits that + changed in the core spec. Fix name of a member in the description of + sname:sname:VkPipelineMultisampleStateCreateInfo (public issues 8, + 13). + * Remove redundant validity statement for + sname:VkGraphicsPipelineCreateInfo::pname:stageCount (public issue + 14). + * Fix typos in chapters 7-9 (public issue 14). + * Clarify the example demonstrating the behavior of + code:OpMemoryBarrier in the + <<shaders-execution-memory-ordering,shader memory acces + ordering>> section (public issue 16). + * Specify that freeing mapped memory implicitly unmaps the memory in + the description of flink:vkFreeMemory (public issue 17). + * Forbid allocation callbacks from calling into the API in the + <<memory-allocation,memory allocation>> section (public issue + 20). + * Add missing validity rules about size being greater than 0 and + offset being less than size of object. Fix + flink:VkMappedMemoryRange's misinterpretation of offset (public + issues 27, 31). + * Add validity rule disallowing overlapping source/destination + descriptors in flink:VkCopyDescriptorSet (public issue 32). + * Clarify that array and matrix stride has to be a multiple of the + base alignment of the array or matrix in the + <<interfaces-resources-layout,Offset and Stride Assignment>> + section (public issue 38). + * Correct parenthesis floor nesting error in equation for + <<textures-RGB-sexp,RGB to shared exponent conversion>>. + Clarify case of when exp' is forced to 0, avoiding log2(0) undefined + problem (public issue 40). + * Remove redundant statement from the code:FragDepth description in + the <<interfaces-builtin-variables,Built-In Variables>> + section (public issue 47). + * Define the clamping of the + <<textures-level-of-detail-operation,bias added to the scale + factor>> by linking to the slink:VkPhysicalDevice feature + pname:maxSamplerLodBias (public issue 64). + * Fix typo "optimal linear resources" and clarify the set of resources + <<features-limits-bufferImageGranularity,the + pname:bufferImageGranularity resource>> applies to (public issue + 67). + * Replace 'descriptor accessed by a pipeline' language for + sname:VkDescriptorSetAllocateInfo with more precise phrasing about + binding a descriptor set before a command that invokes work using + that set (public issue 69). + * tstripadj.svg contained an Inkscape tag which caused Firefox and IE + 11 to fail to render it, and was illegal SVG. Generating Plain SVG + from the Inkscape SVG source fixes this (public issue 70). + * Fix validity for sname:VkVertexInputBindingDescription and + sname:VkVertexInputAttributeDescription numbers (public issue 72). + +Internal Issues: + * Clarify the meaning of + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT in + elink:VkFormatFeatureFlagBits with respect to depth compare + (internal issue 107). + * Added a note explaining that ename:VK_QUEUE_TRANSFER_BIT may or may + not be reported for a queue family that already supports + ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT as the + former is a strict subset of the latter ones (internal issue 116). + * Add validity language for sname:VkDescriptorSetAllocateInfo about + exceeding the descriptor pool capacity (internal issue 140). + * Add ename:VK_INCOMPLETE success code for + flink:vkEnumeratePhysicalDevices query (internal issue 163). + +Other Commits: + * Add the VK_NV_glsl_shader extension definitions to the API. + * Update GL_KHR_vulkan_glsl with 1) origin_upper_left as default 2) + specialization array constant semantics. + * Corrected/updated Data Format Specification date. + +----------------------------------------------------- + +Change log for March 10, 2016 Vulkan 1.0.6 spec update: + + * Bump API patch number and header version number to 6 for this + update. + +Github Issues: + + * Define 'invocation group' for compute and graphics shaders. Cleanup + definition and use of 'workgroup', and add glossary entries (public + issue 1). + + * Various minor editorial fixes (public issue 33). + + * Clarify locations for block members in the + <<interfaces-iointerfaces-locations,Location Assignment>> + section (public issue 45). + + * Editorial fixes for <<commandbuffer-allocation,Command Buffer + Allocation>> section (public issues 54, 59). + + * Clarify behavior of depth test in the <<fragops-depth,Depth + Test>> section (public issues 80, 81). + + * Remove discussion of return codes from + flink:vkGetPhysicalDeviceSparseImageFormatProperties and + flink:vkGetImageSparseMemoryRequirements, which don't return values + (public issue 82). + + * Allow flink:vkCmdDrawIndirect and flink:vkCmdDrawIndexedIndirect + pname:drawCount of 0, as well as 1, when the multiDrawIndirect + feature is not supported (public issue 88). + + * Remove confusing wording in the <<features-limits,Limits>> + section describing the slink:VkPhysicalDeviceLimits + pname:minTexelBufferOffsetAlignment, + pname:minUniformBufferOffsetAlignment, and + pname:minStorageBufferOffsetAlignment members as both minimums and + maximums (public issue 91). + + * Clarified that only the RGB components should be affected in places + where sRGB is referred to in the spec, such as ASTC formats. Minor + re-wording to avoid "color space" when actively incorrect, now that + we refer to the Data Format Spec which actually makes a distinction + between color space and transfer function (public issue 94). + + * Treat pname:pPropertyCount == 0 consistently in + flink:vkEnumerateInstanceLayerProperties and + flink:vkEnumerateDeviceLayerProperties (public issue 99) + + * Cleanup minor editorial issues in chapters 14-17 (public issue 100). + + * Clarify definition of flink:vkEnumerateInstanceExtensionProperties + and flink:vkEnumerateDeviceExtensionProperties (public issue 101). + + * Define the flink:vkEnumerateInstanceExtensionProperties and + flink:vkEnumerateDeviceExtensionProperties pname:pLayerName + parameter to be a pointer to a null-terminated UTF-8 string (public + issue 101). + + * Rearrange "Missing information" references in mandatory format + tables (public issue 101). + + * Clarify that the enumerated extensions returned by + flink:vkEnumerateInstanceExtensionProperties and + flink:vkEnumerateDeviceExtensionProperties will only include + extensions provided by the platform or extensions implemented in + implicitly enabled layers (public issue 101). + + * Miscellaneous editorial fixes. Include the Vulkan spec patch number + in the PDF title. Fix label on <<fig-non-strict-lines,Non + strict lines>> diagram. Use more easily distinguished symbols in + tables in the <<features-required-format-support,Required + Format Support>> section. Don't require FQDNs used as layer names be + encoded in lower case if not possible, in the + <<extensions-naming-conventions, Extension and Layer Naming + Conventions>> section (public issues 101, 119, 121). + +Internal Issues: + + * Fixed excessive spacing in tables in XHTML (internal issue 18). + + * Clarify that ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT + applies to secondary command buffers. Previously spec only referred + to the members of pname:pCommandBuffers being affected by this bit. + Added a separate slink:VkSubmitInfo Valid Usage restriction + specifying that ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT + also applies to any secondary command buffers that are recorded into + the primary command buffers in pname:pCommandBuffers (internal issue + 106). + + * Clarify that slink:VkDeviceCreateInfo::pname:pEnabledFeatures can be + NULL (internal issue 117). + + * Remove "the value of" where it is redundant (e.g. speaking of an API + parameter, struct member, or SPIR-V variable, but not when speaking + of color components) (internal issue 175). + + * Forced patch version to always be 0 in the header. Add a + "VK_API_VERSION__" macro for people to use to do the + right thing. Add a VK_HEADER_VERSION which captures the header + release number independent of the spec patch number (internal issue + 176). + + * Correct description of + slink:VkPipelineShaderStageCreateInfo::pname:pName to "a pointer to + a null-terminated UTF-8 string" (internal issue #197). + +Other Commits: + + * Updated DataFormat spec reference to the new date for revision 5 of + that spec. + + * Fixed KEEP option (to retain LaTeX intermediate files) in the + Makefile to be included when edited there, as well as set on the + command line. + + * Reserve and add "VK_IMG_filter_cubic" to the registry, and implement + script functionality to add and remove validity from existing + functions. Includes schema and readme changes. + + * Update GL_KHR_vulkan_glsl so push_constants do not have descriptor + sets. diff --git a/README.md b/README.md index 823f05a6..20457bd9 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ Repository Structure -------------------- ``` +README.md This file +ChangeLog.txt Change log summary doc/specs/ Main documentation tree vulkan/ Vulkan specification appendices/ Appendices - one file each diff --git a/doc/specs/misc/GL_KHR_vulkan_glsl.txt b/doc/specs/misc/GL_KHR_vulkan_glsl.txt index b1cee3cf..1e2e0c2a 100644 --- a/doc/specs/misc/GL_KHR_vulkan_glsl.txt +++ b/doc/specs/misc/GL_KHR_vulkan_glsl.txt @@ -33,8 +33,8 @@ Status Version - Last Modified Date: 28-Feb-2016 - Revision: 27 + Last Modified Date: 7-Mar-2016 + Revision: 28 Number @@ -700,22 +700,22 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification (Making all stages have the same rule that dvec3 takes two locations...) - Change section 4.4.1.3 "Fragment Shader Inputs" from + Change section 4.4.1.3 "Fragment Shader Inputs" from - "By default, gl_FragCoord assumes a lower-left origin for window - coordinates ... For example, the (x, y) location (0.5, 0.5) is - returned for the lowerleft-most pixel in a window. The origin can be - changed by redeclaring gl_FragCoord with the - origin_upper_left identifier." + "By default, gl_FragCoord assumes a lower-left origin for window + coordinates ... For example, the (x, y) location (0.5, 0.5) is + returned for the lowerleft-most pixel in a window. The origin can be + changed by redeclaring gl_FragCoord with the + origin_upper_left identifier." - To + To - "The gl_FragCoord built-in variable assumes an upper-left origin for - window coordinates ... For example, the (x, y) location (0.5, 0.5) is - returned for the upper-left-most pixel in a window. The origin can be - explicitly set by redeclaring gl_FragCoord with the origin_upper_left - identifier. It is a compile-time error to change it to - origin_lower_left." + "The gl_FragCoord built-in variable assumes an upper-left origin for + window coordinates ... For example, the (x, y) location (0.5, 0.5) is + returned for the upper-left-most pixel in a window. The origin can be + explicitly set by redeclaring gl_FragCoord with the origin_upper_left + identifier. It is a compile-time error to change it to + origin_lower_left." Add to the end of section 4.4.3 Uniform Variable Layout Qualifiers: @@ -735,12 +735,14 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification After the paragraphs about binding ("The binding identifier..."), add "The /set/ identifier specifies the descriptor set this object belongs to. - It is a compile-time error to apply to just a qualifier or a member of a - block. Any uniform or shader storage block declared without a /set/ - identifier is assigned to descriptor set 0. Similarly, any sampler, - texture, or subpass input type declared as a uniform, but without a - /set/ identifier is also assigned to descriptor set 0. - + It is a compile-time error to apply /set/ to a standalone qualifier or to + a member of a block. It is a compile-time error to apply /set/ to a block + qualified as a push_constant. By default, any non-push_constant uniform + or shader storage block declared without a /set/ identifier is assigned to + descriptor set 0. Similarly, any sampler, texture, or subpass input type + declared as a uniform, but without a /set/ identifier is also assigned + to descriptor set 0. + "If applied to an object declared as an array, all elements of the array belong to the specified /set/. @@ -1152,7 +1154,8 @@ Revision History Rev. Date Author Changes ---- ----------- ------- -------------------------------------------- - 27 28-Feb-2016 JohnK Make the default by origin_upper_left + 28 7-Mar-2016 JohnK Make push_constants not have sets + 27 28-Feb-2016 JohnK Make the default by origin_upper_left 26 17-Feb-2016 JohnK Expand specialized array semantics 25 10-Feb-2016 JohnK Incorporate resolutions from the face to face 24 28-Jan-2016 JohnK Update the resolutions from the face to face diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile index fae6d7e2..7806a620 100644 --- a/doc/specs/vulkan/Makefile +++ b/doc/specs/vulkan/Makefile @@ -56,6 +56,11 @@ PDFXSL :=config/vkspec-dblatex.xsl PDFSTY :=config/vkspec-dblatex.sty PYTHON ?= python3 +# Set VERBOSE to -v to see what asciidoc is doing. +# Set KEEP to -d to retain intermediate dblatex files +VERBOSE = +KEEP = + # asciidoc / a2x attributes to set. # XMLLINT normally unset - to detect problems with intermediate files # NOTEOPTS sets options controlling which NOTEs are generated @@ -66,7 +71,7 @@ PYTHON ?= python3 # A2XOPTS options for a2x->{HTML,PDF} output XMLLINT = --no-xmllint NOTEOPTS = -a editing-notes -a implementation-guide -ATTRIBOPTS = -a apiname=$(APINAME)@ -a mathjax +ATTRIBOPTS = -a apiname=$(APINAME)@ -a apirevision="$(SPECREVISION)" -a mathjax VKCONF = config/vkspec.conf ADOCOPTS = $(ATTRIBOPTS) $(NOTEOPTS) -f config/mathjax-asciidoc.conf \ -f $(VKCONF) $(VERBOSE) @@ -86,11 +91,6 @@ CHUNKEDXSL = config/docbook-xsl/chunked.xsl DBLATEXOPTS := $(KEEP) -V -T db2latex -I. -I images -I images/icons -s $(DBLATEXPREFIX)/asciidoc-dblatex.sty A2XDBLATEXOPTS := --dblatex-opts='$(DBLATEXOPTS)' -# Set VERBOSE to -v to see what asciidoc is doing. -# Set KEEP to -d to retain intermediate dblatex files -VERBOSE = -KEEP = - # Misc. files to clean up (see 'checkinc' target below) DIRT := @@ -124,9 +124,9 @@ CHAPTERS := $(wildcard chapters/[A-Za-z]*.txt appendices/[A-Za-z]*.txt) INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpointers/*.txt validity/structs/*.txt validity/protos/*.txt) # All non-format-specific dependencies COMMONDOCS := $(CHAPTERS) $(INCLUDES) -# A generate included file with the spec version, date, and git commit +# A generated included file with the spec version, date, and git commit SPECVERSION = specversion.txt -SPECREVISION = 1.0.5 +SPECREVISION = 1.0.6 SPECREMARK = # Spec targets diff --git a/doc/specs/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt b/doc/specs/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt index a47958b0..a1b08aaf 100644 --- a/doc/specs/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt +++ b/doc/specs/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt @@ -20,7 +20,7 @@ which the additional half of the new image is a mirror image of the original image. This new mode relaxes the need to generate images whose opposite edges -match by using the original image to generate a matching "mirror image". +match by using the original image to generate a matching ``mirror image''. This mode allows the texture to be mirrored only once in the negative s, t, and r directions. @@ -56,4 +56,4 @@ Creating a sampler with the new address mode in each dimension === Version History * Revision 1, 2016-02-16 (Tobias Hector) - - Initial draft \ No newline at end of file + - Initial draft diff --git a/doc/specs/vulkan/appendices/compressedtex.txt b/doc/specs/vulkan/appendices/compressedtex.txt index bf5ae251..0fe8bc21 100644 --- a/doc/specs/vulkan/appendices/compressedtex.txt +++ b/doc/specs/vulkan/appendices/compressedtex.txt @@ -11,12 +11,7 @@ Specification>>, version 1.1. Unless otherwise described, the quantities encoded in these compressed formats are treated as normalized, unsigned values. -<<< - -[[appendix-compressedtex-bc]] -== Block Compressed Image Formats - -Those formats listed as ``sRGB-encoded'' have in-memory representations of +Those formats listed as sRGB-encoded have in-memory representations of _R_, _G_ and _B_ components which are nonlinearly-encoded as latexmath:[$R'$], latexmath:[$G'$], and latexmath:[$B'$]; any alpha component is unchanged. As part of filtering, the nonlinear @@ -26,6 +21,11 @@ unchanged. The conversion between linear and nonlinear encoding is performed as described in the ``KHR_DF_TRANSFER_SRGB'' section of the Khronos Data Format Specification. +<<< + +[[appendix-compressedtex-bc]] +== Block Compressed Image Formats + .Mapping of {apiname} BC formats to descriptions [width="90%",options="header",cols="5,4"] |============================== @@ -84,9 +84,9 @@ ASTC formats are described in the ``ASTC Compressed Texture Image Formats'' chapter of the Khronos Data Format Specification. .Mapping of {apiname} ASTC formats to descriptions -[width="80%",options="header",cols="6,1,1"] +[width="75%",options="header",cols="63%,15%,22%"] |============================== -| VkFormat ^| Block size ^| sRGB output +| VkFormat ^| Block size ^| sRGB-encoded | ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK ^|latexmath:[$4\times 4$] ^|No | ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK ^|latexmath:[$4\times 4$] ^|Yes | ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK ^|latexmath:[$5\times 4$] ^|No diff --git a/doc/specs/vulkan/appendices/extensions.txt b/doc/specs/vulkan/appendices/extensions.txt index 57a8bb8a..1510300f 100644 --- a/doc/specs/vulkan/appendices/extensions.txt +++ b/doc/specs/vulkan/appendices/extensions.txt @@ -68,6 +68,7 @@ Some general rules to simplify the specific rules below: API, or a subset of the supported extensions, must: continue to work in such an implementation without changes in behavior. +[[extensions-naming-conventions]] == Extension and Layer Naming Conventions * Extensions are named with the syntax: +VK_AUTHOR_+. @@ -118,17 +119,23 @@ only for layers. prefix mechanism is needed to allow creating unique layer names without registering an author prefix. Layer authors that prefer not to register an author prefix can: instead use a fully-qualified domain name (FQDN) - in reverse-order as an author prefix, using all lower-case characters, - and replacing +.+ (period) with `_` (underscore) characters. For - example, a layer written by the owner of www.3dxcl.invalid would use - the prefix `VK_LAYER_invalid_3dxcl_www_`. FQDNs must: be encoded in - UTF-8. + in reverse-order as an author prefix, replacing +.+ (period) with `_` + (underscore) characters. For example, a layer written by the owner of + www.3dxcl.invalid would use the prefix `VK_LAYER_invalid_3dxcl_www_`. + FQDNs must: be encoded in UTF-8, and should: be in lower case, if + possible for the domain FQDN in question. [NOTE] .Note ==== To avoid linking to a nonexistent domain, the reserved TLD +.invalid+ is used. + +``Lower case'' is not a straightforward concept for all possible +encodings of domain names. We suggest using RFC 5895 to interpret this +phrase. The recommendation is that the representation of a FQDN in a layer +name should be the same way one would naturally type that name into a web +browser. ==== diff --git a/doc/specs/vulkan/appendices/glossary.txt b/doc/specs/vulkan/appendices/glossary.txt index 5fdddd8c..b44fc907 100644 --- a/doc/specs/vulkan/appendices/glossary.txt +++ b/doc/specs/vulkan/appendices/glossary.txt @@ -162,6 +162,10 @@ Depth/Stencil Format:: Depth/Stencil Image (or ImageView):: A sname:VkImage (or sname:VkImageView) with a depth/stencil format. +Derivative Group:: + A set of fragment shader invocations that cooperate to compute derivatives, + including implicit derivatives for sampled image operations. + Descriptor:: Information about a resource or resource view written into a descriptor set that is used to access the resource or view from a shader. @@ -294,6 +298,9 @@ Framebuffer Coordinates:: Front-Facing:: See Facingness. +Global Workgroup:: + A collection of local workgroups dispatched by a single dispatch command. + Handle:: An opaque integer or pointer value used to refer to a {apiname} object. Each object type has a unique handle type. @@ -385,6 +392,15 @@ Invocation (Shader):: single vertex's execution of a vertex shader or a single fragment's execution of a fragment shader. +Invocation Group:: + A set of shader invocations that are executed in parallel and that must: + execute the same control flow path in order for control flow to be + considered dynamically uniform. + +Local Workgroup:: + A collection of compute shader invocations invoked by a single dispatch + command, which share shared memory and can synchronize with each other. + Logical Device:: An object that represents the application's interface to the physical device. The logical device is the parent of most {apiname} objects. diff --git a/doc/specs/vulkan/chapters/clears.txt b/doc/specs/vulkan/chapters/clears.txt index bbe45def..2af72a0a 100644 --- a/doc/specs/vulkan/chapters/clears.txt +++ b/doc/specs/vulkan/chapters/clears.txt @@ -88,8 +88,7 @@ include::../protos/vkCmdClearAttachments.txt[] use. * pname:rectCount is the number of entries in the pname:pRects array. * pname:pRects points to an array of slink:VkClearRect structures defining - regions within each selected attachment to clear. describe these - regions. + regions within each selected attachment to clear. fname:vkCmdClearAttachments can: clear multiple regions of each attachment used in the current subpass of a render pass instance. This command must: be diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt index 18fab83d..089dd9b8 100644 --- a/doc/specs/vulkan/chapters/cmdbuffers.txt +++ b/doc/specs/vulkan/chapters/cmdbuffers.txt @@ -161,20 +161,22 @@ implicitly freed and become invalid. Command buffers allocated from a given pool do not need to be freed before destroying that command pool. -[[commandbuffers-lifetime]] -== Command Buffer Lifetime +[[commandbuffer-allocation]] +== Command Buffer Allocation and Management Command buffers are allocated by calling: include::../protos/vkAllocateCommandBuffers.txt[] * pname:device is the logical device that owns the command pool. - * pname:pAllocateInfo is an instance of the - sname:VkCommandBufferAllocateInfo structure which defines additional - information about creating the pool. - * pname:pCommandBuffers points to an array in which the allocated command - buffers are returned. Each allocated command buffer begins in the - initial state. + * pname:pAllocateInfo is a pointer to an instance of the + sname:VkCommandBufferAllocateInfo structure describing parameters of the + allocation. + * pname:pCommandBuffers is a pointer to an array of sname:VkCommandBuffer + handles in which the resulting command buffer objects are returned. The + array must be at least the length specified by the + pname:commandBufferCount member of pname:pAllocateInfo. Each allocated + command buffer begins in the initial state. include::../validity/protos/vkAllocateCommandBuffers.txt[] diff --git a/doc/specs/vulkan/chapters/copies.txt b/doc/specs/vulkan/chapters/copies.txt index f989ffa1..8dec157b 100644 --- a/doc/specs/vulkan/chapters/copies.txt +++ b/doc/specs/vulkan/chapters/copies.txt @@ -449,11 +449,12 @@ following conversion rules apply: * Format conversions on unorm, snorm, unscaled and packed float formats of the copied aspect of the image are performed by first converting the pixels to float values. - * In case of sRGB source format, values are converted to linear color - space prior to filtering. + * In case of sRGB source format, nonlinear RGB values are converted to + linear representation prior to filtering. * After filtering, the float values are first clamped and then cast to the - destination image format. In case of sRGB destination format, values are - converted to sRGB color space before writing the pixel to the image. + destination image format. In case of sRGB destination format, linear RGB + values are converted to nonlinear representation before writing the + pixel to the image. Signed and unsigned integers are converted by first clamping to the representable range of the destination format, then casting the value. diff --git a/doc/specs/vulkan/chapters/descriptorsets.txt b/doc/specs/vulkan/chapters/descriptorsets.txt index b9ac4c2b..b5ab6495 100644 --- a/doc/specs/vulkan/chapters/descriptorsets.txt +++ b/doc/specs/vulkan/chapters/descriptorsets.txt @@ -761,6 +761,7 @@ VkDescriptorSetLayout myDescriptorSetLayout[2]; myResult = vkCreateDescriptorSetLayout( myDevice, &myDescriptorSetLayoutCreateInfo[0], + NULL, &myDescriptorSetLayout[0]); // @@ -769,6 +770,7 @@ myResult = vkCreateDescriptorSetLayout( myResult = vkCreateDescriptorSetLayout( myDevice, &myDescriptorSetLayoutCreateInfo[1], + NULL, &myDescriptorSetLayout[1]); ------------------------------------------------------------------------------- @@ -988,7 +990,7 @@ pname:maxBoundDescriptorSets in <>). .API example [source,{basebackend@docbook:c++:cpp}] --------------------------------------------------- -const VkDescriptorSetLayout layouts = { layout1, layout2 }; +const VkDescriptorSetLayout layouts[] = { layout1, layout2 }; const VkPushConstantRange ranges[] = { @@ -1009,6 +1011,7 @@ const VkPipelineLayoutCreateInfo createInfo = { VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // sType NULL, // pNext + 0, // flags 2, // setLayoutCount layouts, // pSetLayouts 2, // pushConstantRangeCount @@ -1019,6 +1022,7 @@ VkPipelineLayout myPipelineLayout; myResult = vkCreatePipelineLayout( myDevice, &createInfo, + NULL, &myPipelineLayout); --------------------------------------------------- @@ -1156,7 +1160,7 @@ include::../structs/VkDescriptorSetAllocateInfo.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:descriptorPool is the pool which the sets will be allocated from. - * pname:descriptorSetCount determines the number descriptor sets to be + * pname:descriptorSetCount determines the number of descriptor sets to be allocated from the pool. * pname:pSetLayouts is an array of descriptor set layouts, with each member specifying how the corresponding descriptor set is allocated. @@ -1357,7 +1361,7 @@ pname:descriptorType and pname:stageFlags, and must: all either use immutable samplers or must: all not use immutable samplers. Each element in the pname:pDescriptorCopies array is a -sname:VkCopyDescriptorSet structure describing an operation copying +slink:VkCopyDescriptorSet structure describing an operation copying descriptors between sets. The definition of sname:VkCopyDescriptorSet is: include::../structs/VkCopyDescriptorSet.txt[] @@ -1385,7 +1389,7 @@ be bound to the command buffer by calling: include::../protos/vkCmdBindDescriptorSets.txt[] - * pname:commandbuffer is the command buffer that the descriptor sets will + * pname:commandBuffer is the command buffer that the descriptor sets will be bound to. * pname:pipelineBindPoint is a elink:VkPipelineBindPoint indicating whether the descriptors will be used by graphics pipelines or compute @@ -1404,10 +1408,6 @@ include::../protos/vkCmdBindDescriptorSets.txt[] * pname:pDynamicOffsets is a pointer to an array of basetype:uint32_t values specifying dynamic offsets. -If any of the sets being bound include dynamic uniform or storage buffers, -then pname:pDynamicOffsets includes one element for each array element -in each dynamic descriptor type binding in each set. Values are taken from - fname:vkCmdBindDescriptorSets causes the sets numbered [pname:firstSet.. pname:firstSet+pname:descriptorSetCount-1] to use the bindings stored in pname:pDescriptorSets[0..pname:descriptorSetCount-1] for subsequent @@ -1432,7 +1432,7 @@ then pname:pDynamicOffsets includes one element for each array element in each dynamic descriptor type binding in each set. Values are taken from pname:pDynamicOffsets in an order such that all entries for set N come before set N+1; within a set, entries are ordered by the binding numbers in -the decriptor set layouts; and within a binding array, elements are in +the descriptor set layouts; and within a binding array, elements are in order. pname:dynamicOffsetCount must: equal the total number of dynamic descriptors in the sets being bound. @@ -1482,7 +1482,7 @@ buffer. Push constants are updated by calling: include::../protos/vkCmdPushConstants.txt[] - * pname:commandbuffer is the command buffer in which the push constant + * pname:commandBuffer is the command buffer in which the push constant update will be recorded. * pname:layout is the pipeline layout used to program the push constant updates. diff --git a/doc/specs/vulkan/chapters/devsandqueues.txt b/doc/specs/vulkan/chapters/devsandqueues.txt index 78e02f3a..13a4d7c2 100644 --- a/doc/specs/vulkan/chapters/devsandqueues.txt +++ b/doc/specs/vulkan/chapters/devsandqueues.txt @@ -33,7 +33,7 @@ available is returned in pname:pPhysicalDeviceCount. Otherwise, pname:pPhysicalDeviceCount must: point to a variable set by the user to the number of elements in the pname:pPhysicalDevices array, and on return the variable is overwritten with the number of structures actually -written to pname:pPhysicalDevices. If the value of +written to pname:pPhysicalDevices. If pname:pPhysicalDeviceCount is less than the number of physical devices available, at most pname:pPhysicalDeviceCount structures will be written. If pname:pPhysicalDeviceCount is smaller than the number of @@ -107,15 +107,15 @@ constraints and guidelines: into a system-on-chip (SoC), this should: be the supplier of the silicon IP used to create the GPU or other accelerator. * If the vendor of the physical device has a valid PCI vendor ID issued by - https://pcisig.com/[PCI-SIG], that ID should: be used to construct the - value of pname:vendorID as described above for PCI-based + https://pcisig.com/[PCI-SIG], that ID should: be used to construct + pname:vendorID as described above for PCI-based implementations. Implementations that do not return a PCI vendor ID in pname:vendorID must: return a valid Khronos vendor ID, obtained as defined in the <> section. Khronos vendor IDs are allocated starting at 0x10000, to distinguish them from the PCI vendor ID namespace. - * The vendor of the physical device is responsible for selecting the - value of pname:deviceID. The value selected should: uniquely + * The vendor of the physical device is responsible for selecting + pname:deviceID. The value selected should: uniquely identify both the device version and any major configuration options (for example, core count in the case of multicore devices). The same device ID should: be used for all physical implementations of that @@ -159,7 +159,7 @@ available is returned in pname:pQueueFamilyPropertyCount. Otherwise, pname:pQueueFamilyPropertyCount must: point to a variable set by the user to the number of elements in the pname:pQueueFamilyProperties array, and on return the variable is overwritten with the number of structures actually -written to pname:pQueueFamilyProperties. If the value of +written to pname:pQueueFamilyProperties. If pname:pQueueFamilyPropertyCount is less than the number of queue families available, at most pname:pQueueFamilyPropertyCount structures will be written. @@ -265,7 +265,7 @@ latexmath:[$(1,1,1)$] in pname:minImageTransferGranularity, meaning that there are no additional restrictions on the granularity of image transfer operations for these queues. Other queues supporting image transfer operations are only required: to support whole mip level -transfers, thus the value of pname:minImageTransferGranularity for +transfers, thus pname:minImageTransferGranularity for queues belonging to such queue families may: be latexmath:[$(0,0,0)$]. The <> section describes memory properties @@ -346,10 +346,10 @@ The members of sname:VkDeviceCreateInfo have the following meanings: names of extensions to enable for the created device. See the <> chapter for further details. - * pname:pEnabledFeatures is a pointer to a sname:VkPhysicalDeviceFeatures - structure that contains boolean indicators of all the features to be - enabled. Refer to the <> section for further - details. + * pname:pEnabledFeatures is `NULL` or a pointer to a + sname:VkPhysicalDeviceFeatures structure that contains boolean + indicators of all the features to be enabled. Refer to the + <> section for further details. include::../validity/structs/VkDeviceCreateInfo.txt[] @@ -554,7 +554,7 @@ The members of sname:VkDeviceQueueCreateInfo have the following meanings: * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. * pname:queueFamilyIndex is an unsigned integer indicating the index of - the queue family to create on this device. The value of this index + the queue family to create on this device. This index corresponds to the index of an element of the pname:pQueueFamilyProperties array that was returned by fname:vkGetPhysicalDeviceQueueFamilyProperties. diff --git a/doc/specs/vulkan/chapters/dispatch.txt b/doc/specs/vulkan/chapters/dispatch.txt index 256f958f..0a21e543 100644 --- a/doc/specs/vulkan/chapters/dispatch.txt +++ b/doc/specs/vulkan/chapters/dispatch.txt @@ -17,12 +17,12 @@ include::../protos/vkCmdDispatch.txt[] * pname:commandBuffer is the command buffer into which the command will be recorded. - * pname:x is the number of workgroups to dispatch in the X dimension. - * pname:y is the number of workgroups to dispatch in the Y dimension. - * pname:z is the number of workgroups to dispatch in the Z dimension. + * pname:x is the number of local workgroups to dispatch in the X dimension. + * pname:y is the number of local workgroups to dispatch in the Y dimension. + * pname:z is the number of local workgroups to dispatch in the Z dimension. -When the command is executed, workgroups are assembled using pname:x, -pname:y, and pname:z. +When the command is executed, a global workgroup consisting of +latexmath:[$x \times y \times z$] local workgroups is assembled. include::../validity/protos/vkCmdDispatch.txt[] diff --git a/doc/specs/vulkan/chapters/extensions.txt b/doc/specs/vulkan/chapters/extensions.txt index e322ccc1..ce68a1e3 100644 --- a/doc/specs/vulkan/chapters/extensions.txt +++ b/doc/specs/vulkan/chapters/extensions.txt @@ -69,7 +69,7 @@ the number of layer properties available is returned in pname:pPropertyCount. Otherwise, pname:pPropertyCount must: point to a variable set by the user to the number of elements in the pname:pProperties array, and on return the variable is overwritten with the number of structures actually written to -pname:pProperties. If the value of pname:pPropertyCount is less than the +pname:pProperties. If pname:pPropertyCount is less than the number of layer properties available, at most pname:pPropertyCount structures will be written. If pname:pPropertyCount is smaller than the number of layers available, ename:VK_INCOMPLETE will be returned instead of @@ -121,8 +121,8 @@ To query the available instance extensions, call: include::../protos/vkEnumerateInstanceExtensionProperties.txt[] - * pname:pLayerName is either `NULL` or the name of a instance layer to - retrieve extensions from. + * pname:pLayerName is either `NULL` or a pointer to a null-terminated + UTF-8 string naming the instance layer to retrieve extensions from. * pname:pPropertyCount is a pointer to an integer related to the number of extension properties available or queried, as described below. * pname:pProperties is either `NULL` or a pointer to an array of @@ -130,11 +130,10 @@ include::../protos/vkEnumerateInstanceExtensionProperties.txt[] include::../validity/protos/vkEnumerateInstanceExtensionProperties.txt[] -Any instance extensions provided by the {apiname} implementation or by -implicitly enabled layers, but not by explicitly enabled layers, are -returned when pname:pLayerName parameter is `NULL`. When pname:pLayerName is -the name of a layer, the instance extensions provided by that layer are -returned. +When pLayerName parameter is NULL, only extensions provided by the {apiname} +implementation or by implicitly enabled layers are returned. +When pname:pLayerName is the name of a layer, the instance extensions +provided by that layer are returned. To enable a instance extension, the name of the extension should be added to the pname:ppEnabledExtensionNames member of slink:VkInstanceCreateInfo when @@ -145,8 +144,8 @@ To query the extensions available to a given physical device, call: include::../protos/vkEnumerateDeviceExtensionProperties.txt[] * pname:physicalDevice is the physical device that will be queried. - * pname:pLayerName is either `NULL` or the name of a device layer to - retrieve extensions from. + * pname:pLayerName is either `NULL` or a pointer to a null-terminated + UTF-8 string naming the device layer to retrieve extensions from. * pname:pPropertyCount is a pointer to an integer related to the number of extension properties available or queried, as described below. * pname:pProperties is either `NULL` or a pointer to an array of @@ -154,11 +153,10 @@ include::../protos/vkEnumerateDeviceExtensionProperties.txt[] include::../validity/protos/vkEnumerateDeviceExtensionProperties.txt[] -Any device extensions provided by the {apiname} implementation or by -implicitly enabled layers, but not by explicitly enabled layers, are -returned when pname:pLayerName parameter is `NULL`. When pname:pLayerName is -the name of a layer, the device extensions provided by that layer are -returned. +When pLayerName parameter is NULL, only extensions provided by the {apiname} +implementation or by implicitly enabled layers are returned. +When pname:pLayerName is the name of a layer, the device extensions +provided by that layer are returned. To enable a device layer, the name of the layer should be added to the pname:ppEnabledExtensionNames member of slink:VkDeviceCreateInfo when @@ -170,7 +168,7 @@ then the number of extensions properties available is returned in pname:pPropertyCount. Otherwise, pname:pPropertyCount must: point to a variable set by the user to the number of elements in the pname:pProperties array, and on return the variable is overwritten with the number of -structures actually written to pname:pProperties. If the value of +structures actually written to pname:pProperties. If pname:pPropertyCount is less than the number of extension properties available, at most pname:pPropertyCount structures will be written. If pname:pPropertyCount is smaller than the number of extensions available, diff --git a/doc/specs/vulkan/chapters/features.txt b/doc/specs/vulkan/chapters/features.txt index c93a9575..2cd72328 100644 --- a/doc/specs/vulkan/chapters/features.txt +++ b/doc/specs/vulkan/chapters/features.txt @@ -146,10 +146,10 @@ following features: sname:VkPipelineColorBlendStateCreateInfo structure must: be set to ename:VK_FALSE, and the pname:logicOp member is ignored. * [[features-features-multiDrawIndirect]] pname:multiDrawIndirect - indicates whether multi-draw indirect is supported. If this feature is - not enabled, the pname:drawCount parameter to the + indicates whether multiple draw indirect is supported. If this feature + is not enabled, the pname:drawCount parameter to the fname:vkCmdDrawIndirect and fname:vkCmdDrawIndexedIndirect commands - must: be 1. The pname:maxDrawIndirectCount member of the + must: be 0 or 1. The pname:maxDrawIndirectCount member of the sname:VkPhysicalDeviceLimits structure must: also be 1 if this feature is not supported. See <>. @@ -180,7 +180,7 @@ following features: pname:depthBoundsTestEnable member of the sname:VkPipelineDepthStencilStateCreateInfo structure must: be set to ename:VK_FALSE. When pname:depthBoundsTestEnable is set to - ename:VK_FALSE, the values of the pname:minDepthBounds and + ename:VK_FALSE, the pname:minDepthBounds and pname:maxDepthBounds members of the sname:VkPipelineDepthStencilStateCreateInfo structure are ignored. * [[features-features-wideLines]] pname:wideLines indicates whether lines @@ -820,7 +820,7 @@ properties of the physical device: * [[features-limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is the maximum patch size, in vertices, of patches that can: be processed by the tessellation control shader and - tessellation primitive generator. The value of the + tessellation primitive generator. The pname:patchControlPoints member of the sname:VkPipelineTessellationStateCreateInfo structure specified at pipeline creation time and the value provided in the code:OutputVertices @@ -892,22 +892,22 @@ properties of the physical device: class in shader modules (or with the code:shared storage qualifier in GLSL) in the compute shader stage. * [[features-limits-maxComputeWorkGroupCount]] - pname:maxComputeWorkGroupCount[3] is the maximum number of work groups + pname:maxComputeWorkGroupCount[3] is the maximum number of local workgroups that can: be dispatched by a single dispatch command. These three values - represent the maximum number of work groups for the X, Y, and Z + represent the maximum number of local workgroups for the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z parameters to the flink:vkCmdDispatch command, or members of the slink:VkDispatchIndirectCommand structure must: be less than or equal to the corresponding limit. See <>. * [[features-limits-maxComputeWorkGroupInvocations]] pname:maxComputeWorkGroupInvocations is the maximum total number of - compute shader invocations in a single local work group. The product of + compute shader invocations in a single local workgroup. The product of the X, Y, and Z sizes as specified by the code:LocalSize execution mode in shader modules must: be less than or equal to this limit. * [[features-limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is the maximum size of a local compute - work group, per dimension. These three values represent the maximum - local work group size in the X, Y, and Z dimensions, respectively. The + workgroup, per dimension. These three values represent the maximum + local workgroup size in the X, Y, and Z dimensions, respectively. The pname:x, pname:y, and pname:z sizes specified by the code:LocalSize execution mode in shader modules must: be less than or equal to the corresponding limit. @@ -992,8 +992,7 @@ different equations in the spec). ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage member of the sname:VkBufferCreateInfo structure, the pname:offset must: - be an integer multiple of this limit. This limit is a maximum, not a - minimum. + be an integer multiple of this limit. * [[features-limits-minUniformBufferOffsetAlignment]] pname:minUniformBufferOffsetAlignment is the minimum required alignment, in bytes, for the pname:offset member of the @@ -1002,7 +1001,6 @@ different equations in the spec). ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the pname:offset must: be an integer multiple of this limit. Similarly, dynamic offsets for uniform buffers must: be multiples of this limit. - This limit is a maximum, not a minimum. * [[features-limits-minStorageBufferOffsetAlignment]] pname:minStorageBufferOffsetAlignment is the minimum required alignment, in bytes, for the pname:offset member of the @@ -1011,7 +1009,6 @@ different equations in the spec). ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the pname:offset must: be an integer multiple of this limit. Similarly, dynamic offsets for storage buffers must: be multiples of this limit. - This limit is a maximum, not a minimum. * [[features-limits-minTexelOffset]] pname:minTexelOffset is the minimum offset value for the code:ConstOffset image operand of any of the code:OpImageSample* or code:OpImageFetch* image instructions. @@ -2337,7 +2334,7 @@ ename:VK_FORMAT_BC7_UNORM_BLOCK:: ename:VK_FORMAT_BC7_SRGB_BLOCK:: A four-component, block compressed format where each 4x4 block consists of 128-bits of encoded unsigned normalized RGBA image data with sRGB - nonlinear encoding. + nonlinear encoding applied to the RGB components. ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:: A three-component, ETC2 compressed format where each 4x4 block consists @@ -2395,7 +2392,8 @@ ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK:: A four-component, ASTC compressed format where each 4x4 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK:: A four-component, ASTC compressed format where each 5x4 block consists @@ -2405,7 +2403,8 @@ ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK:: A four-component, ASTC compressed format where each 5x4 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK:: A four-component, ASTC compressed format where each 5x5 block consists @@ -2415,7 +2414,8 @@ ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK:: A four-component, ASTC compressed format where each 5x5 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK:: A four-component, ASTC compressed format where each 6x5 block consists @@ -2425,7 +2425,8 @@ ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK:: A four-component, ASTC compressed format where each 6x5 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK:: A four-component, ASTC compressed format where each 6x6 block consists @@ -2435,7 +2436,8 @@ ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK:: A four-component, ASTC compressed format where each 6x6 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK:: A four-component, ASTC compressed format where each 8x5 block consists @@ -2445,7 +2447,8 @@ ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK:: A four-component, ASTC compressed format where each 8x5 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK:: A four-component, ASTC compressed format where each 8x6 block consists @@ -2455,7 +2458,8 @@ ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK:: A four-component, ASTC compressed format where each 8x6 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK:: A four-component, ASTC compressed format where each 8x8 block consists @@ -2465,7 +2469,8 @@ ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK:: A four-component, ASTC compressed format where each 8x8 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK:: A four-component, ASTC compressed format where each 10x5 block consists @@ -2475,7 +2480,8 @@ ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK:: A four-component, ASTC compressed format where each 10x5 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK:: A four-component, ASTC compressed format where each 10x6 block consists @@ -2485,7 +2491,8 @@ ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK:: A four-component, ASTC compressed format where each 10x6 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK:: A four-component, ASTC compressed format where each 10x8 block consists @@ -2495,7 +2502,8 @@ ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK:: A four-component, ASTC compressed format where each 10x8 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK:: A four-component, ASTC compressed format where each 10x10 block consists @@ -2505,7 +2513,8 @@ ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK:: A four-component, ASTC compressed format where each 10x10 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK:: A four-component, ASTC compressed format where each 12x10 block consists @@ -2515,7 +2524,8 @@ ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK:: A four-component, ASTC compressed format where each 12x10 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK:: A four-component, ASTC compressed format where each 12x12 block consists @@ -2525,7 +2535,8 @@ ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK:: ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK:: A four-component, ASTC compressed format where each 12x12 block consists of 128-bits of encoded image data which is decoded as unsigned - normalized RGBA image data with sRGB nonlinear encoding. + normalized RGBA image data with sRGB nonlinear encoding applied to + the RGB components. [[features-formats-packed]] @@ -3101,6 +3112,7 @@ any features for the format. include::../validity/structs/VkFormatProperties.txt[] +[[features-required-format-support]] === Required Format Support Implementations must: support at least the following set of @@ -3118,10 +3130,10 @@ for each format. .Key for format feature tables [width="70%",cols="1,10"] |============ -^|• | This feature must: be supported on -the named format -^|∘ | This feature must: be supported on at least some -of the named formats, with more information below +^|{sym1} | This feature must: be supported on the named format +^|{sym2} | This feature must: be supported on at least some +of the named formats, with more information in the table +where the symbol appears |============ .Feature bits in pname:optimalTilingFeatures @@ -3170,12 +3182,12 @@ s| Format ^.^|latexmath:[$\down | ename:VK_FORMAT_UNDEFINED | | | | | | | | | | | | | | ename:VK_FORMAT_R4G4_UNORM_PACK8 | | | | | | | | | | | | | | ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 | | | | | | | | | | | | | -| ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 | • | • | • | | | | | | | | | | -| ename:VK_FORMAT_R5G6B5_UNORM_PACK16 | • | • | • | | | • | • | • | | | | | +| ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | | | | | | | | +| ename:VK_FORMAT_R5G6B5_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | | ename:VK_FORMAT_B5G6R5_UNORM_PACK16 | | | | | | | | | | | | | | ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 | | | | | | | | | | | | | | ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 | | | | | | | | | | | | | -| ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 | • | • | • | | | • | • | • | | | | | +| ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |========================================= <<< @@ -3198,19 +3210,19 @@ s| Format ^.^|latexmath:[$\down 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_R8_UNORM | • | • | • | | | • | • | • | | • | • | | -| ename:VK_FORMAT_R8_SNORM | • | • | • | | | | | | | • | • | | +| ename:VK_FORMAT_R8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R8_SNORM | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | | | ename:VK_FORMAT_R8_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_R8_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R8_UINT | • | • | | | | • | • | | | • | • | | -| ename:VK_FORMAT_R8_SINT | • | • | | | | • | • | | | • | • | | +| ename:VK_FORMAT_R8_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R8_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | | ename:VK_FORMAT_R8_SRGB | | | | | | | | | | | | | -| ename:VK_FORMAT_R8G8_UNORM | • | • | • | | | • | • | • | | • | • | | -| ename:VK_FORMAT_R8G8_SNORM | • | • | • | | | | | | | • | • | | +| ename:VK_FORMAT_R8G8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R8G8_SNORM | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | | | ename:VK_FORMAT_R8G8_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_R8G8_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R8G8_UINT | • | • | | | | • | • | | | • | • | | -| ename:VK_FORMAT_R8G8_SINT | • | • | | | | • | • | | | • | • | | +| ename:VK_FORMAT_R8G8_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R8G8_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | | ename:VK_FORMAT_R8G8_SRGB | | | | | | | | | | | | | | ename:VK_FORMAT_R8G8B8_UNORM | | | | | | | | | | | | | | ename:VK_FORMAT_R8G8B8_SNORM | | | | | | | | | | | | | @@ -3248,27 +3260,27 @@ s| Format ^.^|latexmath:[$\down 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_R8G8B8A8_UNORM | • | • | • | • | | • | • | • | | • | • | • | -| ename:VK_FORMAT_R8G8B8A8_SNORM | • | • | • | • | | | | | | • | • | • | +| ename:VK_FORMAT_R8G8B8A8_UNORM | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R8G8B8A8_SNORM | {sym1} | {sym1} | {sym1} | {sym1} | | | | | | {sym1} | {sym1} | {sym1} | | ename:VK_FORMAT_R8G8B8A8_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_R8G8B8A8_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R8G8B8A8_UINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R8G8B8A8_SINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R8G8B8A8_SRGB | • | • | • | | | • | • | • | | | | | -| ename:VK_FORMAT_B8G8R8A8_UNORM | • | • | • | | | • | • | • | | • | • | | +| ename:VK_FORMAT_R8G8B8A8_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R8G8B8A8_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R8G8B8A8_SRGB | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | +| ename:VK_FORMAT_B8G8R8A8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | | ename:VK_FORMAT_B8G8R8A8_SNORM | | | | | | | | | | | | | | ename:VK_FORMAT_B8G8R8A8_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_B8G8R8A8_SSCALED | | | | | | | | | | | | | | ename:VK_FORMAT_B8G8R8A8_UINT | | | | | | | | | | | | | | ename:VK_FORMAT_B8G8R8A8_SINT | | | | | | | | | | | | | -| ename:VK_FORMAT_B8G8R8A8_SRGB | • | • | • | | | • | • | • | | | | | -| ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 | • | • | • | | | • | • | • | | • | • | • | -| ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 | • | • | • | | | | | | | • | • | • | +| ename:VK_FORMAT_B8G8R8A8_SRGB | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | +| ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | {sym1} | | ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 | | | | | | | | | | | | | | ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 | | | | | | | | | | | | | -| ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 | • | • | | | | • | • | | | • | • | • | -| ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 | • | • | | | | • | • | | | • | • | • | -| ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 | • | • | • | | | • | • | • | | | | | +| ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |========================================= <<< @@ -3297,11 +3309,11 @@ s| Format ^.^|latexmath:[$\down | ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 | | | | | | | | | | | | | | ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 | | | | | | | | | | | | | | ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 | | | | | | | | | | | | | -| ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 | • | • | • | | | • | • | • | | • | • | | +| ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | | ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 | | | | | | | | | | | | | | ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 | | | | | | | | | | | | | | ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 | | | | | | | | | | | | | -| ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 | • | • | | | | • | • | | | | • | | +| ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | | {sym1} | | | ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 | | | | | | | | | | | | | |========================================= @@ -3325,20 +3337,20 @@ s| Format ^.^|latexmath:[$\down 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_R16_UNORM | | | | | | | | | | • | | | -| ename:VK_FORMAT_R16_SNORM | | | | | | | | | | • | | | +| ename:VK_FORMAT_R16_UNORM | | | | | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16_SNORM | | | | | | | | | | {sym1} | | | | ename:VK_FORMAT_R16_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_R16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16_UINT | • | • | | | | • | • | | | • | • | | -| ename:VK_FORMAT_R16_SINT | • | • | | | | • | • | | | • | • | | -| ename:VK_FORMAT_R16_SFLOAT | • | • | • | | | • | • | • | | • | • | | -| ename:VK_FORMAT_R16G16_UNORM | | | | | | | | | | • | | | -| ename:VK_FORMAT_R16G16_SNORM | | | | | | | | | | • | | | +| ename:VK_FORMAT_R16_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16_SFLOAT | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16G16_UNORM | | | | | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16G16_SNORM | | | | | | | | | | {sym1} | | | | ename:VK_FORMAT_R16G16_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_R16G16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16_UINT | • | • | | | | • | • | | | • | • | | -| ename:VK_FORMAT_R16G16_SINT | • | • | | | | • | • | | | • | • | | -| ename:VK_FORMAT_R16G16_SFLOAT | • | • | • | | | • | • | • | | • | • | | +| ename:VK_FORMAT_R16G16_UINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16G16_SINT | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16G16_SFLOAT | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | | ename:VK_FORMAT_R16G16B16_UNORM | | | | | | | | | | | | | | ename:VK_FORMAT_R16G16B16_SNORM | | | | | | | | | | | | | | ename:VK_FORMAT_R16G16B16_USCALED | | | | | | | | | | | | | @@ -3346,13 +3358,13 @@ s| Format ^.^|latexmath:[$\down | ename:VK_FORMAT_R16G16B16_UINT | | | | | | | | | | | | | | ename:VK_FORMAT_R16G16B16_SINT | | | | | | | | | | | | | | ename:VK_FORMAT_R16G16B16_SFLOAT | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16A16_UNORM | | | | | | | | | | • | | | -| ename:VK_FORMAT_R16G16B16A16_SNORM | | | | | | | | | | • | | | +| ename:VK_FORMAT_R16G16B16A16_UNORM | | | | | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16G16B16A16_SNORM | | | | | | | | | | {sym1} | | | | ename:VK_FORMAT_R16G16B16A16_USCALED | | | | | | | | | | | | | | ename:VK_FORMAT_R16G16B16A16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16A16_UINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R16G16B16A16_SINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R16G16B16A16_SFLOAT | • | • | • | • | | • | • | • | | • | • | • | +| ename:VK_FORMAT_R16G16B16A16_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R16G16B16A16_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R16G16B16A16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | |========================================= <<< @@ -3375,18 +3387,18 @@ s| Format ^.^|latexmath:[$\down 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_R32_UINT | • | • | | • | • | • | • | | | • | • | • | • -| ename:VK_FORMAT_R32_SINT | • | • | | • | • | • | • | | | • | • | • | • -| ename:VK_FORMAT_R32_SFLOAT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R32G32_UINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R32G32_SINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R32G32_SFLOAT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R32G32B32_UINT | | | | | | | | | | • | | | -| ename:VK_FORMAT_R32G32B32_SINT | | | | | | | | | | • | | | -| ename:VK_FORMAT_R32G32B32_SFLOAT | | | | | | | | | | • | | | -| ename:VK_FORMAT_R32G32B32A32_UINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R32G32B32A32_SINT | • | • | | • | | • | • | | | • | • | • | -| ename:VK_FORMAT_R32G32B32A32_SFLOAT | • | • | | • | | • | • | | | • | • | • | +| ename:VK_FORMAT_R32_UINT | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | {sym1} +| ename:VK_FORMAT_R32_SINT | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | {sym1} +| ename:VK_FORMAT_R32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R32G32_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R32G32_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R32G32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R32G32B32_UINT | | | | | | | | | | {sym1} | | | +| ename:VK_FORMAT_R32G32B32_SINT | | | | | | | | | | {sym1} | | | +| ename:VK_FORMAT_R32G32B32_SFLOAT | | | | | | | | | | {sym1} | | | +| ename:VK_FORMAT_R32G32B32A32_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R32G32B32A32_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R32G32B32A32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |========================================= <<< @@ -3421,30 +3433,23 @@ s| Format ^.^|latexmath:[$\down | ename:VK_FORMAT_R64G64B64A64_UINT | | | | | | | | | | | | | | ename:VK_FORMAT_R64G64B64A64_SINT | | | | | | | | | | | | | | ename:VK_FORMAT_R64G64B64A64_SFLOAT | | | | | | | | | | | | | -| ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 | • | • | • | | | | | | | | • | | -| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 | • | • | • | | | | | | | | | | -| ename:VK_FORMAT_D16_UNORM | • | • | | | | | | | • | | | | -| ename:VK_FORMAT_X8_D24_UNORM_PACK32 | | | | | | | | | ∘ | | | | -| ename:VK_FORMAT_D32_SFLOAT | • | • | | | | | | | ∘ | | | | +| ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | | {sym1} | | +| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | | | | +| ename:VK_FORMAT_D16_UNORM | {sym1} | {sym1} | | | | | | | {sym1} | | | | +| ename:VK_FORMAT_X8_D24_UNORM_PACK32 | | | | | | | | | {sym2} | | | | +| ename:VK_FORMAT_D32_SFLOAT | {sym1} | {sym1} | | | | | | | {sym2} | | | | | ename:VK_FORMAT_S8_UINT | | | | | | | | | | | | | | ename:VK_FORMAT_D16_UNORM_S8_UINT | | | | | | | | | | | | | -| ename:VK_FORMAT_D24_UNORM_S8_UINT | | | | | | | | | ∘ | | | | -| ename:VK_FORMAT_D32_SFLOAT_S8_UINT | | | | | | | | | ∘ | | | | -|========================================= - -ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature must: be +| ename:VK_FORMAT_D24_UNORM_S8_UINT | | | | | | | | | {sym2} | | | | +| ename:VK_FORMAT_D32_SFLOAT_S8_UINT | | | | | | | | | {sym2} | | | | +14+| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature must: be supported for at least one of ename:VK_FORMAT_X8_D24_UNORM_PACK32 and ename:VK_FORMAT_D32_SFLOAT, and must: be supported for at least one of ename:VK_FORMAT_D24_UNORM_S8_UINT and ename:VK_FORMAT_D32_SFLOAT_S8_UINT. +|========================================= <<< -The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, -ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and -ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be -supported in pname:optimalTilingFeatures for all the formats in at least -one of the following three tables: - [[features-formats-mandatory-features-bcn]] .Mandatory format support: BC compressed formats with slink:VkImageType ename:VK_IMAGE_TYPE_2D and ename:VK_IMAGE_TYPE_3D [width="100%",cols="62,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] @@ -3463,22 +3468,28 @@ one of the following three tables: 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC2_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC2_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC3_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC3_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC4_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC4_SNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC5_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC5_SNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC7_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_BC7_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | +| ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC2_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC2_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC3_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC3_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC4_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC5_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC6H_UFLOAT_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC6H_SFLOAT_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC7_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_BC7_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, +ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and +ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be +supported in pname:optimalTilingFeatures for all the formats in at least +one of: this table, <>, or +<>. |========================================= <<< @@ -3501,16 +3512,22 @@ s| Format ^.^|latexmath:[$\down 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | +| ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_EAC_R11_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_EAC_R11_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, +ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and +ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be +supported in pname:optimalTilingFeatures for all the formats in at least +one of: this table, <>, or +<>. |========================================= <<< @@ -3533,34 +3550,40 @@ s| Format ^.^|latexmath:[$\down 3+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^|latexmath:[$\downarrow$] 2+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^|latexmath:[$\downarrow$] s| Format ^.^|latexmath:[$\downarrow$] -| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | -| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK | ∘ | ∘ | ∘ | | | | | | | | | | +| ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +| ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | +14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, +ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and +ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be +supported in pname:optimalTilingFeatures for all the formats in at least +one of: this table, <>, or +<>. |========================================= == Additional Image Capabilities diff --git a/doc/specs/vulkan/chapters/fragops.txt b/doc/specs/vulkan/chapters/fragops.txt index 356e428d..8c0a7113 100644 --- a/doc/specs/vulkan/chapters/fragops.txt +++ b/doc/specs/vulkan/chapters/fragops.txt @@ -181,7 +181,7 @@ include code:SampleMask in its interface, the fragment coverage is not modified. Next, the fragment alpha and coverage values are modified based on the -values of the pname:alphaToCoverageEnable and pname:alphaToOneEnable members +pname:alphaToCoverageEnable and pname:alphaToOneEnable members of the slink:VkPipelineMultisampleStateCreateInfo structure. All alpha values in this section refer only to the alpha component of the @@ -476,11 +476,11 @@ location and the sample's depth value in the depth/stencil attachment at location latexmath:[$(x_f,y_f)$]. The comparison is enabled or disabled with the pname:depthTestEnable member of the slink:VkPipelineDepthStencilStateCreateInfo structure. When disabled, the -depth comparison and subsequent possible updates to the depth/stencil -attachment value are bypassed and the fragment is passed to the next -operation. The stencil value, however, can: be modified as indicated above -if the depth test passed. If enabled, the comparison takes place and the -depth/stencil attachment value can: subsequently be modified. +depth comparison and subsequent possible updates to the value of the depth +component of the depth/stencil attachment are bypassed and the fragment is +passed to the next operation. The stencil value, however, can: be modified as +indicated above as if the depth test passed. If enabled, the comparison takes +place and the depth/stencil attachment value can: subsequently be modified. The comparison is specified with the pname:depthCompareOp member of slink:VkPipelineDepthStencilStateCreateInfo. Let latexmath:[$z_f$] be the @@ -512,20 +512,16 @@ of the viewport used by this fragment, respectively. If the depth test fails, the sample's coverage bit is cleared in the fragment. The stencil value at the sample's location is updated according to -the function currently in effect for depth test failure. Otherwise, the -fragment continues to the next operation and the value of the depth -framebuffer attachment at the sample's location is conditionally written to -the sample's latexmath:[$z_f$] value. In this case the stencil value is -updated according to the function currently in effect for depth test -success. +the function currently in effect for depth test failure. [[fragops-depth-write]] -Upon passing the depth test, a sample's (possibly clamped) latexmath:[$z_f$] +If the depth test passes, the sample's (possibly clamped) latexmath:[$z_f$] value is conditionally written to the depth framebuffer attachment based on -the value of the pname:depthWriteEnable member of +the pname:depthWriteEnable member of slink:VkPipelineDepthStencilStateCreateInfo. If pname:depthWriteEnable is ename:VK_TRUE the value is written, and if it is ename:VK_FALSE the value is -not written. +not written. The stencil value at the sample's location is updated according +to the function currently in effect for depth test success. If there is no depth framebuffer attachment, it is as if the depth test always passes. diff --git a/doc/specs/vulkan/chapters/framebuffer.txt b/doc/specs/vulkan/chapters/framebuffer.txt index 9fc26b23..3cd7cc3d 100644 --- a/doc/specs/vulkan/chapters/framebuffer.txt +++ b/doc/specs/vulkan/chapters/framebuffer.txt @@ -204,10 +204,12 @@ with RGB and alpha components potentially using different blend operations: include::../enums/VkBlendOp.txt[] +<<< + The semantics of each enum value is described in the table below: .Blend Operations -[width="100%",cols="45%,30%,25%",options="header",style="verse",align="center"] +[width="100%",cols="45%,30%,25%",options="header",align="center"] |========================================== |VkBlendOp | RGB Components | Alpha Component @@ -220,13 +222,13 @@ The semantics of each enum value is described in the table below: |ename:VK_BLEND_OP_SUBTRACT | latexmath:[$R=R_{s0}\times S_r-R_d\times D_r$] + latexmath:[$G=G_{s0}\times S_g-G_d\times D_g$] + - latexmath:[$B=B_{s0}\times S_b-B_d\times D_b$] + + latexmath:[$B=B_{s0}\times S_b-B_d\times D_b$] | latexmath:[$A=A_{s0}\times S_a-A_d\times D_a$] |ename:VK_BLEND_OP_REVERSE_SUBTRACT | latexmath:[$R=R_d\times D_r-R_{s0}\times S_r$] + latexmath:[$G=G_d\times D_g-G_{s0}\times S_g$] + - latexmath:[$B=B_d\times D_b-B_{s0}\times S_b$] + + latexmath:[$B=B_d\times D_b-B_{s0}\times S_b$] | latexmath:[$A=A_d\times D_a-A_{s0}\times S_a$] |ename:VK_BLEND_OP_MIN @@ -238,7 +240,7 @@ The semantics of each enum value is described in the table below: |ename:VK_BLEND_OP_MAX | latexmath:[$R=\max(R_{s0},R_d)$] + latexmath:[$G=\max(G_{s0},G_d)$] + - latexmath:[$B=\max(B_{s0},B_d)$] + + latexmath:[$B=\max(B_{s0},B_d)$] | latexmath:[$A=\max(A_{s0},A_d)$] |========================================== @@ -257,8 +259,8 @@ In this table, the following conventions are used: The blending operation produces a new set of values latexmath:[$R, G, B$] and latexmath:[$A$], which are written to the framebuffer attachment. If blending is not enabled for this attachment, then latexmath:[$R, G, B$] and -latexmath:[$A$] are assigned the values of -latexmath:[$R_{s0},G_{s0},B_{s0}$] and latexmath:[$A_{s0}$]. +latexmath:[$A$] are assigned +latexmath:[$R_{s0},G_{s0},B_{s0}$] and latexmath:[$A_{s0}$], respectively. If the color attachment is fixed-point, the components of the source and destination values and blend factors are each clamped to @@ -287,13 +289,14 @@ G, and B destination color values (after conversion from fixed-point to floating-point) are considered to be encoded for the sRGB color space and hence are linearized prior to their use in blending. Each R, G, and B component is converted from nonlinear to linear as described in the -``KHR_DF_TRANSFER_SRGB`` section of the Khronos Data Format Specification. +``KHR_DF_TRANSFER_SRGB'' section of the Khronos Data Format Specification. If the format is not sRGB, no linearization is performed. If the numeric format of a framebuffer attachment uses sRGB encoding, then -the final R, G and B values are converted into the nonlinear sRGB color -space before being written to the framebuffer attachment as described in the -``KHR_DF_TRANSFER_SRGB`` section of the Khronos Data Format Specification. +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 ``KHR_DF_TRANSFER_SRGB'' section of the Khronos Data +Format Specification. If the framebuffer color attachment numeric format is not sRGB encoded then the resulting latexmath:[$c_s$] values for R, G and B are unmodified. The @@ -324,6 +327,8 @@ the following operations: include::../enums/VkLogicOp.txt[] +<<< + The logical operations supported by {apiname} are summarized in the following table in which @@ -338,7 +343,7 @@ following table in which latexmath:[$A$] component value: .Logical Operations -[width="75%",options="header",style="verse",align="center"] +[width="75%",options="header",align="center"] |========================================== |Mode | Operation |ename:VK_LOGIC_OP_CLEAR | latexmath:[$0$] diff --git a/doc/specs/vulkan/chapters/fxvertex.txt b/doc/specs/vulkan/chapters/fxvertex.txt index e132c69a..3a3a8a8a 100644 --- a/doc/specs/vulkan/chapters/fxvertex.txt +++ b/doc/specs/vulkan/chapters/fxvertex.txt @@ -103,7 +103,7 @@ When a vertex shader input variable declared using a scalar or vector 32-bit data type is assigned a location, its value(s) are taken from the components of the input attribute specified with the corresponding sname:VkVertexInputAttributeDescription::pname:location. -The components used depend on the type of variable and the value of the +The components used depend on the type of variable and the code:Component decoration specified in the variable declaration, as identified in <>. Any 32-bit scalar or vector input will consume a single location. For 32-bit data types, diff --git a/doc/specs/vulkan/chapters/interfaces.txt b/doc/specs/vulkan/chapters/interfaces.txt index 8ef13a05..ff565572 100644 --- a/doc/specs/vulkan/chapters/interfaces.txt +++ b/doc/specs/vulkan/chapters/interfaces.txt @@ -40,13 +40,13 @@ module. === Built-in Interface Block Shader <> variables meeting the -following requirements define the _built-in interface block_. They must: be: +following requirements define the _built-in interface block_. They must: - * explicitly declared (there are no implicit built-ins), - * identified with a code:BuiltIn decoration, + * be explicitly declared (there are no implicit built-ins), + * be identified with a code:BuiltIn decoration, * form object types as described in the <> section, and - * declared in a block whose top-level members are the built-ins. + * be declared in a block whose top-level members are the built-ins. Built-ins only participate in interface matching if they are declared in such a block. They mustnot: have any code:Location or code:Component @@ -159,9 +159,9 @@ If the structure type is a code:Block but without a code:Location, then each of its members must: have a code:Location decoration. If it is a code:Block with a code:Location decoration, then its first member is assigned to the location specified for the code:Block, any member with -its own code:Location decoration is assigned that location, and otherwise -each subsequent member is assigned consecutive locations in declaration -order. +its own code:Location decoration is assigned that location, and each +remaining member is assigned the location after the +immediately preceding member in declaration order. The locations consumed by block and structure members are determined by applying the rules above in a depth-first traversal of the instantiated @@ -712,7 +712,7 @@ is discarded before rasterization. code:CullDistance can: be applied to an output variable in the last vertex processing stage (vertex, tessellation evaluation or geometry shader). + -If applied to an input variable, that variable will contain the value of the +If applied to an input variable, that variable will contain the corresponding output in the previous shader stage. code:CullDistance mustnot: be applied to an input in the vertex shader or to an output in the fragment shader, and mustnot: be used in compute shaders. @@ -728,9 +728,9 @@ code:FragCoord:: This variable contains the framebuffer coordinate latexmath:[$(x,y,z,\frac{1}{w})$] of the fragment being processed. The (x,y) coordinate (0,0) is the upper left corner of the upper left pixel in the -framebuffer. The values of the x and y components of code:FragCoord reflect -the location of the center of the pixel (i.e. fractional values of -latexmath:[$(0.5,0.5)$]) when sample shading is not enabled, and the +framebuffer. The x and y components of code:FragCoord reflect +the location of the center of the pixel +(latexmath:[$(0.5,0.5)$]) when sample shading is not enabled, and the location of the sample corresponding to the shader invocation when using sample shading. + @@ -763,7 +763,7 @@ code:FragDepth must: be declared as a scalar 32-bit floating-point value. code:FrontFacing:: The code:FrontFacing decoration can: be applied to an input variable in the -fragment shader. The value of this variable is non-zero if the current +fragment shader. This variable is non-zero if the current fragment is considered to be part of a <> primitive and is zero if the fragment is considered to be part of a back-facing primitive. @@ -790,7 +790,7 @@ code:GlobalInvocationID:: An input variable decorated with code:GlobalInvocationID will contain the location of the current compute shader invocation within the global workgroup. The value in this variable is equal to the index of the local -workgroup multiplied by the size of the local workgroup plus the value of +workgroup multiplied by the size of the local workgroup plus code:LocalInvocationID. + The code:GlobalInvocationID decoration is only supported in compute shaders. @@ -832,9 +832,9 @@ code:InvocationID:: In a geometry shader, an input variable decorated with the code:InvocationID decoration contains the index of the current shader invocation, which ranges -from zero to the number of <> declared -in the shader. If the instance count of the geometry shader is one or is not -specified, then code:InvocationID will be zero. +from zero to the number of <> declared in +the shader minus one. If the instance count of the geometry shader is one or +is not specified, then code:InvocationID will be zero. + In tessellation control shaders, and input variable decorated with the code:InvocationID decoration contains the index of the output patch vertex @@ -849,9 +849,9 @@ code:InstanceIndex:: The code:InstanceIndex decoration can: be applied to a vertex shader input which will be filled with the index of the instance that is being processed -by the current vertex shader invocation. The value of code:InstanceIndex -begins at the value of the pname:firstInstance parameter to flink:vkCmdDraw -or flink:vkCmdDrawIndexed or at the value of the pname:firstInstance member +by the current vertex shader invocation. code:InstanceIndex +begins at the pname:firstInstance parameter to flink:vkCmdDraw +or flink:vkCmdDrawIndexed or at the pname:firstInstance member of a structure consumed by flink:vkCmdDrawIndirect or flink:vkCmdDrawIndexedIndirect. + @@ -884,10 +884,10 @@ This variable contains the location of the current compute shader invocation within the local workgroup. The range of possible values for each component of LocalInvocationID range from zero through the size of the workgroup (as defined by code:LocalSize) in that dimension minus one. If the size of the -workgroup in a particular dimension is one, then the value of +workgroup in a particular dimension is one, then LocalInvocationID in that dimension will be zero. That is, if the workgroup is effectively two-dimensional, then pname:LocalInvocationID.z will be zero, -and if the workgroup is one-dimensional, then the values of both +and if the workgroup is one-dimensional, then both pname:LocalInvocationID.y and pname:LocalInvocationID.z will be zero. + The code:LocalInvocationID decoration is only supported in compute shaders. @@ -915,8 +915,7 @@ An input variable decorated with code:PatchVertices in the tessellation control or evaluation shader is an integer specifying the number of vertices in the input patch being processed by the shader. A single tessellation control or evaluation shader can: read patches of differing -sizes, so the value of the code:PatchVertices variable may: differ between -patches. +sizes, so the code:PatchVertices variable may: differ between patches. + The code:PatchVertices decoration is only supported in tessellation control and evaluation shaders. @@ -930,7 +929,7 @@ contains the coordinate of the current fragment within the point being rasterized, normalized to the size of the point with origin in the upper left corner of the point, as described in <>. If the primitive the fragment shader invocation -belongs to is not a point then the value of code:PointCoord is undefined. +belongs to is not a point, then code:PointCoord is undefined. + -- The code:PointCoord decoration is only supported in fragment shaders. @@ -1000,8 +999,8 @@ geometry shader is present, or with the value that would have been presented as input to the geometry shader had it been present. If a geometry shader is present and the fragment shader reads from an input variable decorated with code:PrimitiveID, then the geometry shader must: write to an output variable -decorated with code:PrimitiveID in all execution paths, otherwise the value -of the code:PrimitiveID input in the fragment shader is undefined. +decorated with code:PrimitiveID in all execution paths; otherwise the +code:PrimitiveID input in the fragment shader is undefined. + The code:PrimitiveID decoration mustnot: be used in vertex or compute shaders. code:PrimitiveID mustnot: be used on output variables in @@ -1013,7 +1012,7 @@ code:SampleID:: The code:SampleID decoration can: be applied to an integer input variable in the fragment shader. This variable will contain the zero-based index of the -sample the invocation corresponds to. The value of code:SampleID ranges from +sample the invocation corresponds to. code:SampleID ranges from zero to the number of samples in the framebuffer minus one. If a fragment shader entry point's interface includes an input variable decorated with code:SampleID, per-sample shading is enabled for draws that use that @@ -1080,7 +1079,7 @@ code:TessellationCoord:: The code:TessellationCoord is applied to an input variable in tessellation evaluation shaders and specifies the three-dimensional (u,v,w) barycentric -coordinate of the tessellated vertex within the patch. The values of u, v, +coordinate of the tessellated vertex within the patch. u, v, and w are in the range latexmath:[$[0,1\]$] and vary linearly across the primitive being subdivided. For the tessellation modes of code:Quads or code:IsoLines, the third component is always zero. @@ -1127,17 +1126,16 @@ code:VertexIndex:: The code:VertexIndex decoration can: be applied to a vertex shader input which will be filled with the index of the vertex that is being processed by -the current vertex shader invocation. For non-indexed draws, the value of -this variable begins at the value of the pname:firstVertex parameter to +the current vertex shader invocation. For non-indexed draws, +this variable begins at the pname:firstVertex parameter to flink:vkCmdDraw or the pname:firstVertex member of a structure consumed by flink:vkCmdDrawIndirect and increments by one for each vertex in the draw. For indexed draws, its value is the content of the index buffer for the -vertex plus the value of the pname:vertexOffset parameter to +vertex plus the pname:vertexOffset parameter to flink:vkCmdDrawIndexed or the pname:vertexOffset member of the structure consumed by flink:vkCmdDrawIndexedIndirect. + -The value of code:VertexIndex starts at the same starting value for each -instance. +code:VertexIndex starts at the same starting value for each instance. + The code:VertexIndex decoration mustnot: be used in any shader stage other than vertex. diff --git a/doc/specs/vulkan/chapters/introduction.txt b/doc/specs/vulkan/chapters/introduction.txt index 3b62b4d6..7597c5ba 100644 --- a/doc/specs/vulkan/chapters/introduction.txt +++ b/doc/specs/vulkan/chapters/introduction.txt @@ -183,7 +183,7 @@ August, 2008. [[Khronos Data Format Specification]]:: A. Garrard, _Khronos Data Format Specification, version 1.1_, https://www.khronos.org/registry/dataformat/specs/1.1/dataformat.1.1.html, -February 26, 2016. +March 9, 2016. [[Khronos SPIR-V Extended Instructions for GLSL Specification]]:: J. Kessenich, _SPIR-V Extended Instructions for GLSL, Version 1.00_, diff --git a/doc/specs/vulkan/chapters/memory.txt b/doc/specs/vulkan/chapters/memory.txt index 24b7238b..b4fd97e9 100644 --- a/doc/specs/vulkan/chapters/memory.txt +++ b/doc/specs/vulkan/chapters/memory.txt @@ -493,13 +493,13 @@ are allocated by calling fname:vkAllocateMemory: include::../protos/vkAllocateMemory.txt[] * pname:device is the logical device that owns the memory. - * pname:pAllocateInfo is a pointer to a structure of type - slink:VkMemoryAllocateInfo, which contains parameters of the allocation. - A successful returned allocation must: use the requested parameters--no - substitution is permitted by the implementation. + * pname:pAllocateInfo is a pointer to an instance of the + slink:VkMemoryAllocateInfo structure describing parameters of the + allocation. A successful returned allocation must: use the requested + parameters -- no substitution is permitted by the implementation. * pname:pAllocator controls host memory allocation as described in the <> chapter. - * pname:pMemory is a pointer to a sname:VkDeviceMemory structure in which + * pname:pMemory is a pointer to a sname:VkDeviceMemory handle in which information about the allocated memory is returned. include::../validity/protos/vkAllocateMemory.txt[] diff --git a/doc/specs/vulkan/chapters/pipelines.txt b/doc/specs/vulkan/chapters/pipelines.txt index 8a6ad750..c068a70c 100644 --- a/doc/specs/vulkan/chapters/pipelines.txt +++ b/doc/specs/vulkan/chapters/pipelines.txt @@ -44,7 +44,7 @@ pass. The <> is a separate pipeline from the graphics pipeline, which operates on one-, two-, or three-dimensional -_work groups_ which can: read from and write to buffer and image memory. +workgroups which can: read from and write to buffer and image memory. This ordering is meant only as a tool for describing {apiname}, not as a strict rule of how {apiname} is implemented, and we present it only as a @@ -156,8 +156,8 @@ follows: * pname:stage is a elink:VkShaderStageFlagBits naming the pipeline stage. * pname:module is a sname:VkShaderModule object that contains the shader for this stage. - * pname:pName is a null-terminated UTF-8 string specifying the entry point - name of the shader for this stage. + * pname:pName is a pointer to a null-terminated UTF-8 string specifying + the entry point name of the shader for this stage. * pname:pSpecializationInfo is a pointer to slink:VkSpecializationInfo, as described in <>, and can: be `NULL`. @@ -586,7 +586,7 @@ size of the buffer, in bytes, pointed to by pname:pData, and on return the variable is overwritten with the amount of data actually written to pname:pData. -If the value of pname:dataSize is less than the maximum size that can: be +If pname:dataSize is less than the maximum size that can: be retrieved by the pipeline cache, at most pname:pDataSize bytes will be written to pname:pData, and fname:vkGetPipelineCacheData will return ename:VK_INCOMPLETE. Any data written to pname:pData is valid and can: be @@ -632,7 +632,7 @@ bytes. This value includes all fields in the header including the pipeline cache version field and the size of the length field. The next four bytes encode the pipeline cache version. This field is -interpreted as an elink:VkPipelineCacheHeaderVersion value, and must: +interpreted as a elink:VkPipelineCacheHeaderVersion value, and must: have one of the following values: include::../enums/VkPipelineCacheHeaderVersion.txt[] @@ -640,7 +640,7 @@ include::../enums/VkPipelineCacheHeaderVersion.txt[] A consumer of the pipeline cache should use the cache version to interpret the remainder of the cache header. -If the value of pname:dataSize is less than what is necessary to store this +If pname:dataSize is less than what is necessary to store this header, nothing will be written to pname:pData and zero will be written to pname:dataSize. @@ -670,7 +670,7 @@ API. .Note ==== Specialization constants are useful to allow a compute shader to have -its work group size changed at runtime by the user, for example. +its local workgroup size changed at runtime by the user, for example. ==== Each instance of the sname:VkPipelineShaderStageCreateInfo structure @@ -766,7 +766,7 @@ const VkSpecializationInfo info = Then when calling fname:vkCreateComputePipelines, and passing the sname:VkSpecializationInfo we defined as the pname:pSpecializationInfo parameter of sname:VkPipelineShaderStageCreateInfo, we will create a compute -pipeline with the runtime specified work group size. +pipeline with the runtime specified local workgroup size. Another example would be that an application has a SPIR-V module that has some platform-dependent constants they wish to use. diff --git a/doc/specs/vulkan/chapters/primsrast.txt b/doc/specs/vulkan/chapters/primsrast.txt index d4f030d9..4a016c43 100644 --- a/doc/specs/vulkan/chapters/primsrast.txt +++ b/doc/specs/vulkan/chapters/primsrast.txt @@ -84,12 +84,12 @@ as follows: ANDed with the coverage information generated during rasterization, as described in <>. * pname:alphaToCoverageEnable controls whether a temporary coverage value - is generated based on the value of the alpha component of the fragment's + is generated based on the alpha component of the fragment's first color output as specified in the <> section. - * pname:alphaToOneEnable controls whether the value of the alpha component - of the fragment's first color output is replaced with one as described - in <>. + * pname:alphaToOneEnable controls whether the alpha component of the + fragment's first color output is replaced with one as described in + <>. include::../validity/structs/VkPipelineMultisampleStateCreateInfo.txt[] @@ -105,9 +105,9 @@ determine associated data for fragments, and can: also modify or replace their assigned depth values. If the subpass for which this pipeline is being created uses -color and/or depth/stencil attachments, then the value of +color and/or depth/stencil attachments, then pname:rasterizationSamples must: be the same as the sample count for -those subpass attachments. Otherwise, the value of +those subpass attachments. Otherwise, pname:rasterizationSamples must: follow the rules for a <>. @@ -599,7 +599,7 @@ at every fragment ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ where latexmath:[$n$] is the number of vertices in the polygon and -latexmath:[$f_i$] is the value of the latexmath:[$f$] at vertex +latexmath:[$f_i$] is the value of latexmath:[$f$] at vertex latexmath:[$i$]. For each latexmath:[$i$], latexmath:[$0 \leq a_i \leq 1$] and latexmath:[$\sum_{i=1}^{n}a_i = 1$]. The values of latexmath:[$a_i$] may: differ from fragment to fragment, but at vertex latexmath:[$i$], diff --git a/doc/specs/vulkan/chapters/queries.txt b/doc/specs/vulkan/chapters/queries.txt index 05339160..bd1f085b 100644 --- a/doc/specs/vulkan/chapters/queries.txt +++ b/doc/specs/vulkan/chapters/queries.txt @@ -474,7 +474,7 @@ statistics query begins, all statistics counters are set to zero. While the query is active, the pipeline type determines which set of statistics are available, but these must: be configured on the query pool when it is created. If a statistic counter is issued on a command buffer that does -not support the corresponding operation, the value of that counter is +not support the corresponding operation, that counter is undefined after the query has finished. At least one statistic counter relevant to the operations supported on the recording command buffer must: be enabled. diff --git a/doc/specs/vulkan/chapters/resources.txt b/doc/specs/vulkan/chapters/resources.txt index 417cf88b..3372999a 100644 --- a/doc/specs/vulkan/chapters/resources.txt +++ b/doc/specs/vulkan/chapters/resources.txt @@ -15,9 +15,9 @@ metadata. == Buffers Buffers represent linear arrays of data which are used for various -purposes by binding them to the graphics pipeline via descriptor sets or via -certain commands, or by directly specifying them as parameters to certain -commands. +purposes by binding them to a graphics or compute pipeline via descriptor +sets or via certain commands, or by directly specifying them as parameters +to certain commands. Buffers are created by calling: @@ -199,9 +199,9 @@ include::../validity/protos/vkDestroyBufferView.txt[] == Images Images represent multidimensional - up to 3 - arrays of data which can: be -used for various purposes (e.g. attachments, textures), by binding them to -the graphics pipeline via descriptor sets, or by directly specifying them as -parameters to certain commands. +used for various purposes (e.g. attachments, textures), by binding them to a +graphics or compute pipeline via descriptor sets, or by directly specifying +them as parameters to certain commands. Images are created by calling: @@ -406,7 +406,7 @@ include::../structs/VkSubresourceLayout.txt[] * pname:offset is the byte offset from the start of the image where the subresource begins. * pname:size is the size in bytes of the subresource. pname:size includes - any extra memory that is required based on the value of pname:rowPitch. + any extra memory that is required based on pname:rowPitch. * pname:rowPitch describes the number of bytes between each row of texels in an image. * pname:arrayPitch describes the number of bytes between each array layer @@ -554,7 +554,7 @@ The type(s) of device access supported by each layout are: used as a read-only depth/stencil attachment in a sname:VkFramebuffer and/or as a read-only image in a shader (which can: be read as a sampled image, combined image/sampler and/or input attachment). This layout is - valid only for subresources of images created with both the + valid only for subresources of images created with the ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bit enabled. * ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: must: only be used as a read-only image in a shader (which can: be read as a sampled image, @@ -950,26 +950,25 @@ flink:vkGetImageMemoryRequirements: ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit and the ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit set. In other words, mappable coherent memory can: always be attached to these objects. - * The value of the pname:memoryTypeBits member is identical for all + * The pname:memoryTypeBits member is identical for all sname:VkBuffer objects created with the same value for the pname:flags and pname:usage members in the sname:VkBufferCreateInfo structure passed to fname:vkCreateBuffer. Further, if code:usage1 and code:usage2 of type - elink:VkBufferUsageFlags are such that code:usage2 contains a subset of - the bits set in code:usage1 and they have the same value of pname:flags, - then the bits set in the value of pname:memoryTypeBits returned for - code:usage1 must: be a subset of the bits set in the value of - pname:memoryTypeBits returned for code:usage2, for all values of - pname:flags. - * The value of the pname:alignment member is identical for all - sname:VkBuffer objects created with the same combination of values for - the pname:usage and pname:flags members in the sname:VkBufferCreateInfo - structure passed to fname:vkCreateBuffer. - * The value of the pname:memoryTypeBits member is identical for all - sname:VkImage objects created with the same combination of values for - the pname:tiling member and the ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT - bit of the pname:flags member and the - ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT of the pname:usage member - in the sname:VkImageCreateInfo structure passed to fname:vkCreateImage. + elink:VkBufferUsageFlags are such that code:usage2 comprises a subset of + the bits set in code:usage1 and they have the same pname:flags, then the + bits set in pname:memoryTypeBits returned for code:usage1 must: be a + subset of the bits set in pname:memoryTypeBits returned for code:usage2, + for all values of pname:flags. + * The pname:alignment member is identical for all sname:VkBuffer objects + created with the same combination of values for the pname:usage and + pname:flags members in the sname:VkBufferCreateInfo structure passed to + fname:vkCreateBuffer. + * The pname:memoryTypeBits member is identical for all sname:VkImage + objects created with the same combination of values for the pname:tiling + member and the ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT bit of the + pname:flags member and the ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT + of the pname:usage member in the sname:VkImageCreateInfo structure + passed to fname:vkCreateImage. * The pname:memoryTypeBits member mustnot: refer to a sname:VkMemoryType with a pname:propertyFlags that has the ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set if the diff --git a/doc/specs/vulkan/chapters/shaders.txt b/doc/specs/vulkan/chapters/shaders.txt index eec485ca..2b66c08d 100644 --- a/doc/specs/vulkan/chapters/shaders.txt +++ b/doc/specs/vulkan/chapters/shaders.txt @@ -368,11 +368,11 @@ Compute shaders are invoked via flink:vkCmdDispatch and flink:vkCmdDispatchIndirect commands. In general, they have access to similar resources as shader stages executing as part of a graphics pipeline. -Compute workloads are formed from groups of work items called _workgroups_ +Compute workloads are formed from groups of work items called workgroups and processed by the compute shader in the current compute pipeline. A workgroup is a collection of shader invocations that execute the same -shader, potentially in parallel. Compute shaders execute in global -workgroups which are divided into a number of _local workgroups_ with a size +shader, potentially in parallel. Compute shaders execute in _global +workgroups_ which are divided into a number of _local workgroups_ with a size that can: be set by assigning a value to the code:LocalSize execution mode either in the shader code or via <>. An @@ -414,7 +414,7 @@ or code:Sample, which will mean the same thing as decorating it only as code:Flat. For fragment shader input variables decorated with neither code:Centroid nor -code:Sample, the value of the assigned variable may: be interpolated +code:Sample, the assigned variable may: be interpolated anywhere within the pixel and a single value may: be assigned to each sample within the pixel. @@ -455,3 +455,30 @@ memory instructions. Static use is not used to control the behavior of variables with code:Input and code:Output storage. The effects of those variables are applied based only on whether they are present in a shader entry point's interface. + +[[shaders-invocationgroups]] +== Invocation and Derivative Groups + +An _invocation group_ (see the subsection ``Control Flow'' of section 2 of the +SPIR-V specification) for a compute shader is the set of invocations in a +single local workgroup. For graphics shaders, an invocation group is an +implementation-dependent subset of the set of shader invocations of a given +shader stage which are produced by a single drawing command. For indirect +drawing commands with pname:drawCount greater than one, invocations from +separate draws are in distinct invocation groups. + +[NOTE] +.Note +==== +Because the partitioning of invocations into invocation groups is +implementation-dependent and not observable, applications generally need to +assume the worst case of all invocations in a draw belonging to a single +invocation group. +==== + +A _derivative group_ (see the subsection ``Control Flow'' of section 2 of the +SPIR-V 1.00 Revision 4 specification) for a fragment shader is the set of +invocations generated by a single primitive (point, line, or triangle), +including any helper invocations generated by that primitive. Derivatives are +undefined for a sampled image instruction if the instruction is in flow +control that is not uniform across the derivative group. diff --git a/doc/specs/vulkan/chapters/sparsemem.txt b/doc/specs/vulkan/chapters/sparsemem.txt index 27b3481b..d92c2e33 100644 --- a/doc/specs/vulkan/chapters/sparsemem.txt +++ b/doc/specs/vulkan/chapters/sparsemem.txt @@ -137,7 +137,7 @@ use. === Sparse Buffer and Fully-Resident Image Block Size The block size for sparse buffers and fully-resident images is reported as -sname:VkMemoryRequirements::pname:alignment. This pname:alignment value +sname:VkMemoryRequirements::pname:alignment. pname:alignment represents both the memory alignment requirement and the binding granularity (in bytes) for sparse resources. @@ -680,7 +680,7 @@ include::../structs/VkPhysicalDeviceSparseProperties.txt[] * pname:residencyAlignedMipSize is ename:VK_TRUE if images with mip level dimensions that are not a multiple of a block size may: be placed in the mip tail. If this property is not reported, only mip levels with - dimensions smaller than the value of the pname:imageGranularity member + dimensions smaller than the pname:imageGranularity member of the sname:VkSparseImageFormatProperties structure will be placed in the mip tail. If this property is reported the implementation is allowed to return ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT in the @@ -761,11 +761,9 @@ available is returned in pname:pPropertyCount. Otherwise, pname:pPropertyCount must: point to a variable set by the user to the number of elements in the pname:pProperties array, and on return the variable is overwritten with the number of structures actually written to -pname:pProperties. If the value of pname:pPropertyCount is less than the +pname:pProperties. If pname:pPropertyCount is less than the number of sparse format properties available, at most pname:pPropertyCount -structures will be written, and ename:VK_INCOMPLETE will be returned instead -of ename:VK_SUCCESS to indicate that not all the available values were -returned. +structures will be written. include::../validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt[] @@ -903,12 +901,10 @@ pname:pSparseMemoryRequirementCount. Otherwise, pname:pSparseMemoryRequirementCount must: point to a variable set by the user to the number of elements in the pname:pSparseMemoryRequirements array, and on return the variable is overwritten with the number of structures -actually written to pname:pSparseMemoryRequirements. If the value of +actually written to pname:pSparseMemoryRequirements. If pname:pSparseMemoryRequirementCount is less than the number of sparse memory requirements available, at most pname:pSparseMemoryRequirementCount -structures will be written, and ename:VK_INCOMPLETE will be returned instead -of ename:VK_SUCCESS to indicate that not all the available values were -returned. +structures will be written. If the image was not created with ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT then pname:pSparseMemoryRequirementCount will be set to zero and @@ -1035,7 +1031,7 @@ include::../validity/structs/VkSparseMemoryBind.txt[] The _binding range_ latexmath:[$[\mathit{resourceOffset}, \mathit{resourceOffset} + \mathit{size})$] has different constraints based -on the value of pname:flags. If pname:flags contains +on pname:flags. If pname:flags contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding range must: be within the mip tail region of the metadata aspect. This metadata region is defined by: diff --git a/doc/specs/vulkan/chapters/synchronization.txt b/doc/specs/vulkan/chapters/synchronization.txt index 66902909..73d1b851 100644 --- a/doc/specs/vulkan/chapters/synchronization.txt +++ b/doc/specs/vulkan/chapters/synchronization.txt @@ -135,8 +135,8 @@ include::../protos/vkWaitForFences.txt[] unblock the wait. If pname:waitAll is ename:VK_TRUE, then the condition is that all fences in pname:pFences are signaled. Otherwise, the condition is that at least one fence in pname:pFences is signaled. - * pname:timeout is the timeout period in units of nanoseconds. The value - of pname:timeout is adjusted to the closest value allowed by the + * pname:timeout is the timeout period in units of nanoseconds. + pname:timeout is adjusted to the closest value allowed by the implementation-dependent timeout accuracy, which may: be substantially longer than one nanosecond, and may: be longer than the requested period. @@ -149,7 +149,7 @@ at the time fname:vkWaitForFences is called, then fname:vkWaitForFences will block and wait up to pname:timeout nanoseconds for the condition to become satisfied. -If the value of pname:timeout is zero, then fname:vkWaitForFences does not +If pname:timeout is zero, then fname:vkWaitForFences does not wait, but simply returns the current state of the fences. ename:VK_TIMEOUT will be returned in this case if the condition is not satisfied, even though no actual wait was performed. @@ -249,7 +249,7 @@ status of the semaphore will be reset to the unsignaled state. In the case of slink:VkSubmitInfo, command buffers wait at specific pipeline stages, rather than delaying the entire command buffer's execution, with the -pipeline stages determined by the value of the corresponding element of the +pipeline stages determined by the corresponding element of the pname:pWaitDstStageMask member of sname:VkSubmitInfo. Execution of work by those stages in subsequent commands is stalled until the corresponding semaphore reaches the signaled state. Subsequent sparse binding operations diff --git a/doc/specs/vulkan/chapters/tessellation.txt b/doc/specs/vulkan/chapters/tessellation.txt index 1926bfe4..29710366 100644 --- a/doc/specs/vulkan/chapters/tessellation.txt +++ b/doc/specs/vulkan/chapters/tessellation.txt @@ -126,7 +126,7 @@ latexmath:[$n$] is one, the edge will not be subdivided. Otherwise, the corresponding edge will be divided into latexmath:[$n-2$] segments of equal length, and two additional segments of equal length that are typically shorter than the other segments. The length of the two additional segments -relative to the others will decrease monotonically with the value of +relative to the others will decrease monotonically with latexmath:[$n-f$], where latexmath:[$f$] is the clamped floating-point tessellation level. When latexmath:[$n-f$] is zero, the additional segments will have equal length to the other segments. As latexmath:[$n-f$] @@ -134,30 +134,29 @@ approaches 2.0, the relative length of the additional segments approaches zero. The two additional segments should: be placed symmetrically on opposite sides of the subdivided edge. The relative location of these two segments is implementation-dependent, but must: be identical for any pair of -subdivided edges with identical values of . +subdivided edges with identical values of latexmath:[$f$]. When the tessellator produces triangles (in the code:Triangles or code:Quads modes), the orientation of all triangles is specified with an code:OpExecutionMode of code:VertexOrderCw or code:VertexOrderCcw in the tessellation control or tessellation evaluation shaders. If the order is -code:VertexOrderCw, the vertices of all generated triangles will have a +code:VertexOrderCw, the vertices of all generated triangles will have clockwise ordering in (u,v) or (u,v,w) space. If the order is -code:VertexOrderCcw, the vertices will be generated with counter-clockwise -order. +code:VertexOrderCcw, the vertices will have counter-clockwise ordering. + +The vertices of a triangle have counter-clockwise ordering if -The vertices of a triangle are defined to be in counter-clockwise ordering -if the value [latexmath] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \[ a = u_0 v_1 - u_1 v_0 + u_1 v_2 - u_2 v_1 + u_2 v_0 - u_0 v_2 \] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -is positive, where latexmath:[$u_i$] and latexmath:[$v_i$] are the -latexmath:[$u$] and latexmath:[$v$] coordinates in normalized parameter -space of the latexmath:[$i$]th vertex of the triangle. If the value -latexmath:[$a$] is negative, the vertices of the triangle are defined to be -in clockwise ordering. + +is positive, and clockwise ordering if latexmath:[$a$] is negative. +latexmath:[$u_i$] and latexmath:[$v_i$] are the latexmath:[$u$] and +latexmath:[$v$] coordinates in normalized parameter space of the +latexmath:[$i$]th vertex of the triangle. [NOTE] .Note diff --git a/doc/specs/vulkan/chapters/textures.txt b/doc/specs/vulkan/chapters/textures.txt index 11d9dc70..5f3bdfef 100644 --- a/doc/specs/vulkan/chapters/textures.txt +++ b/doc/specs/vulkan/chapters/textures.txt @@ -531,7 +531,7 @@ elink:VkFormat), using the appropriate equations in 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 ``KHR_DF_TRANSFER_SRGB`` section of the +and B components as described in the ``KHR_DF_TRANSFER_SRGB'' section of the Khronos Data Format Specification. The A component, if present, is unchanged. @@ -653,8 +653,8 @@ where: The texel is expanded from one, two, or three to four components based on the image base color: -[[textures-border-rgba-replacement-table]] -.Border Texel Components After Replacement +[[textures-texel-color-rgba-conversion-table]] +.Texel Color After Conversion To RGBA [options="header"] |==== | Texel Aspect or Format | RGBA Color diff --git a/doc/specs/vulkan/chapters/vertexpostproc.txt b/doc/specs/vulkan/chapters/vertexpostproc.txt index 702b7bb1..7d377838 100644 --- a/doc/specs/vulkan/chapters/vertexpostproc.txt +++ b/doc/specs/vulkan/chapters/vertexpostproc.txt @@ -115,7 +115,7 @@ enabled cull half-space is negative for all of the vertices of the primitive under consideration, the primitive is discarded. Otherwise the primitive is clipped against the clip volume as defined below. -The clip volume is the intersection of up to the value of +The clip volume is the intersection of up to sname:VkPhysicalDeviceLimits::pname:maxClipDistances client-defined half-spaces with the view volume (if no client-defined clip half-spaces are enabled, the clip volume is the view volume). @@ -126,7 +126,7 @@ latexmath:[$i$] is then given by the set of points satisfying the inequality latexmath:[$c_i(P) \geq 0$] -where latexmath:[$c_i(P)$] is the value of clip distance latexmath:[$i$] at +where latexmath:[$c_i(P)$] is the clip distance latexmath:[$i$] at point latexmath:[$P$]. For point primitives, latexmath:[$c_i(P)$] is simply the clip distance for the vertex in question. For line and triangle primitives, per-vertex clip distances are interpolated using a weighted @@ -169,7 +169,7 @@ latexmath:[$t$] is given by latexmath:[${\textbf P} = t{\textbf P}_1 + (1-t){\textbf P}_2.$] -The value of latexmath:[$t$] is used to clip vertex output attributes as +latexmath:[$t$] is used to clip vertex output attributes as described in <>. @@ -313,8 +313,8 @@ include::../validity/structs/VkPipelineViewportStateCreateInfo.txt[] If a geometry shader is active and has an output variable decorated with code:ViewportIndex, the viewport transformation uses the viewport corresponding to the value assigned to code:ViewportIndex taken from an -implementation-dependent vertex of each primitive. If the value of -code:ViewportIndex is outside the range zero to the value of +implementation-dependent vertex of each primitive. If +code:ViewportIndex is outside the range zero to pname:viewportCount minus one for a primitive, or if the geometry shader did not assign a value to code:ViewportIndex for all vertices of a primitive due to flow control, the results of the viewport transformation of the vertices diff --git a/doc/specs/vulkan/config/vkspec-xhtml.css b/doc/specs/vulkan/config/vkspec-xhtml.css index e5f026ff..01e2b3f9 100644 --- a/doc/specs/vulkan/config/vkspec-xhtml.css +++ b/doc/specs/vulkan/config/vkspec-xhtml.css @@ -133,7 +133,12 @@ div.navfooter hr { } body td { - line-height: 1.2 + line-height: 1.2; +} + +table p { + margin-top: 0px; + margin-bottom: 0px; } body th { diff --git a/doc/specs/vulkan/images/non_strict_lines.svg b/doc/specs/vulkan/images/non_strict_lines.svg index 8cdb7096..4714fc08 100644 --- a/doc/specs/vulkan/images/non_strict_lines.svg +++ b/doc/specs/vulkan/images/non_strict_lines.svg @@ -14,7 +14,7 @@ viewBox="0 0 650.00001 350" id="svg2" version="1.1" - inkscape:version="0.91 r13725" + inkscape:version="0.48.5 r10040" sodipodi:docname="non_strict_lines.svg"> @@ -161,7 +161,7 @@ image/svg+xml - + @@ -183,7 +183,7 @@ y="976.64783">Xa, Ya, Za Ab, Yb, Zb + y="782.15295">Xb, Yb, Zb > feature is not supported, pname:pipeline is a graphics pipeline, the current subpass has no attachments, and this is not the first call to this function with a graphics pipeline after transitioning to the current subpass, then the sample count specified by this pipeline must: match that set in the previous pipeline ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/protos/vkCmdBindVertexBuffers.txt b/doc/specs/vulkan/validity/protos/vkCmdBindVertexBuffers.txt index 8cdf316d..0dbf05d5 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdBindVertexBuffers.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdBindVertexBuffers.txt @@ -12,7 +12,7 @@ endif::doctype-manpage[] * pname:pOffsets must: be a pointer to an array of pname:bindingCount basetype:VkDeviceSize values * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations -* The value of pname:bindingCount must: be greater than `0` +* pname:bindingCount must: be greater than `0` * Each of pname:commandBuffer and the elements of pname:pBuffers must: have been created, allocated or retrieved from the same sname:VkDevice * pname:firstBinding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings * The sum of pname:firstBinding and pname:bindingCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings diff --git a/doc/specs/vulkan/validity/protos/vkCmdBlitImage.txt b/doc/specs/vulkan/validity/protos/vkCmdBlitImage.txt index dd01d0ff..92fdcaab 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdBlitImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdBlitImage.txt @@ -17,7 +17,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations * This command must: only be called outside of a render pass instance -* The value of pname:regionCount must: be greater than `0` +* pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcImage and pname:dstImage must: have been created, allocated or retrieved from the same sname:VkDevice * The source region specified by a given element of pname:pRegions must: be a region that is contained within pname:srcImage * The destination region specified by a given element of pname:pRegions must: be a region that is contained within pname:dstImage diff --git a/doc/specs/vulkan/validity/protos/vkCmdClearAttachments.txt b/doc/specs/vulkan/validity/protos/vkCmdClearAttachments.txt index d9201802..6a3a311f 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdClearAttachments.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdClearAttachments.txt @@ -13,8 +13,8 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations * This command must: only be called inside of a render pass instance -* The value of pname:attachmentCount must: be greater than `0` -* The value of pname:rectCount must: be greater than `0` +* pname:attachmentCount must: be greater than `0` +* pname:rectCount must: be greater than `0` * 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 * 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 layers specified by a given element of pname:pRects must: be contained within every attachment that pname:pAttachments refers to diff --git a/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt b/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt index 7a97fb25..769b263b 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt @@ -15,7 +15,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations * This command must: only be called outside of a render pass instance -* The value of pname:rangeCount must: be greater than `0` +* pname:rangeCount must: be greater than `0` * Each of pname:commandBuffer and pname:image must: have been created, allocated or retrieved from the same sname:VkDevice * pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag * pname:imageLayout must: specify the layout of the subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice diff --git a/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt b/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt index 399f131f..46c79d10 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt @@ -15,7 +15,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations * This command must: only be called outside of a render pass instance -* The value of pname:rangeCount must: be greater than `0` +* pname:rangeCount must: be greater than `0` * Each of pname:commandBuffer and pname:image must: have been created, allocated or retrieved from the same sname:VkDevice * pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag * pname:imageLayout must: specify the layout of the subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice diff --git a/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt b/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt index 35f340c9..2db7d0f5 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt @@ -14,7 +14,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations * This command must: only be called outside of a render pass instance -* The value of pname:regionCount must: be greater than `0` +* pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice * The pname:copySize member of a given element of pname:pRegions must: be greater than `0` * The pname:srcOffset member of a given element of pname:pRegions must: be less than the size of pname:srcBuffer diff --git a/doc/specs/vulkan/validity/protos/vkCmdCopyBufferToImage.txt b/doc/specs/vulkan/validity/protos/vkCmdCopyBufferToImage.txt index 59758999..32a6940d 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdCopyBufferToImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdCopyBufferToImage.txt @@ -15,7 +15,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations * This command must: only be called outside of a render pass instance -* The value of pname:regionCount must: be greater than `0` +* pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcBuffer and pname:dstImage must: have been created, allocated or retrieved from the same sname:VkDevice * The buffer region specified by a given element of pname:pRegions must: be a region that is contained within pname:srcBuffer * The image region specified by a given element of pname:pRegions must: be a region that is contained within pname:dstImage diff --git a/doc/specs/vulkan/validity/protos/vkCmdCopyImage.txt b/doc/specs/vulkan/validity/protos/vkCmdCopyImage.txt index 5e895f96..a251d42d 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdCopyImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdCopyImage.txt @@ -16,7 +16,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations * This command must: only be called outside of a render pass instance -* The value of pname:regionCount must: be greater than `0` +* pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcImage and pname:dstImage must: have been created, allocated or retrieved from the same sname:VkDevice * The source region specified by a given element of pname:pRegions must: be a region that is contained within pname:srcImage * The destination region specified by a given element of pname:pRegions must: be a region that is contained within pname:dstImage diff --git a/doc/specs/vulkan/validity/protos/vkCmdCopyImageToBuffer.txt b/doc/specs/vulkan/validity/protos/vkCmdCopyImageToBuffer.txt index e77a21ca..ab0f7e4b 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdCopyImageToBuffer.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdCopyImageToBuffer.txt @@ -15,7 +15,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations * This command must: only be called outside of a render pass instance -* The value of pname:regionCount must: be greater than `0` +* pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcImage and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice * The image region specified by a given element of pname:pRegions must: be a region that is contained within pname:srcImage * The buffer region specified by a given element of pname:pRegions must: be a region that is contained within pname:dstBuffer diff --git a/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt b/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt index ca01458f..6bf0ed50 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt @@ -17,7 +17,7 @@ endif::doctype-manpage[] * Descriptors in each bound descriptor set, specified via fname:vkCmdBindDescriptorSets, must: be valid if they are statically used by the currently bound sname:VkPipeline object, specified via fname:vkCmdBindPipeline * A valid compute pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_COMPUTE * pname:buffer must: have been created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set -* The value of pname:offset must: be a multiple of `4` +* pname:offset must: be a multiple of `4` * The sum of pname:offset and the size of sname:VkDispatchIndirectCommand must: be less than or equal to the size of pname:buffer * For each push constant that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant value must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a sname:VkPipelineLayout that is compatible for push constants with the one used to create the current sname:VkPipeline, as described in <> * If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage diff --git a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt index 34e933c5..ae4923f3 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt @@ -18,7 +18,7 @@ endif::doctype-manpage[] * For a given vertex buffer binding, any attribute data fetched must: be entirely contained within the corresponding vertex buffer binding, as described in <> * A valid graphics pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_GRAPHICS * If the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that state must: have been set on the current command buffer -* The total value of (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer +* (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer * Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set * If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage * If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or code:Proj in their name, in any shader stage diff --git a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt index 635c7f90..8640127c 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt @@ -13,9 +13,9 @@ endif::doctype-manpage[] * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations * This command must: only be called inside of a render pass instance * Each of pname:commandBuffer and pname:buffer must: have been created, allocated or retrieved from the same sname:VkDevice -* The value of pname:offset must: be a multiple of `4` -* If pname:drawCount is greater than `1`, the value of pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndexedIndirectCommand) -* If the <> feature is not enabled, the value of pname:drawCount must: be `0` or `1` +* pname:offset must: be a multiple of `4` +* If pname:drawCount is greater than `1`, pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndexedIndirectCommand) +* If the <> feature is not enabled, pname:drawCount must: be `0` or `1` * If the <> feature is not enabled, all the pname:firstInstance members of the sname:VkDrawIndexedIndirectCommand structures accessed by this command must: be code:0 * For each set _n_ that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for set _n_, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <> * For each push constant that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for push constants, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <> @@ -23,8 +23,8 @@ endif::doctype-manpage[] * All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point's interface must: have valid buffers bound * A valid graphics pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_GRAPHICS * If the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that state must: have been set on the current command buffer -* If pname:drawCount is equal to `1`, the total value of (pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer -* If pname:drawCount is greater than `1`, the total value of (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer +* If pname:drawCount is equal to `1`, (pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer +* If pname:drawCount is greater than `1`, (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer * pname:drawCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount * Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set * If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage diff --git a/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt b/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt index 5ef99288..d421f4bb 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt @@ -13,9 +13,9 @@ endif::doctype-manpage[] * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations * This command must: only be called inside of a render pass instance * Each of pname:commandBuffer and pname:buffer must: have been created, allocated or retrieved from the same sname:VkDevice -* The value of pname:offset must: be a multiple of `4` -* If pname:drawCount is greater than `1`, the value of pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndirectCommand) -* If the <> feature is not enabled, the value of pname:drawCount must: be `0` or `1` +* pname:offset must: be a multiple of `4` +* If pname:drawCount is greater than `1`, pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndirectCommand) +* If the <> feature is not enabled, pname:drawCount must: be `0` or `1` * If the <> feature is not enabled, all the pname:firstInstance members of the sname:VkDrawIndirectCommand structures accessed by this command must: be code:0 * For each set _n_ that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for set _n_, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <> * For each push constant that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for push constants, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <> @@ -23,8 +23,8 @@ endif::doctype-manpage[] * All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point's interface must: have valid buffers bound * A valid graphics pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_GRAPHICS * If the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that state must: have been set on the current command buffer -* If pname:drawCount is equal to `1`, the total value of (pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer -* If pname:drawCount is greater than `1`, the total value of (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer +* If pname:drawCount is equal to `1`, (pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer +* If pname:drawCount is greater than `1`, (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer * pname:drawCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount * Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set * If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage diff --git a/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt b/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt index 13939a5a..4cf06b7e 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt @@ -12,10 +12,10 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations * pname:commandBuffer must: be a primary sname:VkCommandBuffer -* The value of pname:commandBufferCount must: be greater than `0` +* pname:commandBufferCount must: be greater than `0` * Each of pname:commandBuffer and the elements of pname:pCommandBuffers must: have been created, allocated or retrieved from the same sname:VkDevice -* pname:commandBuffer must: have been created with a pname:level value of ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY -* Any given element of pname:pCommandBuffers must: have been created with a pname:level value of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY +* pname:commandBuffer must: have been created with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY +* Any given element of pname:pCommandBuffers must: have been created with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY * Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag * Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag * Any given element of pname:pCommandBuffers must: be in the executable state diff --git a/doc/specs/vulkan/validity/protos/vkCmdFillBuffer.txt b/doc/specs/vulkan/validity/protos/vkCmdFillBuffer.txt index 8cf1a9ea..62aabcee 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdFillBuffer.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdFillBuffer.txt @@ -13,9 +13,9 @@ endif::doctype-manpage[] * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations * This command must: only be called outside of a render pass instance * Each of pname:commandBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice -* pname:size must: be greater than `0` * pname:dstOffset must: be less than the size of pname:dstBuffer * pname:dstOffset must: be a multiple of `4` +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be greater than `0` * If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset * If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of `4` * pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag diff --git a/doc/specs/vulkan/validity/protos/vkCmdPushConstants.txt b/doc/specs/vulkan/validity/protos/vkCmdPushConstants.txt index 71e3757e..6d9d7c44 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdPushConstants.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdPushConstants.txt @@ -14,13 +14,13 @@ endif::doctype-manpage[] * pname:pValues must: be a pointer to an array of pname:size bytes * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations -* The value of pname:size must: be greater than `0` +* pname:size must: be greater than `0` * Each of pname:commandBuffer and pname:layout must: have been created, allocated or retrieved from the same sname:VkDevice * pname:stageFlags must: match exactly the shader stages used in pname:layout for the range specified by pname:offset and pname:size * pname:offset must: be a multiple of `4` * pname:size must: be a multiple of `4` -* pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize -* pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset +* pname:offset must: be less than sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize +* pname:size must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdResolveImage.txt b/doc/specs/vulkan/validity/protos/vkCmdResolveImage.txt index 3221380b..8dc83fec 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdResolveImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdResolveImage.txt @@ -16,7 +16,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations * This command must: only be called outside of a render pass instance -* The value of pname:regionCount must: be greater than `0` +* pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcImage and pname:dstImage must: have been created, allocated or retrieved from the same sname:VkDevice * The source region specified by a given element of pname:pRegions must: be a region that is contained within pname:srcImage * The destination region specified by a given element of pname:pRegions must: be a region that is contained within pname:dstImage diff --git a/doc/specs/vulkan/validity/protos/vkCmdSetDepthBias.txt b/doc/specs/vulkan/validity/protos/vkCmdSetDepthBias.txt index 3f1f7ee2..d12eb1d5 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdSetDepthBias.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdSetDepthBias.txt @@ -10,7 +10,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be a valid sname:VkCommandBuffer handle * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations -* If the <> feature is not enabled, the value of pname:depthBiasClamp must: be code:0.0 +* If the <> feature is not enabled, pname:depthBiasClamp must: be code:0.0 ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdSetDepthBounds.txt b/doc/specs/vulkan/validity/protos/vkCmdSetDepthBounds.txt index 418a87c2..8100b81e 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdSetDepthBounds.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdSetDepthBounds.txt @@ -10,8 +10,8 @@ endif::doctype-manpage[] * pname:commandBuffer must: be a valid sname:VkCommandBuffer handle * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations -* The value of pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive -* The value of pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive +* pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive +* pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdSetLineWidth.txt b/doc/specs/vulkan/validity/protos/vkCmdSetLineWidth.txt index fba02f82..71d9414f 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdSetLineWidth.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdSetLineWidth.txt @@ -10,7 +10,7 @@ endif::doctype-manpage[] * pname:commandBuffer must: be a valid sname:VkCommandBuffer handle * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations -* If the <> feature is not enabled, the value of pname:lineWidth must: be `1.0` +* If the <> feature is not enabled, pname:lineWidth must: be `1.0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdSetScissor.txt b/doc/specs/vulkan/validity/protos/vkCmdSetScissor.txt index 377db428..59ef5686 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdSetScissor.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdSetScissor.txt @@ -11,7 +11,7 @@ endif::doctype-manpage[] * pname:pScissors must: be a pointer to an array of pname:scissorCount sname:VkRect2D structures * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations -* The value of pname:scissorCount must: be greater than `0` +* pname:scissorCount must: be greater than `0` * pname:firstScissor must: be less than sname:VkPhysicalDeviceLimits::pname:maxViewports * The sum of pname:firstScissor and pname:scissorCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive * The pname:x and pname:y members of pname:offset must: be greater than or equal to `0` diff --git a/doc/specs/vulkan/validity/protos/vkCmdSetViewport.txt b/doc/specs/vulkan/validity/protos/vkCmdSetViewport.txt index 267623ba..eac2be8d 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdSetViewport.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdSetViewport.txt @@ -11,7 +11,7 @@ endif::doctype-manpage[] * pname:pViewports must: be a pointer to an array of pname:viewportCount valid sname:VkViewport structures * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations -* The value of pname:viewportCount must: be greater than `0` +* pname:viewportCount must: be greater than `0` * pname:firstViewport must: be less than sname:VkPhysicalDeviceLimits::pname:maxViewports * The sum of pname:firstViewport and pname:viewportCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive ifndef::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdUpdateBuffer.txt b/doc/specs/vulkan/validity/protos/vkCmdUpdateBuffer.txt index 58ff0c5e..7c4a9b27 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdUpdateBuffer.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdUpdateBuffer.txt @@ -14,13 +14,13 @@ endif::doctype-manpage[] * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support transfer, graphics or compute operations * This command must: only be called outside of a render pass instance * Each of pname:commandBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice -* The value of pname:dataSize must: be greater than `0` -* The value of pname:dstOffset must: be less than the size of pname:dstBuffer -* The value of pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset +* pname:dataSize must: be greater than `0` +* pname:dstOffset must: be less than the size of pname:dstBuffer +* pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset * pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag -* The value of pname:dstOffset must: be a multiple of `4` -* The value of pname:dataSize must: be less than or equal to `65536` -* The value of pname:dataSize must: be a multiple of `4` +* pname:dstOffset must: be a multiple of `4` +* pname:dataSize must: be less than or equal to `65536` +* pname:dataSize must: be a multiple of `4` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdWaitEvents.txt b/doc/specs/vulkan/validity/protos/vkCmdWaitEvents.txt index 73f22277..0ddb5d56 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdWaitEvents.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdWaitEvents.txt @@ -18,7 +18,7 @@ endif::doctype-manpage[] * If pname:imageMemoryBarrierCount is not `0`, pname:pImageMemoryBarriers must: be a pointer to an array of pname:imageMemoryBarrierCount valid sname:VkImageMemoryBarrier structures * pname:commandBuffer must: be in the recording state * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations -* The value of pname:eventCount must: be greater than `0` +* pname:eventCount must: be greater than `0` * Each of pname:commandBuffer and the elements of pname:pEvents must: have been created, allocated or retrieved from the same sname:VkDevice * pname:srcStageMask must: be the bitwise OR of the pname:stageMask parameter used in previous calls to fname:vkCmdSetEvent with any of the members of pname:pEvents and ename:VK_PIPELINE_STAGE_HOST_BIT if any of the members of pname:pEvents was set using fname:vkSetEvent * If the <> feature is not enabled, pname:srcStageMask mustnot: contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT diff --git a/doc/specs/vulkan/validity/protos/vkCmdWriteTimestamp.txt b/doc/specs/vulkan/validity/protos/vkCmdWriteTimestamp.txt index d728e7e4..802aee7d 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdWriteTimestamp.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdWriteTimestamp.txt @@ -14,7 +14,7 @@ endif::doctype-manpage[] * The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics or compute operations * Each of pname:commandBuffer and pname:queryPool must: have been created, allocated or retrieved from the same sname:VkDevice * The query identified by pname:queryPool and pname:query must: be _unavailable_ -* The command pool's queue family must: support a non-zero value of pname:timestampValidBits +* The command pool's queue family must: support a non-zero pname:timestampValidBits ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCreateComputePipelines.txt b/doc/specs/vulkan/validity/protos/vkCreateComputePipelines.txt index 6863df8d..549b1112 100644 --- a/doc/specs/vulkan/validity/protos/vkCreateComputePipelines.txt +++ b/doc/specs/vulkan/validity/protos/vkCreateComputePipelines.txt @@ -12,10 +12,10 @@ endif::doctype-manpage[] * pname:pCreateInfos must: be a pointer to an array of pname:createInfoCount valid sname:VkComputePipelineCreateInfo structures * If pname:pAllocator is not `NULL`, pname:pAllocator must: be a pointer to a valid sname:VkAllocationCallbacks structure * pname:pPipelines must: be a pointer to an array of pname:createInfoCount sname:VkPipeline handles -* The value of pname:createInfoCount must: be greater than `0` +* pname:createInfoCount must: be greater than `0` * If pname:pipelineCache is a valid handle, it must: have been created, allocated or retrieved from pname:device * Each of pname:device and pname:pipelineCache that are valid handles must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice -* If the value of the pname:flags member of any given 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`, the value of pname:basePipelineIndex must: be less than the index into pname:pCreateInfos that corresponds to that element +* If the pname:flags member of any given 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 ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCreateGraphicsPipelines.txt b/doc/specs/vulkan/validity/protos/vkCreateGraphicsPipelines.txt index 5e3b777a..669900a6 100644 --- a/doc/specs/vulkan/validity/protos/vkCreateGraphicsPipelines.txt +++ b/doc/specs/vulkan/validity/protos/vkCreateGraphicsPipelines.txt @@ -12,10 +12,10 @@ endif::doctype-manpage[] * pname:pCreateInfos must: be a pointer to an array of pname:createInfoCount valid sname:VkGraphicsPipelineCreateInfo structures * If pname:pAllocator is not `NULL`, pname:pAllocator must: be a pointer to a valid sname:VkAllocationCallbacks structure * pname:pPipelines must: be a pointer to an array of pname:createInfoCount sname:VkPipeline handles -* The value of pname:createInfoCount must: be greater than `0` +* pname:createInfoCount must: be greater than `0` * If pname:pipelineCache is a valid handle, it must: have been created, allocated or retrieved from pname:device * Each of pname:device and pname:pipelineCache that are valid handles must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice -* If the value of the pname:flags member of any given 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`, the value of pname:basePipelineIndex must: be less than the index into pname:pCreateInfos that corresponds to that element +* If the pname:flags member of any given 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 ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkEnumerateDeviceLayerProperties.txt b/doc/specs/vulkan/validity/protos/vkEnumerateDeviceLayerProperties.txt index 512c63d5..01bb11b1 100644 --- a/doc/specs/vulkan/validity/protos/vkEnumerateDeviceLayerProperties.txt +++ b/doc/specs/vulkan/validity/protos/vkEnumerateDeviceLayerProperties.txt @@ -9,8 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:physicalDevice must: be a valid sname:VkPhysicalDevice handle * pname:pPropertyCount must: be a pointer to a basetype:uint32_t value -* If pname:pProperties is not `NULL`, pname:pProperties must: be a pointer to an array of pname:pPropertyCount sname:VkLayerProperties structures -* If pname:pProperties is not `NULL`, the value referenced by pname:pPropertyCount must: be greater than `0` +* If the value referenced by pname:pPropertyCount is not `0`, and pname:pProperties is not `NULL`, pname:pProperties must: be a pointer to an array of pname:pPropertyCount sname:VkLayerProperties structures ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt b/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt index 05fead65..407b1cfc 100644 --- a/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt +++ b/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pMemoryRanges must: be a pointer to an array of pname:memoryRangeCount valid sname:VkMappedMemoryRange structures -* The value of pname:memoryRangeCount must: be greater than `0` +* pname:memoryRangeCount must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkFreeCommandBuffers.txt b/doc/specs/vulkan/validity/protos/vkFreeCommandBuffers.txt index e8568114..4ce13653 100644 --- a/doc/specs/vulkan/validity/protos/vkFreeCommandBuffers.txt +++ b/doc/specs/vulkan/validity/protos/vkFreeCommandBuffers.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:commandPool must: be a valid sname:VkCommandPool handle -* The value of pname:commandBufferCount must: be greater than `0` +* pname:commandBufferCount must: be greater than `0` * pname:commandPool must: have been created, allocated or retrieved from pname:device * Each element of pname:pCommandBuffers that is a valid handle must: have been created, allocated or retrieved from pname:commandPool * Each of pname:device, pname:commandPool and the elements of pname:pCommandBuffers that are valid handles must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice diff --git a/doc/specs/vulkan/validity/protos/vkFreeDescriptorSets.txt b/doc/specs/vulkan/validity/protos/vkFreeDescriptorSets.txt index ce0ce248..10450ad1 100644 --- a/doc/specs/vulkan/validity/protos/vkFreeDescriptorSets.txt +++ b/doc/specs/vulkan/validity/protos/vkFreeDescriptorSets.txt @@ -9,11 +9,11 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:descriptorPool must: be a valid sname:VkDescriptorPool handle -* The value of pname:descriptorSetCount must: be greater than `0` +* pname:descriptorSetCount must: be greater than `0` * pname:descriptorPool must: have been created, allocated or retrieved from pname:device * Each element of pname:pDescriptorSets that is a valid handle must: have been created, allocated or retrieved from pname:descriptorPool * Each of pname:device, pname:descriptorPool and the elements of pname:pDescriptorSets that are valid handles must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice -* All submitted commands that refer to any element of pname:pDesciptorSets must: have completed execution +* All submitted commands that refer to any element of pname:pDescriptorSets must: have completed execution * pname:pDescriptorSets must: be a pointer to an array of pname:descriptorSetCount sname:VkDescriptorSet handles, each element of which must: either be a valid handle or sname:VK_NULL_HANDLE * pname:descriptorPool must: have been created with the ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag ifndef::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt b/doc/specs/vulkan/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt index d146439e..cf0c9cbf 100644 --- a/doc/specs/vulkan/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt +++ b/doc/specs/vulkan/validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt @@ -16,11 +16,11 @@ endif::doctype-manpage[] * pname:tiling must: be a valid elink:VkImageTiling value * pname:pPropertyCount must: be a pointer to a basetype:uint32_t value * If the value referenced by pname:pPropertyCount is not `0`, and pname:pProperties is not `NULL`, pname:pProperties must: be a pointer to an array of pname:pPropertyCount sname:VkSparseImageFormatProperties structures -* If pname:format is an integer format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts -* If pname:format is a non-integer color format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts -* If pname:format is a depth format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts -* If pname:format is a stencil format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageStencilSampleCounts -* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts +* If pname:format is an integer format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts +* If pname:format is a non-integer color format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts +* If pname:format is a depth format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts +* If pname:format is a stencil format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageStencilSampleCounts +* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt b/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt index 746a25bf..ed588a52 100644 --- a/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt +++ b/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt @@ -11,7 +11,7 @@ endif::doctype-manpage[] * pname:queryPool must: be a valid sname:VkQueryPool handle * pname:pData must: be a pointer to an array of pname:dataSize bytes * pname:flags must: be a valid combination of elink:VkQueryResultFlagBits values -* The value of pname:dataSize must: be greater than `0` +* pname:dataSize must: be greater than `0` * pname:queryPool must: have been created, allocated or retrieved from pname:device * Each of pname:device and pname:queryPool must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice * pname:firstQuery must: be less than the number of queries in pname:queryPool diff --git a/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt b/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt index 05fead65..407b1cfc 100644 --- a/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt +++ b/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pMemoryRanges must: be a pointer to an array of pname:memoryRangeCount valid sname:VkMappedMemoryRange structures -* The value of pname:memoryRangeCount must: be greater than `0` +* pname:memoryRangeCount must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkMapMemory.txt b/doc/specs/vulkan/validity/protos/vkMapMemory.txt index 4f72dd0f..8a5a6cbd 100644 --- a/doc/specs/vulkan/validity/protos/vkMapMemory.txt +++ b/doc/specs/vulkan/validity/protos/vkMapMemory.txt @@ -15,7 +15,7 @@ endif::doctype-manpage[] * Each of pname:device and pname:memory must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice * pname:memory mustnot: currently be mapped * pname:offset must: be less than the size of pname:memory -* pname:size must: be greater than `0` +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be greater than `0` * If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of the pname:memory minus pname:offset * pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT ifndef::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkMergePipelineCaches.txt b/doc/specs/vulkan/validity/protos/vkMergePipelineCaches.txt index a5408321..0c5000ef 100644 --- a/doc/specs/vulkan/validity/protos/vkMergePipelineCaches.txt +++ b/doc/specs/vulkan/validity/protos/vkMergePipelineCaches.txt @@ -10,7 +10,7 @@ endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:dstCache must: be a valid sname:VkPipelineCache handle * pname:pSrcCaches must: be a pointer to an array of pname:srcCacheCount valid sname:VkPipelineCache handles -* The value of pname:srcCacheCount must: be greater than `0` +* pname:srcCacheCount must: be greater than `0` * pname:dstCache must: have been created, allocated or retrieved from pname:device * Each element of pname:pSrcCaches must: have been created, allocated or retrieved from pname:device * Each of pname:device, pname:dstCache and the elements of pname:pSrcCaches must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice diff --git a/doc/specs/vulkan/validity/protos/vkResetFences.txt b/doc/specs/vulkan/validity/protos/vkResetFences.txt index fd8e9547..575560d2 100644 --- a/doc/specs/vulkan/validity/protos/vkResetFences.txt +++ b/doc/specs/vulkan/validity/protos/vkResetFences.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pFences must: be a pointer to an array of pname:fenceCount valid sname:VkFence handles -* The value of pname:fenceCount must: be greater than `0` +* pname:fenceCount must: be greater than `0` * Each element of pname:pFences must: have been created, allocated or retrieved from pname:device * Each of pname:device and the elements of pname:pFences must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice * Any given element of pname:pFences mustnot: currently be associated with any queue command that has not yet completed execution on that queue diff --git a/doc/specs/vulkan/validity/protos/vkWaitForFences.txt b/doc/specs/vulkan/validity/protos/vkWaitForFences.txt index 03e9ddaa..42ebcd48 100644 --- a/doc/specs/vulkan/validity/protos/vkWaitForFences.txt +++ b/doc/specs/vulkan/validity/protos/vkWaitForFences.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pFences must: be a pointer to an array of pname:fenceCount valid sname:VkFence handles -* The value of pname:fenceCount must: be greater than `0` +* pname:fenceCount must: be greater than `0` * Each element of pname:pFences must: have been created, allocated or retrieved from pname:device * Each of pname:device and the elements of pname:pFences must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice ifndef::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkBufferCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkBufferCreateInfo.txt index 191ac1fc..f5ac0798 100644 --- a/doc/specs/vulkan/validity/structs/VkBufferCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkBufferCreateInfo.txt @@ -13,7 +13,7 @@ endif::doctype-manpage[] * pname:usage must: be a valid combination of elink:VkBufferUsageFlagBits values * pname:usage mustnot: be `0` * pname:sharingMode must: be a valid elink:VkSharingMode value -* The value of pname:size must: be greater than `0` +* pname:size must: be greater than `0` * If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:pQueueFamilyIndices must: be a pointer to an array of pname:queueFamilyIndexCount basetype:uint32_t values * If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:queueFamilyIndexCount must: be greater than `1` * If the <> feature is not enabled, pname:flags mustnot: contain ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT diff --git a/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt b/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt index bbdfd76a..ac60a006 100644 --- a/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt +++ b/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt @@ -12,8 +12,8 @@ endif::doctype-manpage[] * pname:srcAccessMask must: be a valid combination of elink:VkAccessFlagBits values * pname:dstAccessMask must: be a valid combination of elink:VkAccessFlagBits values * pname:buffer must: be a valid sname:VkBuffer handle -* The value of pname:offset must: be less than the size of pname:buffer -* The value of pname:size must: be greater than `0` +* pname:offset must: be less than the size of pname:buffer +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be greater than `0` * If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to than the size of pname:buffer minus pname:offset * If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED * If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <>) diff --git a/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt index 0517ef27..9d9efb1d 100644 --- a/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt @@ -12,12 +12,13 @@ endif::doctype-manpage[] * pname:flags must: be `0` * pname:buffer must: be a valid sname:VkBuffer handle * pname:format must: be a valid elink:VkFormat value -* The value of pname:offset must: be less than the size of pname:buffer -* The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment -* The value of pname:range must: be greater than `0` -* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset -* If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format -* The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements +* pname:offset must: be less than the size of pname:buffer +* pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment +* If pname:range is not equal to ename:VK_WHOLE_SIZE: +* pname:range must: be greater than `0` +* pname:range must: be a multiple of the element size of pname:format +* pname:range divided by the size of an element of pname:format, must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements +* the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer * pname:buffer must: have been created with a pname:usage value containing at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT * If pname:buffer was created with pname:usage containing ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:format must: be supported for uniform texel buffers, as specified by the ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties * If pname:buffer was created with pname:usage containing ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:format must: be supported for storage texel buffers, as specified by the ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties diff --git a/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt b/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt index 9103cbcb..358aa781 100644 --- a/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:buffer must: be a valid sname:VkBuffer handle * pname:offset must: be less than the size of pname:buffer -* The value of pname:range must: be greater than `0` +* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be greater than `0` * If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkDescriptorPoolCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkDescriptorPoolCreateInfo.txt index a5582c85..46c74674 100644 --- a/doc/specs/vulkan/validity/structs/VkDescriptorPoolCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDescriptorPoolCreateInfo.txt @@ -11,8 +11,8 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:flags must: be a valid combination of elink:VkDescriptorPoolCreateFlagBits values * pname:pPoolSizes must: be a pointer to an array of pname:poolSizeCount valid sname:VkDescriptorPoolSize structures -* The value of pname:poolSizeCount must: be greater than `0` -* The value of pname:maxSets must: be greater than `0` +* pname:poolSizeCount must: be greater than `0` +* pname:maxSets must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkDescriptorPoolSize.txt b/doc/specs/vulkan/validity/structs/VkDescriptorPoolSize.txt index df195298..cc83098a 100644 --- a/doc/specs/vulkan/validity/structs/VkDescriptorPoolSize.txt +++ b/doc/specs/vulkan/validity/structs/VkDescriptorPoolSize.txt @@ -8,7 +8,7 @@ Valid Usage ----------- endif::doctype-manpage[] * pname:type must: be a valid elink:VkDescriptorType value -* The value of pname:descriptorCount must: be greater than `0` +* pname:descriptorCount must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt b/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt index cdf8810f..ac90038e 100644 --- a/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt @@ -11,9 +11,9 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:descriptorPool must: be a valid sname:VkDescriptorPool handle * pname:pSetLayouts must: be a pointer to an array of pname:descriptorSetCount valid sname:VkDescriptorSetLayout handles -* The value of pname:descriptorSetCount must: be greater than `0` +* pname:descriptorSetCount must: be greater than `0` * Each of pname:descriptorPool and the elements of pname:pSetLayouts must: have been created, allocated or retrieved from the same sname:VkDevice -* The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool +* pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool * pname:descriptorPool must: have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt index a3951dd1..57e537f1 100644 --- a/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt @@ -13,8 +13,8 @@ endif::doctype-manpage[] * pname:pQueueCreateInfos must: be a pointer to an array of pname:queueCreateInfoCount valid sname:VkDeviceQueueCreateInfo structures * If pname:enabledLayerCount is not `0`, and pname:ppEnabledLayerNames is not `NULL`, pname:ppEnabledLayerNames must: be a pointer to an array of pname:enabledLayerCount null-terminated strings * If pname:enabledExtensionCount is not `0`, and pname:ppEnabledExtensionNames is not `NULL`, pname:ppEnabledExtensionNames must: be a pointer to an array of pname:enabledExtensionCount null-terminated strings -* pname:pEnabledFeatures must: be a pointer to a valid sname:VkPhysicalDeviceFeatures structure -* The value of pname:queueCreateInfoCount must: be greater than `0` +* If pname:pEnabledFeatures is not `NULL`, pname:pEnabledFeatures must: be a pointer to a valid sname:VkPhysicalDeviceFeatures structure +* pname:queueCreateInfoCount must: be greater than `0` * Any given element of pname:ppEnabledLayerNames must: be the name of a layer present on the system, exactly matching a string returned in the sname:VkLayerProperties structure by fname:vkEnumerateDeviceLayerProperties * Any given element of pname:ppEnabledExtensionNames must: be the name of an extension present on the system, exactly matching a string returned in the sname:VkExtensionProperties structure by fname:vkEnumerateDeviceExtensionProperties * If an extension listed in pname:ppEnabledExtensionNames is provided as part of a layer, then both the layer and extension must: be enabled to enable that extension diff --git a/doc/specs/vulkan/validity/structs/VkDeviceQueueCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkDeviceQueueCreateInfo.txt index 391abb50..36761547 100644 --- a/doc/specs/vulkan/validity/structs/VkDeviceQueueCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDeviceQueueCreateInfo.txt @@ -11,10 +11,10 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:flags must: be `0` * pname:pQueuePriorities must: be a pointer to an array of pname:queueCount basetype:float values -* The value of pname:queueCount must: be greater than `0` -* pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties -* pname:queueCount must: be less than or equal to the value of the pname:queueCount member of the sname:VkQueueFamilyProperties structure, as returned by fname:vkGetPhysicalDeviceQueueFamilyProperties in the pname:pQueueFamilyProperties[pname:queueFamilyIndex] -* The value of any given element of pname:pQueuePriorities must: be between `0.0` and `1.0` inclusive +* pname:queueCount must: be greater than `0` +* pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties +* pname:queueCount must: be less than or equal to the pname:queueCount member of the sname:VkQueueFamilyProperties structure, as returned by fname:vkGetPhysicalDeviceQueueFamilyProperties in the pname:pQueueFamilyProperties[pname:queueFamilyIndex] +* Each element of pname:pQueuePriorities must: be between `0.0` and `1.0` inclusive ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkDrawIndexedIndirectCommand.txt b/doc/specs/vulkan/validity/structs/VkDrawIndexedIndirectCommand.txt index 967a9ee4..b5cac0df 100644 --- a/doc/specs/vulkan/validity/structs/VkDrawIndexedIndirectCommand.txt +++ b/doc/specs/vulkan/validity/structs/VkDrawIndexedIndirectCommand.txt @@ -8,7 +8,7 @@ Valid Usage ----------- endif::doctype-manpage[] * For a given vertex buffer binding, any attribute data fetched must: be entirely contained within the corresponding vertex buffer binding, as described in <> -* The total value of (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer +* (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with pname:indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer * If the <> feature is not enabled, pname:firstInstance must: be code:0 ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkFramebufferCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkFramebufferCreateInfo.txt index 0a1ce09d..a71c28ea 100644 --- a/doc/specs/vulkan/validity/structs/VkFramebufferCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkFramebufferCreateInfo.txt @@ -13,7 +13,7 @@ endif::doctype-manpage[] * pname:renderPass must: be a valid sname:VkRenderPass handle * If pname:attachmentCount is not `0`, pname:pAttachments must: be a pointer to an array of pname:attachmentCount valid sname:VkImageView handles * Each of pname:renderPass and the elements of pname:pAttachments that are valid handles must: have been created, allocated or retrieved from the same sname:VkDevice -* The value of pname:attachmentCount must: be equal to the attachment count specified in pname:renderPass +* pname:attachmentCount must: be equal to the attachment count specified in pname:renderPass * 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 * Any given 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 * 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 @@ -21,10 +21,10 @@ endif::doctype-manpage[] * Any given 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 * Any given element of pname:pAttachments must: have dimensions at least as large as the corresponding framebuffer dimension * Any given element of pname:pAttachments must: only specify a single mip-level -* Any given element of pname:pAttachments must: have been created with identity swizzle -* The value of pname:width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth -* The value of pname:height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight -* The value of pname:layers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers +* Any given element of pname:pAttachments must: have been created with the identity swizzle +* pname:width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth +* pname:height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight +* pname:layers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt index 595953a7..a9bf8beb 100644 --- a/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt @@ -17,7 +17,7 @@ endif::doctype-manpage[] * If pname:pDynamicState is not `NULL`, pname:pDynamicState must: be a pointer to a valid sname:VkPipelineDynamicStateCreateInfo structure * pname:layout must: be a valid sname:VkPipelineLayout handle * pname:renderPass must: be a valid sname:VkRenderPass handle -* The value of pname:stageCount must: be greater than `0` +* pname:stageCount must: be greater than `0` * Each of pname:layout, pname:renderPass and pname:basePipelineHandle that are valid handles must: have been created, allocated or retrieved from the same sname:VkDevice * If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineIndex is not `-1`, pname:basePipelineHandle must: be sname:VK_NULL_HANDLE * If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineIndex is not `-1`, it must: be a valid index into the calling command's pname:pCreateInfos parameter @@ -41,9 +41,9 @@ endif::doctype-manpage[] * If pname:pStages includes a fragment shader stage, its shader code mustnot: read from any input attachment that is defined as ename:VK_ATTACHMENT_UNUSED in pname:subpass * The shader code for the entry points identified by pname:pStages, and the rest of the state identified by this structure must: adhere to the pipeline linking rules described in the <> chapter * If pname:subpass uses a depth/stencil attachment in pname:renderpass that has a layout of ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the sname:VkAttachmentReference defined by pname:subpass, and pname:pDepthStencilState is not `NULL`, the pname:depthWriteEnable member of pname:pDepthStencilState must: be ename:VK_FALSE -* If pname:subpass uses a depth/stencil attachment in pname:renderpass that has a layout of ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the sname:VkAttachmentReference defined by pname:subpass, and pname:pDepthStencilState is not `NULL`, the value of the pname:failOp, pname:passOp and pname:depthFailOp members of each of the pname:front and pname:back members of pname:pDepthStencilState must: be ename:VK_STENCIL_OP_KEEP -* If pname:pColorBlendState is not `NULL`, the value of the pname:blendEnable member of each element of the pname:pAttachment member of pname:pColorBlendState must: be ename:VK_FALSE if the pname:format of the attachment referred to in pname:subpass of pname:renderPass does not support color blend operations, as specified by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties -* If pname:pColorBlendState is not `NULL`, The pname:attachmentCount member of pname:pColorBlendState must: be equal to the value of pname:colorAttachmentCount used to create pname:subpass +* If pname:subpass uses a depth/stencil attachment in pname:renderpass that has a layout of ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the sname:VkAttachmentReference defined by pname:subpass, and pname:pDepthStencilState is not `NULL`, the pname:failOp, pname:passOp and pname:depthFailOp members of each of the pname:front and pname:back members of pname:pDepthStencilState must: be ename:VK_STENCIL_OP_KEEP +* If pname:pColorBlendState is not `NULL`, the pname:blendEnable member of each element of the pname:pAttachment member of pname:pColorBlendState must: be ename:VK_FALSE if the pname:format of the attachment referred to in pname:subpass of pname:renderPass does not support color blend operations, as specified by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* If pname:pColorBlendState is not `NULL`, The pname:attachmentCount member of pname:pColorBlendState must: be equal to the pname:colorAttachmentCount used to create pname:subpass * If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_VIEWPORT, the pname:pViewports member of pname:pViewportState must: be a pointer to an array of pname:pViewportState->viewportCount sname:VkViewport structures * If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_SCISSOR, the pname:pScissors member of pname:pViewportState must: be a pointer to an array of pname:pViewportState->scissorCount sname:VkRect2D structures * If the wide lines feature is not enabled, and no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_LINE_WIDTH, the pname:lineWidth member of pname:pRasterizationState must: be `1.0` @@ -52,7 +52,7 @@ endif::doctype-manpage[] * If the pname:rasterizerDiscardEnable member of pname:pRasterizationState is ename:VK_FALSE, and pname:subpass uses a depth/stencil attachment, pname:pDepthStencilState must: be a pointer to a valid sname:VkPipelineDepthStencilStateCreateInfo structure * If the pname:rasterizerDiscardEnable member of pname:pRasterizationState is ename:VK_FALSE, and pname:subpass uses color attachments, pname:pColorBlendState must: be a pointer to a valid sname:VkPipelineColorBlendStateCreateInfo structure * If the depth bias clamping feature is not enabled, no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and the pname:depthBiasEnable member of pname:pDepthStencil is ename:VK_TRUE, the pname:depthBiasClamp member of pname:pDepthStencil must: be `0.0` -* If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the pname:depthBoundsTestEnable member of pname:pDepthStencil is ename:VK_TRUE, the value of the pname:minDepthBounds and pname:maxDepthBounds members of pname:pDepthStencil must: be between `0.0` and `1.0`, inclusive +* If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the pname:depthBoundsTestEnable member of pname:pDepthStencil is ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds members of pname:pDepthStencil must: be between `0.0` and `1.0`, inclusive * pname:layout must: be <> with all shaders specified in pname:pStages * If pname:subpass uses color and/or depth/stencil attachments, then the pname:rasterizationSamples member of pname:pMultisampleState must: be the same as the sample count for those subpass attachments * If pname:subpass does not use any color and/or depth/stencil attachments, then the pname:rasterizationSamples member of pname:pMultisampleState must: follow the rules for a <> diff --git a/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt index c61ee3e6..41d00ded 100644 --- a/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt @@ -21,27 +21,27 @@ endif::doctype-manpage[] * If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:pQueueFamilyIndices must: be a pointer to an array of pname:queueFamilyIndexCount basetype:uint32_t values * If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:queueFamilyIndexCount must: be greater than `1` * pname:format mustnot: be ename:VK_FORMAT_UNDEFINED -* The values of the pname:width, pname:height and pname:depth members of pname:extent must: all be greater than `0` -* The value of pname:mipLevels must: be greater than `0` -* The value of pname:arrayLayers must: be greater than `0` -* If pname:imageType is ename:VK_IMAGE_TYPE_1D, the value of pname:extent.width must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension1D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher -* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags does not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension2D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher -* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimensionCube, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher -* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be equal -* If pname:imageType is ename:VK_IMAGE_TYPE_3D, the value of pname:extent.width, pname:extent.height and pname:extent.depth must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height/depth (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher -* The value of pname:mipLevels must: be less than or equal to or equal to the value of latexmath:[$\lfloor\log_2(\max(\mathit{extent.width}, \mathit{extent.height}, \mathit{extent.depth}))\rfloor + 1$] -* If the values of any of pname:extent.width, pname:extent.height or pname:extent.depth are greater than the values of the equivalently named members of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, pname:mipLevels must: be less than or equal to the value of sname:VkImageFormatProperties::pname:maxMipLevels (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) -* The value of pname:arrayLayers must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, or the value of sname:VkImageFormatProperties::pname:maxArrayLayers (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher -* The value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or the value of sname:VkImageFormatProperties::pname:maxExtent.sampleCounts returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure -* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, the value of pname:extent.width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth -* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, the value of pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight -* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferColorSamples -* If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a depth aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferDepthSamples -* If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a stencil aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferStencilSamples -* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a color aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageColorSamples -* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a depth aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageDepthSamples -* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format is an integer format, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageIntegerSamples -* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxStorageImageSamples +* The pname:width, pname:height, and pname:depth members of pname:extent must: all be greater than `0` +* pname:mipLevels must: be greater than `0` +* pname:arrayLayers must: be greater than `0` +* If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:extent.width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimension1D, or sname:VkImageFormatProperties::pname:maxExtent.width (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher +* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags does not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimension2D, or sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher +* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimensionCube, or sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher +* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and pname:extent.height must: be equal +* If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:extent.width, pname:extent.height and pname:extent.depth must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, or sname:VkImageFormatProperties::pname:maxExtent.width/height/depth (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher +* pname:mipLevels must: be less than or equal to latexmath:[$\lfloor\log_2(\max(\mathit{extent.width}, \mathit{extent.height}, \mathit{extent.depth}))\rfloor + 1$] +* If any of pname:extent.width, pname:extent.height or pname:extent.depth are greater than the equivalently named members of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, pname:mipLevels must: be less than or equal to sname:VkImageFormatProperties::pname:maxMipLevels (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) +* pname:arrayLayers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, or sname:VkImageFormatProperties::pname:maxArrayLayers (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher +* pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or sname:VkImageFormatProperties::pname:maxExtent.sampleCounts returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure +* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth +* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight +* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxFramebufferColorSamples +* If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a depth aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxFramebufferDepthSamples +* If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a stencil aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxFramebufferStencilSamples +* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a color aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxSampledImageColorSamples +* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a depth aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxSampledImageDepthSamples +* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format is an integer format, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxSampledImageIntegerSamples +* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxStorageImageSamples * If the <> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, ename:VK_FORMAT_EAC_R11_SNORM_BLOCK, ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, or ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK * If the <> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, or ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK * If the <> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK, ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK, ename:VK_FORMAT_BC2_UNORM_BLOCK, ename:VK_FORMAT_BC2_SRGB_BLOCK, ename:VK_FORMAT_BC3_UNORM_BLOCK, ename:VK_FORMAT_BC3_SRGB_BLOCK, ename:VK_FORMAT_BC4_UNORM_BLOCK, ename:VK_FORMAT_BC4_SNORM_BLOCK, ename:VK_FORMAT_BC5_UNORM_BLOCK, ename:VK_FORMAT_BC5_SNORM_BLOCK, ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, ename:VK_FORMAT_BC6H_SFLOAT_BLOCK, ename:VK_FORMAT_BC7_UNORM_BLOCK, or ename:VK_FORMAT_BC7_SRGB_BLOCK @@ -53,14 +53,14 @@ endif::doctype-manpage[] * If the <> feature is not enabled, pname:imageType is ename:VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_4_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT * If the <> feature is not enabled, pname:imageType is ename:VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_8_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT * If the <> feature is not enabled, pname:imageType is ename:VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_16_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT -* If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT +* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT * If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain at least one of ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkImageSubresourceRange.txt b/doc/specs/vulkan/validity/structs/VkImageSubresourceRange.txt index 3afb20ab..554c3a37 100644 --- a/doc/specs/vulkan/validity/structs/VkImageSubresourceRange.txt +++ b/doc/specs/vulkan/validity/structs/VkImageSubresourceRange.txt @@ -9,8 +9,8 @@ Valid Usage endif::doctype-manpage[] * pname:aspectMask must: be a valid combination of elink:VkImageAspectFlagBits values * pname:aspectMask mustnot: be `0` -* latexmath:[$(baseMipLevel + levelCount)$] must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when the image was created -* latexmath:[$(baseArrayLayer + layerCount)$] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when the image was created +* If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS, latexmath:[$(baseMipLevel + levelCount)$] must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when the image was created +* If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, latexmath:[$(baseArrayLayer + layerCount)$] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when the image was created ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkMemoryAllocateInfo.txt b/doc/specs/vulkan/validity/structs/VkMemoryAllocateInfo.txt index af66313b..865f77fc 100644 --- a/doc/specs/vulkan/validity/structs/VkMemoryAllocateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkMemoryAllocateInfo.txt @@ -9,8 +9,8 @@ Valid Usage endif::doctype-manpage[] * pname:sType must: be ename:VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO * pname:pNext must: be `NULL` -* The value of pname:allocationSize must: be less than or equal to the amount of memory available to the sname:VkMemoryHeap specified by pname:memoryTypeIndex and the calling command's sname:VkDevice -* The value of pname:allocationSize must: be greater than `0` +* pname:allocationSize must: be less than or equal to the amount of memory available to the sname:VkMemoryHeap specified by pname:memoryTypeIndex and the calling command's sname:VkDevice +* pname:allocationSize must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPhysicalDeviceFeatures.txt b/doc/specs/vulkan/validity/structs/VkPhysicalDeviceFeatures.txt index c818e7e8..15eeba4e 100644 --- a/doc/specs/vulkan/validity/structs/VkPhysicalDeviceFeatures.txt +++ b/doc/specs/vulkan/validity/structs/VkPhysicalDeviceFeatures.txt @@ -7,7 +7,7 @@ ifdef::doctype-manpage[] Valid Usage ----------- endif::doctype-manpage[] -* If the value of any member of this structure is ename:VK_FALSE, as returned by flink:vkGetPhysicalDeviceFeatures, then it must: be ename:VK_FALSE when passed as part of the sname:VkDeviceCreateInfo struct when creating a device +* If any member of this structure is ename:VK_FALSE, as returned by flink:vkGetPhysicalDeviceFeatures, then it must: be ename:VK_FALSE when passed as part of the sname:VkDeviceCreateInfo struct when creating a device ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineDepthStencilStateCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineDepthStencilStateCreateInfo.txt index 5eda96c5..71b9fdec 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineDepthStencilStateCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineDepthStencilStateCreateInfo.txt @@ -13,7 +13,7 @@ endif::doctype-manpage[] * pname:depthCompareOp must: be a valid elink:VkCompareOp value * pname:front must: be a valid sname:VkStencilOpState structure * pname:back must: be a valid sname:VkStencilOpState structure -* If the <> feature is not enabled, the value of pname:depthBoundsTestEnable must: be ename:VK_FALSE +* If the <> feature is not enabled, pname:depthBoundsTestEnable must: be ename:VK_FALSE ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineDynamicStateCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineDynamicStateCreateInfo.txt index e3660aef..0d65c32b 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineDynamicStateCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineDynamicStateCreateInfo.txt @@ -11,7 +11,7 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:flags must: be `0` * pname:pDynamicStates must: be a pointer to an array of pname:dynamicStateCount valid elink:VkDynamicState values -* The value of pname:dynamicStateCount must: be greater than `0` +* pname:dynamicStateCount must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineInputAssemblyStateCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineInputAssemblyStateCreateInfo.txt index 4ef47644..c14fcd6a 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineInputAssemblyStateCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineInputAssemblyStateCreateInfo.txt @@ -11,7 +11,7 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:flags must: be `0` * pname:topology must: be a valid elink:VkPrimitiveTopology value -* If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, the value of pname:primitiveRestartEnable must: be ename:VK_FALSE +* If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:primitiveRestartEnable must: be ename:VK_FALSE * If the <> feature is not enabled, pname:topology mustnot: be any of ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY * If the <> feature is not enabled, pname:topology mustnot: be ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST ifndef::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineLayoutCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineLayoutCreateInfo.txt index 75393ef7..d45862a6 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineLayoutCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineLayoutCreateInfo.txt @@ -13,11 +13,11 @@ endif::doctype-manpage[] * If pname:setLayoutCount is not `0`, pname:pSetLayouts must: be a pointer to an array of pname:setLayoutCount valid sname:VkDescriptorSetLayout handles * If pname:pushConstantRangeCount is not `0`, pname:pPushConstantRanges must: be a pointer to an array of pname:pushConstantRangeCount valid sname:VkPushConstantRange structures * pname:setLayoutCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets -* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_SAMPLER and ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers -* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers -* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers -* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages -* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages +* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_SAMPLER and ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers +* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers +* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers +* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages +* The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineRasterizationStateCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineRasterizationStateCreateInfo.txt index 8052e5b9..ae46cfdc 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineRasterizationStateCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineRasterizationStateCreateInfo.txt @@ -13,8 +13,8 @@ endif::doctype-manpage[] * pname:polygonMode must: be a valid elink:VkPolygonMode value * pname:cullMode must: be a valid combination of elink:VkCullModeFlagBits values * pname:frontFace must: be a valid elink:VkFrontFace value -* If the <> feature is not enabled, the value of pname:depthClampEnable must: be ename:VK_FALSE -* If the <> feature is not enabled, the value of pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL +* If the <> feature is not enabled, pname:depthClampEnable must: be ename:VK_FALSE +* If the <> feature is not enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineVertexInputStateCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineVertexInputStateCreateInfo.txt index 25f034f4..05c4058f 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineVertexInputStateCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineVertexInputStateCreateInfo.txt @@ -14,7 +14,7 @@ endif::doctype-manpage[] * If pname:vertexAttributeDescriptionCount is not `0`, pname:pVertexAttributeDescriptions must: be a pointer to an array of pname:vertexAttributeDescriptionCount valid sname:VkVertexInputAttributeDescription structures * pname:vertexBindingDescriptionCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings * pname:vertexAttributeDescriptionCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes -* For every value of pname:binding specified by any given element of pname:pVertexAttributeDescriptions, a sname:VkVertexInputBindingDescription must: exist in pname:pVertexBindingDescriptions with the same value of pname:binding +* For every pname:binding specified by any given element of pname:pVertexAttributeDescriptions, a sname:VkVertexInputBindingDescription must: exist in pname:pVertexBindingDescriptions with the same value of pname:binding * All elements of pname:pVertexBindingDescriptions must: describe distinct binding numbers * All elements of pname:pVertexAttributeDescriptions must: describe distinct attribute locations ifndef::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPipelineViewportStateCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkPipelineViewportStateCreateInfo.txt index 445cc2aa..11e0c776 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineViewportStateCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineViewportStateCreateInfo.txt @@ -10,13 +10,13 @@ endif::doctype-manpage[] * pname:sType must: be ename:VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO * pname:pNext must: be `NULL` * pname:flags must: be `0` -* The value of pname:viewportCount must: be greater than `0` -* The value of pname:scissorCount must: be greater than `0` +* pname:viewportCount must: be greater than `0` +* pname:scissorCount must: be greater than `0` * If the <> feature is not enabled, pname:viewportCount must: be `1` * If the <> feature is not enabled, pname:scissorCount must: be `1` * pname:viewportCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive * pname:scissorCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive -* The values of pname:scissorCount and pname:viewportCount must: be identical +* pname:scissorCount and pname:viewportCount must: be identical ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt b/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt index a39f72fa..3fe1bd1c 100644 --- a/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt +++ b/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt @@ -9,10 +9,10 @@ Valid Usage endif::doctype-manpage[] * pname:stageFlags must: be a valid combination of elink:VkShaderStageFlagBits values * pname:stageFlags mustnot: be `0` -* The value of pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize -* The value of pname:size must: be greater than `0` -* The value of pname:size must: be a multiple of `4` -* The value of pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset +* pname:offset must: be less than sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize +* pname:size must: be greater than `0` +* pname:size must: be a multiple of `4` +* pname:size must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkRenderPassBeginInfo.txt b/doc/specs/vulkan/validity/structs/VkRenderPassBeginInfo.txt index cb120fa2..c23f0763 100644 --- a/doc/specs/vulkan/validity/structs/VkRenderPassBeginInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkRenderPassBeginInfo.txt @@ -13,7 +13,7 @@ endif::doctype-manpage[] * pname:framebuffer must: be a valid sname:VkFramebuffer handle * If pname:clearValueCount is not `0`, pname:pClearValues must: be a pointer to an array of pname:clearValueCount sname:VkClearValue unions * Each of pname:renderPass and pname:framebuffer must: have been created, allocated or retrieved from the same sname:VkDevice -* The value of pname:clearValueCount must: be greater than or equal to the number of attachments in pname:renderPass that specify a pname:loadOp of ename:VK_ATTACHMENT_LOAD_OP_CLEAR +* pname:clearValueCount must: be greater than or equal to the number of attachments in pname:renderPass that specify a pname:loadOp of ename:VK_ATTACHMENT_LOAD_OP_CLEAR ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkRenderPassCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkRenderPassCreateInfo.txt index 28498ebd..ac7cf156 100644 --- a/doc/specs/vulkan/validity/structs/VkRenderPassCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkRenderPassCreateInfo.txt @@ -13,10 +13,10 @@ endif::doctype-manpage[] * If pname:attachmentCount is not `0`, pname:pAttachments must: be a pointer to an array of pname:attachmentCount valid sname:VkAttachmentDescription structures * pname:pSubpasses must: be a pointer to an array of pname:subpassCount valid sname:VkSubpassDescription structures * If pname:dependencyCount is not `0`, pname:pDependencies must: be a pointer to an array of pname:dependencyCount valid sname:VkSubpassDependency structures -* The value of pname:subpassCount must: be greater than `0` +* pname:subpassCount must: be greater than `0` * If any two subpasses operate on attachments with overlapping ranges of the same sname:VkDeviceMemory object, and at least one subpass writes to that area of sname:VkDeviceMemory, a subpass dependency must: be included (either directly or via some intermediate subpasses) between them * If the pname:attachment member of any element of 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 sname:VkDeviceMemory object that overlaps with any other attachment in any subpass (including the same subpass), the sname:VkAttachmentDescription structures describing them must: include ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT in pname:flags -* If the pname:attachment member of any element of pname:pInputAttachments, pname:pColorAttachments, pname:pResolveAttachments or pname:pDepthStencilAttachment, or the value of any element of pname:pPreserveAttachments in any given element of pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less than the value of pname:attachmentCount +* 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 * The value of any element of the pname:pPreserveAttachments member in any given element of pname:pSubpasses mustnot: be ename:VK_ATTACHMENT_UNUSED ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkSamplerCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkSamplerCreateInfo.txt index 6c18d96f..be98eb85 100644 --- a/doc/specs/vulkan/validity/structs/VkSamplerCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkSamplerCreateInfo.txt @@ -18,7 +18,7 @@ endif::doctype-manpage[] * pname:addressModeW must: be a valid elink:VkSamplerAddressMode value * The absolute value of pname:mipLodBias must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias * If the <> feature is not enabled, pname:anisotropyEnable must: be ename:VK_FALSE -* If pname:anisotropyEnable is ename:VK_TRUE, the value of pname:maxAnisotropy must: be between `1.0` and sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive +* If pname:anisotropyEnable is ename:VK_TRUE, pname:maxAnisotropy must: be between `1.0` and sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive * If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and pname:magFilter must: be equal * If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:mipmapMode must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST * If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minLod and pname:maxLod must: be zero diff --git a/doc/specs/vulkan/validity/structs/VkSparseBufferMemoryBindInfo.txt b/doc/specs/vulkan/validity/structs/VkSparseBufferMemoryBindInfo.txt index e211ea04..777ada47 100644 --- a/doc/specs/vulkan/validity/structs/VkSparseBufferMemoryBindInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkSparseBufferMemoryBindInfo.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:buffer must: be a valid sname:VkBuffer handle * pname:pBinds must: be a pointer to an array of pname:bindCount valid sname:VkSparseMemoryBind structures -* The value of pname:bindCount must: be greater than `0` +* pname:bindCount must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkSparseImageMemoryBindInfo.txt b/doc/specs/vulkan/validity/structs/VkSparseImageMemoryBindInfo.txt index 6a9d2a8b..b47f97ba 100644 --- a/doc/specs/vulkan/validity/structs/VkSparseImageMemoryBindInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkSparseImageMemoryBindInfo.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:image must: be a valid sname:VkImage handle * pname:pBinds must: be a pointer to an array of pname:bindCount valid sname:VkSparseImageMemoryBind structures -* The value of pname:bindCount must: be greater than `0` +* pname:bindCount must: be greater than `0` ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt b/doc/specs/vulkan/validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt index febd57c6..bee6f5b4 100644 --- a/doc/specs/vulkan/validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkSparseImageOpaqueMemoryBindInfo.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:image must: be a valid sname:VkImage handle * pname:pBinds must: be a pointer to an array of pname:bindCount valid sname:VkSparseMemoryBind structures -* The value of pname:bindCount must: be greater than `0` +* pname:bindCount must: be greater than `0` * 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 ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt b/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt index 14d03504..4a644444 100644 --- a/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt @@ -20,6 +20,7 @@ endif::doctype-manpage[] * Any given element of pname:pCommandBuffers must: be in the executable state * If any given element of pname:pCommandBuffers contains commands that execute secondary command buffers, those secondary command buffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, or not currently be executing on the device * If any given element of pname:pCommandBuffers was created with ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, it mustnot: have been previously submitted without re-recording that command buffer +* If any given element of pname:pCommandBuffers contains commands that execute secondary command buffers created with ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, each such secondary command buffer mustnot: have been previously submitted without re-recording that command buffer * Any given element of pname:pCommandBuffers mustnot: contain commands that execute a secondary command buffer, if that secondary command buffer has been recorded in another primary command buffer after it was recorded into this sname:VkCommandBuffer * Any given element of pname:pCommandBuffers must: have been created on a sname:VkCommandPool that was created for the same queue family that the calling command's pname:queue belongs to * Any given element of pname:pCommandBuffers mustnot: have been created with ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY diff --git a/doc/specs/vulkan/validity/structs/VkSubpassDependency.txt b/doc/specs/vulkan/validity/structs/VkSubpassDependency.txt index 04c8588b..0abfe36b 100644 --- a/doc/specs/vulkan/validity/structs/VkSubpassDependency.txt +++ b/doc/specs/vulkan/validity/structs/VkSubpassDependency.txt @@ -18,8 +18,8 @@ endif::doctype-manpage[] * If the <> feature is not enabled, pname:dstStageMask mustnot: contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT * If the <> feature is not enabled, pname:srcStageMask mustnot: contain ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT * If the <> feature is not enabled, pname:dstStageMask mustnot: contain ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT -* The value of pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies and ensure a valid execution order -* The values of pname:srcSubpass and pname:dstSubpass mustnot: both be equal to ename:VK_SUBPASS_EXTERNAL +* pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies and ensure a valid execution order +* pname:srcSubpass and pname:dstSubpass mustnot: both be equal to ename:VK_SUBPASS_EXTERNAL ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkSubpassDescription.txt b/doc/specs/vulkan/validity/structs/VkSubpassDescription.txt index 88b047b6..a2f507e2 100644 --- a/doc/specs/vulkan/validity/structs/VkSubpassDescription.txt +++ b/doc/specs/vulkan/validity/structs/VkSubpassDescription.txt @@ -15,7 +15,7 @@ endif::doctype-manpage[] * If pname:pDepthStencilAttachment is not `NULL`, pname:pDepthStencilAttachment must: be a pointer to a valid sname:VkAttachmentReference structure * If pname:preserveAttachmentCount is not `0`, pname:pPreserveAttachments must: be a pointer to an array of pname:preserveAttachmentCount basetype:uint32_t values * pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS -* The value of pname:colorCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxColorAttachments +* pname:colorCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxColorAttachments * If the first use of an attachment in this render pass is as an input attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then pname:loadOp mustnot: be ename:VK_ATTACHMENT_LOAD_OP_CLEAR * If pname:pResolveAttachments is not `NULL`, for each resolve attachment that does not have the value ename:VK_ATTACHMENT_UNUSED, the corresponding color attachment mustnot: have the value ename:VK_ATTACHMENT_UNUSED * If pname:pResolveAttachments is not `NULL`, the sample count of each element of pname:pColorAttachments must: be anything other than ename:VK_SAMPLE_COUNT_1_BIT diff --git a/doc/specs/vulkan/validity/structs/VkWriteDescriptorSet.txt b/doc/specs/vulkan/validity/structs/VkWriteDescriptorSet.txt index 585438b5..2114ead5 100644 --- a/doc/specs/vulkan/validity/structs/VkWriteDescriptorSet.txt +++ b/doc/specs/vulkan/validity/structs/VkWriteDescriptorSet.txt @@ -11,7 +11,7 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:dstSet must: be a valid sname:VkDescriptorSet handle * pname:descriptorType must: be a valid elink:VkDescriptorType value -* The value of pname:descriptorCount must: be greater than `0` +* pname:descriptorCount must: be greater than `0` * Each of pname:dstSet and the elements of pname:pTexelBufferView that are valid handles must: have been created, allocated or retrieved from the same sname:VkDevice * pname:dstBinding must: be a valid binding point within pname:dstSet * pname:descriptorType must: match the type of pname:dstBinding within pname:dstSet @@ -21,15 +21,15 @@ endif::doctype-manpage[] * If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must: be a pointer to an array of pname:descriptorCount valid sname:VkDescriptorBufferInfo structures * If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was not created 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 * 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 -* 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 the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment -* 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 the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment +* 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 sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment +* 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 sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment * 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 ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set * 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 ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set -* 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 must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange -* 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 must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange -* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that pname:pTexelBufferView was created from must: have been created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set -* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that pname:pTexelBufferView was created from must: have been created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set -* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView must: have been created with identity swizzle +* 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 must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange +* 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 must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange +* 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 +* 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 +* 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 identity swizzle ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/vkapi.py b/doc/specs/vulkan/vkapi.py index 425fdfc2..6c0a5335 100644 --- a/doc/specs/vulkan/vkapi.py +++ b/doc/specs/vulkan/vkapi.py @@ -9,9 +9,11 @@ funcpointers = {} # Unprocessed type: vk_platform category: include structs['VK_MAKE_VERSION'] = None structs['VK_API_VERSION'] = None +structs['VK_API_VERSION_1_0'] = None structs['VK_VERSION_MAJOR'] = None structs['VK_VERSION_MINOR'] = None structs['VK_VERSION_PATCH'] = None +structs['VK_HEADER_VERSION'] = None structs['VK_NULL_HANDLE'] = None consts['VK_PIPELINE_CACHE_HEADER_VERSION_ONE'] = 'VkPipelineCacheHeaderVersion' enums['VkPipelineCacheHeaderVersion'] = ['VK_PIPELINE_CACHE_HEADER_VERSION_ONE'] @@ -342,7 +344,8 @@ consts['VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'] = 'VkFormatFeatureFlag consts['VK_FORMAT_FEATURE_BLIT_SRC_BIT'] = 'VkFormatFeatureFlagBits' consts['VK_FORMAT_FEATURE_BLIT_DST_BIT'] = 'VkFormatFeatureFlagBits' consts['VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'] = 'VkFormatFeatureFlagBits' -enums['VkFormatFeatureFlagBits'] = ['VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT', 'VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT', 'VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT', 'VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT', 'VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT', 'VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT', 'VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT', 'VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT', 'VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT', 'VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT', 'VK_FORMAT_FEATURE_BLIT_SRC_BIT', 'VK_FORMAT_FEATURE_BLIT_DST_BIT', 'VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'] +consts['VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG'] = 'VkFormatFeatureFlagBits' +enums['VkFormatFeatureFlagBits'] = ['VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT', 'VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT', 'VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT', 'VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT', 'VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT', 'VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT', 'VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT', 'VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT', 'VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT', 'VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT', 'VK_FORMAT_FEATURE_BLIT_SRC_BIT', 'VK_FORMAT_FEATURE_BLIT_DST_BIT', 'VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT', 'VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG'] flags['VkFormatFeatureFlags'] = 'VkFormatFeatureFlagBits' structs['VkFormatProperties'] = ['linearTilingFeatures', 'optimalTilingFeatures', 'bufferFeatures'] protos['vkGetPhysicalDeviceFormatProperties'] = ['physicalDevice', 'format', 'pFormatProperties'] @@ -811,7 +814,8 @@ protos['vkDestroyPipelineLayout'] = ['device', 'pipelineLayout', 'pAllocator'] flags['VkSamplerCreateFlags'] = None consts['VK_FILTER_NEAREST'] = 'VkFilter' consts['VK_FILTER_LINEAR'] = 'VkFilter' -enums['VkFilter'] = ['VK_FILTER_NEAREST', 'VK_FILTER_LINEAR'] +consts['VK_FILTER_CUBIC_IMG'] = 'VkFilter' +enums['VkFilter'] = ['VK_FILTER_NEAREST', 'VK_FILTER_LINEAR', 'VK_FILTER_CUBIC_IMG'] consts['VK_SAMPLER_MIPMAP_MODE_NEAREST'] = 'VkSamplerMipmapMode' consts['VK_SAMPLER_MIPMAP_MODE_LINEAR'] = 'VkSamplerMipmapMode' enums['VkSamplerMipmapMode'] = ['VK_SAMPLER_MIPMAP_MODE_NEAREST', 'VK_SAMPLER_MIPMAP_MODE_LINEAR'] diff --git a/doc/specs/vulkan/vkspec.txt b/doc/specs/vulkan/vkspec.txt index b0723a9e..70d7dbc8 100644 --- a/doc/specs/vulkan/vkspec.txt +++ b/doc/specs/vulkan/vkspec.txt @@ -1,9 +1,10 @@ // Copyright (c) 2014-2016 The Khronos Group Inc. // Copyright notice at https://www.khronos.org/registry/speccopyright.html -= {apiname} 1.0 - A Specification -The Khronos Vulkan Working Group include::specversion.txt[] + += {apiname} {apirevision} - A Specification +The Khronos Vulkan Working Group :icons: :toc2: :toc-placement: manual @@ -12,6 +13,8 @@ include::specversion.txt[] :doctype: book :imagewidth: 800 :fullimagewidth: {svgpdf@pdf:scaledwidth="75%":width="800"} +:sym1: ✓ +:sym2: † :vkkeyword: diff --git a/src/spec/generator.py b/src/spec/generator.py index e1ff704a..07a2761f 100644 --- a/src/spec/generator.py +++ b/src/spec/generator.py @@ -1891,13 +1891,9 @@ class ValidityOutputGenerator(OutputGenerator): if self.paramIsPointer(param): asciidoc += 'the value referenced by ' - else: - asciidoc += 'the value of ' elif self.paramIsPointer(param): asciidoc += 'The value referenced by ' - else: - asciidoc += 'The value of ' asciidoc += self.makeParameterName(arraylength) asciidoc += ' must: be greater than `0`' @@ -1942,10 +1938,10 @@ class ValidityOutputGenerator(OutputGenerator): # Capitalize and add to the main language asciidoc += parentlanguage - # Add in any plain-text validation language that's in the xml + # Add in any plain-text validation language that should be added for usage in usages: asciidoc += '* ' - asciidoc += usage.text + asciidoc += usage asciidoc += '\n' # In case there's nothing to report, return None @@ -2053,10 +2049,18 @@ class ValidityOutputGenerator(OutputGenerator): def genCmd(self, cmdinfo, name): OutputGenerator.genCmd(self, cmdinfo, name) # - # Get all thh parameters + # Get all the parameters params = cmdinfo.elem.findall('param') - usages = cmdinfo.elem.findall('validity/usage') + usageelements = cmdinfo.elem.findall('validity/usage') + usages = [] + for usage in usageelements: + usages.append(usage.text) + for usage in cmdinfo.additionalValidity: + usages.append(usage.text) + for usage in cmdinfo.removedValidity: + usages.remove(usage.text) + validity = self.makeValidUsageStatements(cmdinfo.elem, name, params, usages) threadsafety = self.makeThreadSafetyBlock(cmdinfo.elem, 'param') commandpropertiesentry = self.makeCommandPropertiesTableEntry(cmdinfo.elem, name) @@ -2073,8 +2077,17 @@ class ValidityOutputGenerator(OutputGenerator): # Anything that's only ever returned can't be set by the user, so shouldn't have any validity information. if typeinfo.elem.attrib.get('returnedonly') is None: params = typeinfo.elem.findall('member') - usages = typeinfo.elem.findall('validity/usage') + usageelements = typeinfo.elem.findall('validity/usage') + usages = [] + + for usage in usageelements: + usages.append(usage.text) + for usage in typeinfo.additionalValidity: + usages.append(usage.text) + for usage in typeinfo.removedValidity: + usages.remove(usage.text) + validity = self.makeValidUsageStatements(typeinfo.elem, typename, params, usages) threadsafety = self.makeThreadSafetyBlock(typeinfo.elem, 'member') diff --git a/src/spec/readme.tex b/src/spec/readme.tex index 45140590..af0435a4 100644 --- a/src/spec/readme.tex +++ b/src/spec/readme.tex @@ -1055,13 +1055,14 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( \label{tag:required} A \tag{require} block defines a set of interfaces (types, enumerants and -commands) {\em required} by a \tag{feature} or \tag{extension}. A -\tag{remove} block defines a set of interfaces {\em removed} by a -\tag{feature} (this is primarily useful for future profiles of an API which -may choose to deprecated and/or remove some interfaces - extensions should -never remove interfaces, although this usage is allowed by the schema). -Except for the tag name and behavior, the contents of \tag{require} and -\tag{remove} tags are identical. +commands) and additional validity statements {\em required} by a \tag{feature} +or \tag{extension}. A \tag{remove} block defines a set of interfaces or validity +statements {\em removed} by a \tag{feature} This is primarily for future +profiles of an API which may choose to deprecate and/or remove some interfaces +- or for profiles or extensions to remove validity statements. Extensions should +never remove interfaces, although this usage is allowed by the schema). Except +for the tag name and behavior, the contents of \tag{require} and \tag{remove} +tags are identical. \subsection{Attributes of \tag{require} and \tag{remove} tags} @@ -1160,6 +1161,17 @@ Zero or more of the following tags, in any order: \item \attr{name} - required. Name of the type. \item \attr{comment} - optional. Arbitrary string (unused). \end{itemize} +\item \tag{usage} specifies a required (or removed) validity statement for a + \tag{validity} block belonging to a \tag{proto} or \tag{type} block. + Validity is more likely to be removed by extensions than other items. + One of struct or command must be present. + + \begin{itemize} + \item \attr{struct} - optional. Name of the structure this validity is + added to (or removed from). + \item \attr{comment} - optional. Name of the command this validity is + added to (or removed from). + \end{itemize} \end{itemize} diff --git a/src/spec/reg.py b/src/spec/reg.py index adf6f82e..155df78e 100755 --- a/src/spec/reg.py +++ b/src/spec/reg.py @@ -21,7 +21,7 @@ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -import io,os,re,string,sys +import io,os,re,string,sys,copy from lxml import etree # matchAPIProfile - returns whether an API and profile @@ -96,7 +96,13 @@ class TypeInfo(BaseInfo): """Represents the state of a registry type""" def __init__(self, elem): BaseInfo.__init__(self, elem) - + self.additionalValidity = [] + self.removedValidity = [] + def resetState(self): + BaseInfo.resetState(self) + self.additionalValidity = [] + self.removedValidity = [] + # GroupInfo - registry information about a group of related enums # in an block, generally corresponding to a C "enum" type. class GroupInfo(BaseInfo): @@ -120,6 +126,12 @@ class CmdInfo(BaseInfo): """Represents the state of a registry command""" def __init__(self, elem): BaseInfo.__init__(self, elem) + self.additionalValidity = [] + self.removedValidity = [] + def resetState(self): + BaseInfo.resetState(self) + self.additionalValidity = [] + self.removedValidity = [] # FeatureInfo - registry information about an API # or @@ -487,6 +499,28 @@ class Registry: for feature in interface.findall('remove'): if (matchAPIProfile(api, profile, feature)): self.markRequired(feature,False) + + def assignAdditionalValidity(self, interface, api, profile): + # + # Loop over all usage inside all tags. + for feature in interface.findall('require'): + if (matchAPIProfile(api, profile, feature)): + for v in feature.findall('usage'): + if v.get('command'): + self.cmddict[v.get('command')].additionalValidity.append(copy.deepcopy(v)) + if v.get('struct'): + self.typedict[v.get('struct')].additionalValidity.append(copy.deepcopy(v)) + + # + # Loop over all usage inside all tags. + for feature in interface.findall('remove'): + if (matchAPIProfile(api, profile, feature)): + for v in feature.findall('usage'): + if v.get('command'): + self.cmddict[v.get('command')].removedValidity.append(copy.deepcopy(v)) + if v.get('struct'): + self.typedict[v.get('struct')].removedValidity.append(copy.deepcopy(v)) + # # generateFeature - generate a single type / enum group / enum / command, # and all its dependencies as needed. @@ -568,16 +602,17 @@ class Registry: # interface - Element for or def generateRequiredInterface(self, interface): """Generate required C interface for specified API version/extension""" + # # Loop over all features inside all tags. - # tags are ignored (handled in pass 1). - for features in interface.findall('require'): + for features in interface.findall('require'): for t in features.findall('type'): self.generateFeature(t.get('name'), 'type', self.typedict) for e in features.findall('enum'): self.generateFeature(e.get('name'), 'enum', self.enumdict) for c in features.findall('command'): self.generateFeature(c.get('name'), 'command', self.cmddict) + # # apiGen(genOpts) - generate interface for specified versions # genOpts - GeneratorOptions object with parameters used @@ -694,6 +729,7 @@ class Registry: self.gen.logMsg('diag', '*** PASS 1: Tagging required and removed features for', f.name) self.requireAndRemoveFeatures(f.elem, self.genOpts.apiname, self.genOpts.profile) + self.assignAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile) # # Pass 2: loop over specified API versions and extensions printing # declarations for required things which haven't already been diff --git a/src/spec/registry.rnc b/src/spec/registry.rnc index 455cdcc4..21feb366 100644 --- a/src/spec/registry.rnc +++ b/src/spec/registry.rnc @@ -327,12 +327,20 @@ Feature = element feature { element require { ProfileName ? , Comment ? , - InterfaceElement * + InterfaceElement *, + element usage { + attribute struct { text } *, + attribute command { text } *, + text } * } | element remove { ProfileName ? , Comment ? , - InterfaceElement * + InterfaceElement *, + element usage { + attribute struct { text } *, + attribute command { text } *, + text } * } ) * } @@ -369,13 +377,21 @@ Extension = element extension { attribute api { text } ? , ProfileName ? , Comment ? , - InterfaceElement * + InterfaceElement *, + element usage { + attribute struct { text } *, + attribute command { text } *, + text } * } | element remove { attribute api { text } ? , ProfileName ? , Comment ? , - InterfaceElement * + InterfaceElement *, + element usage { + attribute struct { text } *, + attribute command { text } *, + text } * } ) * } diff --git a/src/spec/vk.xml b/src/spec/vk.xml index 9c4d9a53..5ce9b32d 100644 --- a/src/spec/vk.xml +++ b/src/spec/vk.xml @@ -96,9 +96,12 @@ maintained in the master branch of the Khronos Vulkan Github project. #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) - // Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 5) - + // DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead. +//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) + // Vulkan 1.0 version number +#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0) + // Version of this file +#define VK_HEADER_VERSION 6 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -484,9 +487,9 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t queueCount const float* pQueuePriorities - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties - pname:queueCount must: be less than or equal to the value of the pname:queueCount member of the sname:VkQueueFamilyProperties structure, as returned by fname:vkGetPhysicalDeviceQueueFamilyProperties in the pname:pQueueFamilyProperties[pname:queueFamilyIndex] - The value of any given element of pname:pQueuePriorities must: be between `0.0` and `1.0` inclusive + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties + pname:queueCount must: be less than or equal to the pname:queueCount member of the sname:VkQueueFamilyProperties structure, as returned by fname:vkGetPhysicalDeviceQueueFamilyProperties in the pname:pQueueFamilyProperties[pname:queueFamilyIndex] + Each element of pname:pQueuePriorities must: be between `0.0` and `1.0` inclusive @@ -499,7 +502,7 @@ maintained in the master branch of the Khronos Vulkan Github project. const char* const* ppEnabledLayerNames uint32_t enabledExtensionCount const char* const* ppEnabledExtensionNames - const VkPhysicalDeviceFeatures* pEnabledFeatures + const VkPhysicalDeviceFeatures* pEnabledFeatures Any given element of pname:ppEnabledLayerNames must: be the name of a layer present on the system, exactly matching a string returned in the sname:VkLayerProperties structure by fname:vkEnumerateDeviceLayerProperties Any given element of pname:ppEnabledExtensionNames must: be the name of an extension present on the system, exactly matching a string returned in the sname:VkExtensionProperties structure by fname:vkEnumerateDeviceExtensionProperties @@ -540,8 +543,8 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize allocationSize uint32_t memoryTypeIndex - The value of pname:allocationSize must: be less than or equal to the amount of memory available to the sname:VkMemoryHeap specified by pname:memoryTypeIndex and the calling command's sname:VkDevice - The value of pname:allocationSize must: be greater than `0` + pname:allocationSize must: be less than or equal to the amount of memory available to the sname:VkMemoryHeap specified by pname:memoryTypeIndex and the calling command's sname:VkDevice + pname:allocationSize must: be greater than `0` @@ -601,7 +604,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize range pname:offset must: be less than the size of pname:buffer - The value of pname:range must: be greater than `0` + If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be greater than `0` If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset @@ -630,15 +633,15 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must: be a pointer to an array of pname:descriptorCount valid sname:VkDescriptorBufferInfo structures If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was not created 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 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 - 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 the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment - 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 the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment + 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 sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment + 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 sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment 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 ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set 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 ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set - 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 must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange - 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 must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange - If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that pname:pTexelBufferView was created from must: have been created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set - If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that pname:pTexelBufferView was created from must: have been created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set - If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView must: have been created with identity swizzle + 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 must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange + 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 must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange + 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 + 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 + 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 identity swizzle @@ -669,7 +672,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t queueFamilyIndexCount const uint32_t* pQueueFamilyIndices - The value of pname:size must: be greater than `0` + pname:size must: be greater than `0` If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:pQueueFamilyIndices must: be a pointer to an array of pname:queueFamilyIndexCount basetype:uint32_t values If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:queueFamilyIndexCount must: be greater than `1` If the <<features-features-sparseBinding,sparse bindings>> feature is not enabled, pname:flags mustnot: contain ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT @@ -687,12 +690,13 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize offset VkDeviceSize range - The value of pname:offset must: be less than the size of pname:buffer - The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment - The value of pname:range must: be greater than `0` - If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset - If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format - The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements + pname:offset must: be less than the size of pname:buffer + pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment + If pname:range is not equal to ename:VK_WHOLE_SIZE: + pname:range must: be greater than `0` + pname:range must: be a multiple of the element size of pname:format + pname:range divided by the size of an element of pname:format, must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements + the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer pname:buffer must: have been created with a pname:usage value containing at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT If pname:buffer was created with pname:usage containing ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:format must: be supported for uniform texel buffers, as specified by the ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties If pname:buffer was created with pname:usage containing ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:format must: be supported for storage texel buffers, as specified by the ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -726,8 +730,8 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t baseArrayLayer uint32_t layerCount - latexmath:[$(baseMipLevel + levelCount)$] must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when the image was created - latexmath:[$(baseArrayLayer + layerCount)$] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when the image was created + If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS, latexmath:[$(baseMipLevel + levelCount)$] must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when the image was created + If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, latexmath:[$(baseArrayLayer + layerCount)$] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when the image was created @@ -747,8 +751,8 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize offset VkDeviceSize size - The value of pname:offset must: be less than the size of pname:buffer - The value of pname:size must: be greater than `0` + pname:offset must: be less than the size of pname:buffer + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be greater than `0` If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to than the size of pname:buffer minus pname:offset If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <<devsandqueues-queueprops>>) @@ -802,27 +806,27 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:pQueueFamilyIndices must: be a pointer to an array of pname:queueFamilyIndexCount basetype:uint32_t values If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, pname:queueFamilyIndexCount must: be greater than `1` pname:format mustnot: be ename:VK_FORMAT_UNDEFINED - The values of the pname:width, pname:height and pname:depth members of pname:extent must: all be greater than `0` - The value of pname:mipLevels must: be greater than `0` - The value of pname:arrayLayers must: be greater than `0` - If pname:imageType is ename:VK_IMAGE_TYPE_1D, the value of pname:extent.width must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension1D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher - If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags does not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension2D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher - If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimensionCube, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher - If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be equal - If pname:imageType is ename:VK_IMAGE_TYPE_3D, the value of pname:extent.width, pname:extent.height and pname:extent.depth must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height/depth (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher - The value of pname:mipLevels must: be less than or equal to or equal to the value of latexmath:[$\lfloor\log_2(\max(\mathit{extent.width}, \mathit{extent.height}, \mathit{extent.depth}))\rfloor + 1$] - If the values of any of pname:extent.width, pname:extent.height or pname:extent.depth are greater than the values of the equivalently named members of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, pname:mipLevels must: be less than or equal to the value of sname:VkImageFormatProperties::pname:maxMipLevels (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - The value of pname:arrayLayers must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, or the value of sname:VkImageFormatProperties::pname:maxArrayLayers (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher - The value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or the value of sname:VkImageFormatProperties::pname:maxExtent.sampleCounts returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure - If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, the value of pname:extent.width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth - If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, the value of pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight - If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferColorSamples - If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a depth aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferDepthSamples - If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a stencil aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferStencilSamples - If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a color aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageColorSamples - If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a depth aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageDepthSamples - If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format is an integer format, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageIntegerSamples - If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxStorageImageSamples + The pname:width, pname:height, and pname:depth members of pname:extent must: all be greater than `0` + pname:mipLevels must: be greater than `0` + pname:arrayLayers must: be greater than `0` + If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:extent.width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimension1D, or sname:VkImageFormatProperties::pname:maxExtent.width (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher + If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags does not contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimension2D, or sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher + If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimensionCube, or sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher + If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and pname:extent.height must: be equal + If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:extent.width, pname:extent.height and pname:extent.depth must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, or sname:VkImageFormatProperties::pname:maxExtent.width/height/depth (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher + pname:mipLevels must: be less than or equal to latexmath:[$\lfloor\log_2(\max(\mathit{extent.width}, \mathit{extent.height}, \mathit{extent.depth}))\rfloor + 1$] + If any of pname:extent.width, pname:extent.height or pname:extent.depth are greater than the equivalently named members of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, pname:mipLevels must: be less than or equal to sname:VkImageFormatProperties::pname:maxMipLevels (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) + pname:arrayLayers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, or sname:VkImageFormatProperties::pname:maxArrayLayers (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher + pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or sname:VkImageFormatProperties::pname:maxExtent.sampleCounts returned by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure + If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth + If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight + If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxFramebufferColorSamples + If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a depth aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxFramebufferDepthSamples + If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a stencil aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxFramebufferStencilSamples + If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a color aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxSampledImageColorSamples + If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a depth aspect, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxSampledImageDepthSamples + If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format is an integer format, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxSampledImageIntegerSamples + If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:maxStorageImageSamples If the <<features-features-textureCompressionETC2,ETC2 texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, ename:VK_FORMAT_EAC_R11_SNORM_BLOCK, ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, or ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK If the <<features-features-textureCompressionASTC_LDR,ASTC LDR texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, or ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK If the <<features-features-textureCompressionBC,BC texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK, ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK, ename:VK_FORMAT_BC2_UNORM_BLOCK, ename:VK_FORMAT_BC2_SRGB_BLOCK, ename:VK_FORMAT_BC3_UNORM_BLOCK, ename:VK_FORMAT_BC3_SRGB_BLOCK, ename:VK_FORMAT_BC4_UNORM_BLOCK, ename:VK_FORMAT_BC4_SNORM_BLOCK, ename:VK_FORMAT_BC5_UNORM_BLOCK, ename:VK_FORMAT_BC5_SNORM_BLOCK, ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, ename:VK_FORMAT_BC6H_SFLOAT_BLOCK, ename:VK_FORMAT_BC7_UNORM_BLOCK, or ename:VK_FORMAT_BC7_SRGB_BLOCK @@ -834,14 +838,14 @@ maintained in the master branch of the Khronos Vulkan Github project. If the <<features-features-sparseResidency4Samples,sparse residency for images with 4 samples>> feature is not enabled, pname:imageType is ename:VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_4_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidency8Samples,sparse residency for images with 8 samples>> feature is not enabled, pname:imageType is ename:VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_8_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidency16Samples,sparse residency for images with 16 samples>> feature is not enabled, pname:imageType is ename:VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_16_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT - If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT + If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT + If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT + If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT + If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT + If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT + If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT + If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT + If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain at least one of ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT @@ -1080,7 +1084,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDescriptorType type uint32_t descriptorCount - The value of pname:descriptorCount must: be greater than `0` + pname:descriptorCount must: be greater than `0` @@ -1091,7 +1095,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t poolSizeCount const VkDescriptorPoolSize* pPoolSizes - The value of pname:maxSets must: be greater than `0` + pname:maxSets must: be greater than `0` @@ -1101,7 +1105,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t descriptorSetCount const VkDescriptorSetLayout* pSetLayouts - The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool + pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool pname:descriptorPool must: have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts @@ -1198,7 +1202,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:vertexBindingDescriptionCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings pname:vertexAttributeDescriptionCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes - For every value of pname:binding specified by any given element of pname:pVertexAttributeDescriptions, a sname:VkVertexInputBindingDescription must: exist in pname:pVertexBindingDescriptions with the same value of pname:binding + For every pname:binding specified by any given element of pname:pVertexAttributeDescriptions, a sname:VkVertexInputBindingDescription must: exist in pname:pVertexBindingDescriptions with the same value of pname:binding All elements of pname:pVertexBindingDescriptions must: describe distinct binding numbers All elements of pname:pVertexAttributeDescriptions must: describe distinct attribute locations @@ -1211,7 +1215,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkPrimitiveTopology topology VkBool32 primitiveRestartEnable - If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, the value of pname:primitiveRestartEnable must: be ename:VK_FALSE + If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:primitiveRestartEnable must: be ename:VK_FALSE If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:topology mustnot: be any of ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:topology mustnot: be ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST @@ -1238,7 +1242,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If the <<features-features-multiViewport,multiple viewports>> feature is not enabled, pname:scissorCount must: be `1` pname:viewportCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive pname:scissorCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive - The values of pname:scissorCount and pname:viewportCount must: be identical + pname:scissorCount and pname:viewportCount must: be identical @@ -1256,8 +1260,8 @@ maintained in the master branch of the Khronos Vulkan Github project. float depthBiasSlopeFactor float lineWidth - If the <<features-features-depthClamp,depth clamping>> feature is not enabled, the value of pname:depthClampEnable must: be ename:VK_FALSE - If the <<features-features-fillModeNonSolid,non-solid fill modes>> feature is not enabled, the value of pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL + If the <<features-features-depthClamp,depth clamping>> feature is not enabled, pname:depthClampEnable must: be ename:VK_FALSE + If the <<features-features-fillModeNonSolid,non-solid fill modes>> feature is not enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL @@ -1337,7 +1341,7 @@ maintained in the master branch of the Khronos Vulkan Github project. float minDepthBounds float maxDepthBounds - If the <<features-features-depthBounds,depth bounds testing>> feature is not enabled, the value of pname:depthBoundsTestEnable must: be ename:VK_FALSE + If the <<features-features-depthBounds,depth bounds testing>> feature is not enabled, pname:depthBoundsTestEnable must: be ename:VK_FALSE @@ -1383,9 +1387,9 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:pStages includes a fragment shader stage, its shader code mustnot: read from any input attachment that is defined as ename:VK_ATTACHMENT_UNUSED in pname:subpass The shader code for the entry points identified by pname:pStages, and the rest of the state identified by this structure must: adhere to the pipeline linking rules described in the <<interfaces,Shader Interfaces>> chapter If pname:subpass uses a depth/stencil attachment in pname:renderpass that has a layout of ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the sname:VkAttachmentReference defined by pname:subpass, and pname:pDepthStencilState is not `NULL`, the pname:depthWriteEnable member of pname:pDepthStencilState must: be ename:VK_FALSE - If pname:subpass uses a depth/stencil attachment in pname:renderpass that has a layout of ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the sname:VkAttachmentReference defined by pname:subpass, and pname:pDepthStencilState is not `NULL`, the value of the pname:failOp, pname:passOp and pname:depthFailOp members of each of the pname:front and pname:back members of pname:pDepthStencilState must: be ename:VK_STENCIL_OP_KEEP - If pname:pColorBlendState is not `NULL`, the value of the pname:blendEnable member of each element of the pname:pAttachment member of pname:pColorBlendState must: be ename:VK_FALSE if the pname:format of the attachment referred to in pname:subpass of pname:renderPass does not support color blend operations, as specified by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties - If pname:pColorBlendState is not `NULL`, The pname:attachmentCount member of pname:pColorBlendState must: be equal to the value of pname:colorAttachmentCount used to create pname:subpass + If pname:subpass uses a depth/stencil attachment in pname:renderpass that has a layout of ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the sname:VkAttachmentReference defined by pname:subpass, and pname:pDepthStencilState is not `NULL`, the pname:failOp, pname:passOp and pname:depthFailOp members of each of the pname:front and pname:back members of pname:pDepthStencilState must: be ename:VK_STENCIL_OP_KEEP + If pname:pColorBlendState is not `NULL`, the pname:blendEnable member of each element of the pname:pAttachment member of pname:pColorBlendState must: be ename:VK_FALSE if the pname:format of the attachment referred to in pname:subpass of pname:renderPass does not support color blend operations, as specified by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + If pname:pColorBlendState is not `NULL`, The pname:attachmentCount member of pname:pColorBlendState must: be equal to the pname:colorAttachmentCount used to create pname:subpass If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_VIEWPORT, the pname:pViewports member of pname:pViewportState must: be a pointer to an array of pname:pViewportState->viewportCount sname:VkViewport structures If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_SCISSOR, the pname:pScissors member of pname:pViewportState must: be a pointer to an array of pname:pViewportState->scissorCount sname:VkRect2D structures If the wide lines feature is not enabled, and no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_LINE_WIDTH, the pname:lineWidth member of pname:pRasterizationState must: be `1.0` @@ -1394,7 +1398,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If the pname:rasterizerDiscardEnable member of pname:pRasterizationState is ename:VK_FALSE, and pname:subpass uses a depth/stencil attachment, pname:pDepthStencilState must: be a pointer to a valid sname:VkPipelineDepthStencilStateCreateInfo structure If the pname:rasterizerDiscardEnable member of pname:pRasterizationState is ename:VK_FALSE, and pname:subpass uses color attachments, pname:pColorBlendState must: be a pointer to a valid sname:VkPipelineColorBlendStateCreateInfo structure If the depth bias clamping feature is not enabled, no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and the pname:depthBiasEnable member of pname:pDepthStencil is ename:VK_TRUE, the pname:depthBiasClamp member of pname:pDepthStencil must: be `0.0` - If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the pname:depthBoundsTestEnable member of pname:pDepthStencil is ename:VK_TRUE, the value of the pname:minDepthBounds and pname:maxDepthBounds members of pname:pDepthStencil must: be between `0.0` and `1.0`, inclusive + If no element of the pname:pDynamicStates member of pname:pDynamicState is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the pname:depthBoundsTestEnable member of pname:pDepthStencil is ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds members of pname:pDepthStencil must: be between `0.0` and `1.0`, inclusive pname:layout must: be <<descriptorsets-pipelinelayout-consistency,consistent>> with all shaders specified in pname:pStages If pname:subpass uses color and/or depth/stencil attachments, then the pname:rasterizationSamples member of pname:pMultisampleState must: be the same as the sample count for those subpass attachments If pname:subpass does not use any color and/or depth/stencil attachments, then the pname:rasterizationSamples member of pname:pMultisampleState must: follow the rules for a <<renderpass-noattachments, zero-attachment subpass>> @@ -1417,10 +1421,10 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t offset uint32_t size - The value of pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize - The value of pname:size must: be greater than `0` - The value of pname:size must: be a multiple of `4` - The value of pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset + pname:offset must: be less than sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize + pname:size must: be greater than `0` + pname:size must: be a multiple of `4` + pname:size must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset @@ -1433,11 +1437,11 @@ maintained in the master branch of the Khronos Vulkan Github project. const VkPushConstantRange* pPushConstantRanges pname:setLayoutCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets - The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_SAMPLER and ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers - The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers - The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers - The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages - The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages + The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_SAMPLER and ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers + The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers + The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers + The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages + The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given shader stage across all elements of pname:pSetLayouts must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages @@ -1462,7 +1466,7 @@ maintained in the master branch of the Khronos Vulkan Github project. The absolute value of pname:mipLodBias must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias If the <<features-features-samplerAnisotropy,anisotropic sampling>> feature is not enabled, pname:anisotropyEnable must: be ename:VK_FALSE - If pname:anisotropyEnable is ename:VK_TRUE, the value of pname:maxAnisotropy must: be between `1.0` and sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive + If pname:anisotropyEnable is ename:VK_TRUE, pname:maxAnisotropy must: be between `1.0` and sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and pname:magFilter must: be equal If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:mipmapMode must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minLod and pname:maxLod must: be zero @@ -1525,7 +1529,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t clearValueCount const VkClearValue* pClearValues - The value of pname:clearValueCount must: be greater than or equal to the number of attachments in pname:renderPass that specify a pname:loadOp of ename:VK_ATTACHMENT_LOAD_OP_CLEAR + pname:clearValueCount must: be greater than or equal to the number of attachments in pname:renderPass that specify a pname:loadOp of ename:VK_ATTACHMENT_LOAD_OP_CLEAR @@ -1578,7 +1582,7 @@ maintained in the master branch of the Khronos Vulkan Github project. const uint32_t* pPreserveAttachments pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS - The value of pname:colorCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxColorAttachments + pname:colorCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxColorAttachments If the first use of an attachment in this render pass is as an input attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then pname:loadOp mustnot: be ename:VK_ATTACHMENT_LOAD_OP_CLEAR If pname:pResolveAttachments is not `NULL`, for each resolve attachment that does not have the value ename:VK_ATTACHMENT_UNUSED, the corresponding color attachment mustnot: have the value ename:VK_ATTACHMENT_UNUSED If pname:pResolveAttachments is not `NULL`, the sample count of each element of pname:pColorAttachments must: be anything other than ename:VK_SAMPLE_COUNT_1_BIT @@ -1604,8 +1608,8 @@ maintained in the master branch of the Khronos Vulkan Github project. If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:dstStageMask mustnot: contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:srcStageMask mustnot: contain ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:dstStageMask mustnot: contain ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - The value of pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies and ensure a valid execution order - The values of pname:srcSubpass and pname:dstSubpass mustnot: both be equal to ename:VK_SUBPASS_EXTERNAL + pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies and ensure a valid execution order + pname:srcSubpass and pname:dstSubpass mustnot: both be equal to ename:VK_SUBPASS_EXTERNAL @@ -1621,7 +1625,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If any two subpasses operate on attachments with overlapping ranges of the same sname:VkDeviceMemory object, and at least one subpass writes to that area of sname:VkDeviceMemory, a subpass dependency must: be included (either directly or via some intermediate subpasses) between them If the pname:attachment member of any element of 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 sname:VkDeviceMemory object that overlaps with any other attachment in any subpass (including the same subpass), the sname:VkAttachmentDescription structures describing them must: include ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT in pname:flags - If the pname:attachment member of any element of pname:pInputAttachments, pname:pColorAttachments, pname:pResolveAttachments or pname:pDepthStencilAttachment, or the value of any element of pname:pPreserveAttachments in any given element of pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less than the value of pname:attachmentCount + 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 The value of any element of the pname:pPreserveAttachments member in any given element of pname:pSubpasses mustnot: be ename:VK_ATTACHMENT_UNUSED @@ -1692,7 +1696,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkBool32 variableMultisampleRate VkBool32 inheritedQueries - If the value of any member of this structure is ename:VK_FALSE, as returned by flink:vkGetPhysicalDeviceFeatures, then it must: be ename:VK_FALSE when passed as part of the sname:VkDeviceCreateInfo struct when creating a device + If any member of this structure is ename:VK_FALSE, as returned by flink:vkGetPhysicalDeviceFeatures, then it must: be ename:VK_FALSE when passed as part of the sname:VkDeviceCreateInfo struct when creating a device @@ -1860,7 +1864,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t height uint32_t layers - The value of pname:attachmentCount must: be equal to the attachment count specified in pname:renderPass + pname:attachmentCount must: be equal to the attachment count specified in pname:renderPass 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 Any given 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 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 @@ -1868,10 +1872,10 @@ maintained in the master branch of the Khronos Vulkan Github project. Any given 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 Any given element of pname:pAttachments must: have dimensions at least as large as the corresponding framebuffer dimension Any given element of pname:pAttachments must: only specify a single mip-level - Any given element of pname:pAttachments must: have been created with identity swizzle - The value of pname:width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth - The value of pname:height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight - The value of pname:layers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers + Any given element of pname:pAttachments must: have been created with the identity swizzle + pname:width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth + pname:height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight + pname:layers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers @@ -1892,7 +1896,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t firstInstance For a given vertex buffer binding, any attribute data fetched must: be entirely contained within the corresponding vertex buffer binding, as described in <<fxvertex-input>> - The total value of (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer + (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with pname:indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer If the <<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>> feature is not enabled, pname:firstInstance must: be code:0 @@ -1922,6 +1926,7 @@ maintained in the master branch of the Khronos Vulkan Github project. Any given element of pname:pCommandBuffers must: be in the executable state If any given element of pname:pCommandBuffers contains commands that execute secondary command buffers, those secondary command buffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, or not currently be executing on the device If any given element of pname:pCommandBuffers was created with ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, it mustnot: have been previously submitted without re-recording that command buffer + If any given element of pname:pCommandBuffers contains commands that execute secondary command buffers created with ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, each such secondary command buffer mustnot: have been previously submitted without re-recording that command buffer Any given element of pname:pCommandBuffers mustnot: contain commands that execute a secondary command buffer, if that secondary command buffer has been recorded in another primary command buffer after it was recorded into this sname:VkCommandBuffer Any given element of pname:pCommandBuffers must: have been created on a sname:VkCommandPool that was created for the same queue family that the calling command's pname:queue belongs to Any given element of pname:pCommandBuffers mustnot: have been created with ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY @@ -2087,7 +2092,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:surface must: be a surface that is supported by the device as determined using fname:vkGetPhysicalDeviceSurfaceSupportKHR The native window referred to by pname:surface mustnot: already be associated with a swapchain other than pname:oldSwapchain, or with a non-{apiname} graphics API surface pname:minImageCount must: be greater than or equal to the value returned in the pname:minImageCount member of the sname:VkSurfaceCapabilitiesKHR structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface - pname:minImageCount must: be less than or equal to the value returned in the pname:maxImageCount member of the sname:VkSurfaceCapabilitiesKHR structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface if the returned value of pname:maxImageCount is not zero + pname:minImageCount must: be less than or equal to the value returned in the pname:maxImageCount member of the sname:VkSurfaceCapabilitiesKHR structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface if the returned pname:maxImageCount is not zero pname:imageFormat and pname:imageColorspace must: match the pname:format and pname:colorSpace members, respectively, of one of the sname:VkSurfaceFormatKHR structures returned by fname:vkGetPhysicalDeviceSurfaceFormatsKHR for the surface pname:imageExtent must: be between pname:minImageExtent and pname:maxImageExtent, inclusive, where pname:minImageExtent and pname:maxImageExtent are members of the sname:VkSurfaceCapabilitiesKHR structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface pname:imageArrayLayers must: be greater than `0` and less than or equal to the pname:maxImageArrayLayers member of the sname:VkSurfaceCapabilitiesKHR structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface @@ -3037,7 +3042,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkResult vkEnumerateDeviceLayerProperties VkPhysicalDevice physicalDevice - uint32_t* pPropertyCount + uint32_t* pPropertyCount VkLayerProperties* pProperties @@ -3113,7 +3118,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:memory mustnot: currently be mapped pname:offset must: be less than the size of pname:memory - pname:size must: be greater than `0` + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be greater than `0` If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of the pname:memory minus pname:offset pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT @@ -3163,9 +3168,9 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:buffer mustnot: already be backed by a memory object pname:buffer mustnot: have been created with any sparse memory binding flags pname:memoryOffset must: be less than the size of pname:memory - 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 the value of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment - If pname:buffer was created with the ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment - If pname:buffer was created with the ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment + 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 + 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 + 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 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 The size of pname:buffer must: be less than or equal to the size of pname:memory minus pname:memoryOffset 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 @@ -3213,11 +3218,11 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t* pPropertyCount VkSparseImageFormatProperties* pProperties - If pname:format is an integer format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts - If pname:format is a non-integer color format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts - If pname:format is a depth format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts - If pname:format is a stencil format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageStencilSampleCounts - If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts + If pname:format is an integer format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts + If pname:format is a non-integer color format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts + If pname:format is a depth format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts + If pname:format is a stencil format, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:sampledImageStencilSampleCounts + If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, samples must: be one of the bit flags specified in sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts @@ -3508,7 +3513,7 @@ maintained in the master branch of the Khronos Vulkan Github project. const VkAllocationCallbacks* pAllocator VkPipeline* pPipelines - If the value of the pname:flags member of any given 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`, the value of pname:basePipelineIndex must: be less than the index into pname:pCreateInfos that corresponds to that element + If the pname:flags member of any given 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 @@ -3520,7 +3525,7 @@ maintained in the master branch of the Khronos Vulkan Github project. const VkAllocationCallbacks* pAllocator VkPipeline* pPipelines - If the value of the pname:flags member of any given 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`, the value of pname:basePipelineIndex must: be less than the index into pname:pCreateInfos that corresponds to that element + If the pname:flags member of any given 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 @@ -3629,7 +3634,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t descriptorSetCount const VkDescriptorSet* pDescriptorSets - All submitted commands that refer to any element of pname:pDesciptorSets must: have completed execution + All submitted commands that refer to any element of pname:pDescriptorSets must: have completed execution pname:pDescriptorSets must: be a pointer to an array of pname:descriptorSetCount sname:VkDescriptorSet handles, each element of which must: either be a valid handle or sname:VK_NULL_HANDLE pname:descriptorPool must: have been created with the ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag @@ -3764,10 +3769,10 @@ maintained in the master branch of the Khronos Vulkan Github project. VkPipelineBindPoint pipelineBindPoint VkPipeline pipeline - If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the sname:VkCommandPool that pname:commandBuffer was allocated from must: support compute operations - If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations - If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, pname:pipeline must: be a compute pipeline - If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, pname:pipeline must: be a graphics pipeline + If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the sname:VkCommandPool that pname:commandBuffer was allocated from must: support compute operations + If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations + If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, pname:pipeline must: be a compute pipeline + If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, pname:pipeline must: be a graphics pipeline If the <<features-features-variableMultisampleRate,variable multisample rate>> feature is not supported, pname:pipeline is a graphics pipeline, the current subpass has no attachments, and this is not the first call to this function with a graphics pipeline after transitioning to the current subpass, then the sample count specified by this pipeline must: match that set in the previous pipeline @@ -3801,7 +3806,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkCommandBuffer commandBuffer float lineWidth - If the <<features-features-wideLines,wide lines>> feature is not enabled, the value of pname:lineWidth must: be `1.0` + If the <<features-features-wideLines,wide lines>> feature is not enabled, pname:lineWidth must: be `1.0` @@ -3811,7 +3816,7 @@ maintained in the master branch of the Khronos Vulkan Github project. float depthBiasClamp float depthBiasSlopeFactor - If the <<features-features-depthBiasClamp,depth bias clamping>> feature is not enabled, the value of pname:depthBiasClamp must: be code:0.0 + If the <<features-features-depthBiasClamp,depth bias clamping>> feature is not enabled, pname:depthBiasClamp must: be code:0.0 @@ -3825,8 +3830,8 @@ maintained in the master branch of the Khronos Vulkan Github project. float minDepthBounds float maxDepthBounds - The value of pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive - The value of pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive + pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive + pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive @@ -3871,7 +3876,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize offset VkIndexType indexType - The value of pname:offset must: be less than the size of pname:buffer + pname:offset must: be less than the size of pname:buffer The sum of pname:offset, and the address of the range of sname:VkDeviceMemory object that's backing pname:buffer, must: be a multiple of the type indicated by pname:indexType pname:buffer must: have been created with the ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag @@ -3930,7 +3935,7 @@ maintained in the master branch of the Khronos Vulkan Github project. For a given vertex buffer binding, any attribute data fetched must: be entirely contained within the corresponding vertex buffer binding, as described in <<fxvertex-input>> A valid graphics pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_GRAPHICS If the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that state must: have been set on the current command buffer - The total value of (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer + (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset) must: be less than or equal to the size of the currently bound index buffer, with indexSize being based on the type specified by pname:indexType, where the index buffer, pname:indexType, and pname:offset are specified via fname:vkCmdBindIndexBuffer Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or code:Proj in their name, in any shader stage @@ -3948,9 +3953,9 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t drawCount uint32_t stride - The value of pname:offset must: be a multiple of `4` - If pname:drawCount is greater than `1`, the value of pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndirectCommand) - If the <<features-features-multiDrawIndirect,multi-draw indirect>> feature is not enabled, the value of pname:drawCount must: be `0` or `1` + pname:offset must: be a multiple of `4` + If pname:drawCount is greater than `1`, pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndirectCommand) + If the <<features-features-multiDrawIndirect,multi-draw indirect>> feature is not enabled, pname:drawCount must: be `0` or `1` If the <<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>> feature is not enabled, all the pname:firstInstance members of the sname:VkDrawIndirectCommand structures accessed by this command must: be code:0 For each set _n_ that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for set _n_, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <<descriptorsets-compatibility>> For each push constant that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for push constants, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <<descriptorsets-compatibility>> @@ -3958,8 +3963,8 @@ maintained in the master branch of the Khronos Vulkan Github project. All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point's interface must: have valid buffers bound A valid graphics pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_GRAPHICS If the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that state must: have been set on the current command buffer - If pname:drawCount is equal to `1`, the total value of (pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer - If pname:drawCount is greater than `1`, the total value of (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer + If pname:drawCount is equal to `1`, (pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer + If pname:drawCount is greater than `1`, (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer pname:drawCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage @@ -3978,9 +3983,9 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t drawCount uint32_t stride - The value of pname:offset must: be a multiple of `4` - If pname:drawCount is greater than `1`, the value of pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndexedIndirectCommand) - If the <<features-features-multiDrawIndirect,multi-draw indirect>> feature is not enabled, the value of pname:drawCount must: be `0` or `1` + pname:offset must: be a multiple of `4` + If pname:drawCount is greater than `1`, pname:stride must: be a multiple of `4` and must: be greater than or equal to sizeof(sname:VkDrawIndexedIndirectCommand) + If the <<features-features-multiDrawIndirect,multi-draw indirect>> feature is not enabled, pname:drawCount must: be `0` or `1` If the <<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>> feature is not enabled, all the pname:firstInstance members of the sname:VkDrawIndexedIndirectCommand structures accessed by this command must: be code:0 For each set _n_ that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for set _n_, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <<descriptorsets-compatibility>> For each push constant that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout that is compatible for push constants, with the sname:VkPipelineLayout used to create the current sname:VkPipeline, as described in <<descriptorsets-compatibility>> @@ -3988,8 +3993,8 @@ maintained in the master branch of the Khronos Vulkan Github project. All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point's interface must: have valid buffers bound A valid graphics pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_GRAPHICS If the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that state must: have been set on the current command buffer - If pname:drawCount is equal to `1`, the total value of (pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer - If pname:drawCount is greater than `1`, the total value of (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer + If pname:drawCount is equal to `1`, (pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer + If pname:drawCount is greater than `1`, (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer pname:drawCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage @@ -4032,7 +4037,7 @@ maintained in the master branch of the Khronos Vulkan Github project. Descriptors in each bound descriptor set, specified via fname:vkCmdBindDescriptorSets, must: be valid if they are statically used by the currently bound sname:VkPipeline object, specified via fname:vkCmdBindPipeline A valid compute pipeline must: be bound to the current command buffer with ename:VK_PIPELINE_BIND_POINT_COMPUTE pname:buffer must: have been created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set - The value of pname:offset must: be a multiple of `4` + pname:offset must: be a multiple of `4` The sum of pname:offset and the size of sname:VkDispatchIndirectCommand must: be less than or equal to the size of pname:buffer For each push constant that is statically used by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant value must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a sname:VkPipelineLayout that is compatible for push constants with the one used to create the current sname:VkPipeline, as described in <<descriptorsets-compatibility>> If any sname:VkSampler object that is accessed from a shader by the sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: be used to sample from any sname:VkImage with a sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage @@ -4159,13 +4164,13 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize dataSize const uint32_t* pData - The value of pname:dataSize must: be greater than `0` - The value of pname:dstOffset must: be less than the size of pname:dstBuffer - The value of pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset + pname:dataSize must: be greater than `0` + pname:dstOffset must: be less than the size of pname:dstBuffer + pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag - The value of pname:dstOffset must: be a multiple of `4` - The value of pname:dataSize must: be less than or equal to `65536` - The value of pname:dataSize must: be a multiple of `4` + pname:dstOffset must: be a multiple of `4` + pname:dataSize must: be less than or equal to `65536` + pname:dataSize must: be a multiple of `4` @@ -4176,9 +4181,9 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize size uint32_t data - pname:size must: be greater than `0` pname:dstOffset must: be less than the size of pname:dstBuffer pname:dstOffset must: be a multiple of `4` + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be greater than `0` If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of `4` pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag @@ -4359,7 +4364,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t query The query identified by pname:queryPool and pname:query must: be _unavailable_ - The command pool's queue family must: support a non-zero value of pname:timestampValidBits + The command pool's queue family must: support a non-zero pname:timestampValidBits @@ -4394,8 +4399,8 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:stageFlags must: match exactly the shader stages used in pname:layout for the range specified by pname:offset and pname:size pname:offset must: be a multiple of `4` pname:size must: be a multiple of `4` - pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize - pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset + pname:offset must: be less than sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize + pname:size must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset @@ -4432,8 +4437,8 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t commandBufferCount const VkCommandBuffer* pCommandBuffers - pname:commandBuffer must: have been created with a pname:level value of ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY - Any given element of pname:pCommandBuffers must: have been created with a pname:level value of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY + pname:commandBuffer must: have been created with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY + Any given element of pname:pCommandBuffers must: have been created with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag Any given element of pname:pCommandBuffers must: be in the executable state @@ -4528,7 +4533,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t queueFamilyIndex MirConnection* connection - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice @@ -4549,7 +4554,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkSurfaceKHR surface VkBool32* pSupported - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice @@ -4631,7 +4636,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t queueFamilyIndex struct wl_display* display - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice @@ -4646,7 +4651,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice @@ -4663,7 +4668,7 @@ maintained in the master branch of the Khronos Vulkan Github project. Display* dpy VisualID visualID - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice @@ -4680,7 +4685,7 @@ maintained in the master branch of the Khronos Vulkan Github project. xcb_connection_t* connection xcb_visualid_t visual_id - pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice + pname:queueFamilyIndex must: be less than pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice @@ -4728,9 +4733,11 @@ maintained in the master branch of the Khronos Vulkan Github project. + + @@ -5122,5 +5129,27 @@ maintained in the master branch of the Khronos Vulkan Github project. + + + + + + + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command mustnot: have an elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command mustnot: have an elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command mustnot: have an elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command mustnot: have an elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command mustnot: have an elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command mustnot: have an elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in sname:VkFormatProperties::pname:linearTilingFeatures (for a linear image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an optimally tiled image) returned by fname:vkGetPhysicalDeviceFormatProperties + If either pname:magFilter or pname:minFilter is ename:VK_FILTER_CUBIC_IMG, pname:anisotropyEnable must: be ename:VK_FALSE + + diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index f57c4d93..567671a9 100644 --- a/src/vulkan/vulkan.h +++ b/src/vulkan/vulkan.h @@ -40,12 +40,18 @@ extern "C" { #define VK_MAKE_VERSION(major, minor, patch) \ (((major) << 22) | ((minor) << 12) | (patch)) -// Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 5) +// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead. +//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) + +// Vulkan 1.0 version number +#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0) #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) #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 6 + #define VK_NULL_HANDLE 0 @@ -680,6 +686,7 @@ typedef enum VkDynamicState { typedef enum VkFilter { VK_FILTER_NEAREST = 0, VK_FILTER_LINEAR = 1, + VK_FILTER_CUBIC_IMG = 1000015000, VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST, VK_FILTER_END_RANGE = VK_FILTER_LINEAR, VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1), @@ -809,6 +816,7 @@ typedef enum VkFormatFeatureFlagBits { VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000, } VkFormatFeatureFlagBits; typedef VkFlags VkFormatFeatureFlags; @@ -3780,6 +3788,11 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( #define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" +#define VK_IMG_filter_cubic 1 +#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 +#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" + + #ifdef __cplusplus } #endif