diff --git a/ChangeLog.txt b/ChangeLog.txt index 87799203..1eeb5fc4 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -11,6 +11,7 @@ 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). @@ -67,9 +68,11 @@ Change log for February 25, 2015 Vulkan 1.0.4 spec update: ----------------------------------------------------- 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). @@ -130,6 +133,7 @@ Github Issues: 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 @@ -144,6 +148,7 @@ Internal Issues: 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. @@ -161,64 +166,49 @@ 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 <> section (public issue 45). - * Editorial fixes for <> section (public issues 54, 59). - - * Clarify behavior of depth test in the <> + 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 <> 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 <> diagram. Use more easily distinguished symbols in @@ -231,7 +221,6 @@ Github Issues: 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. @@ -240,37 +229,30 @@ Internal Issues: 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). + 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. @@ -285,60 +267,46 @@ Github Issues: * Fix slink:VkSpecializationMapEntry example to avoid C/C++ strict aliasing issues (public issue 14). - * Clarify the meaning of "matching" in flink:vkCmdBindDescriptorSets validity language (public issue 33). - * Add stub reference pages so xrefs to not-yet-written pages don't generate 404 errors. However, the actual content of these pages still needs to be filled in as time allows (public issue 44, but does not close that issue out). - * Remove incorrect validity statement for flink:vkGetImageSparseMemoryRequirements (public issue 85). - * Reword the <> feature in terms of "aliasing", and clarify that it applies to bindings in the same memory object (public issue 90). - * Clarify the relationship of the slink:VkPhysicalDeviceLimits pname:maxViewportDimensions and pname:viewportBoundsRange limits (public issue 92). - * Specify sparse unbound texture replacement in the <> section independently of robust buffer access language (public issue 100). - * Add the <> section to explain architecture constraints Vulkan has chosen to accept in order to enable portable and performant code (public issue 122). - * State that an object must not be destroyed until *all* (not *any*) uses of that object have completed (public issue 123). - * Minor editorial cleanup (public issues 129, 134, 146, 148). - * Add validity language for layer and extension names to slink:VkDeviceCreateInfo matching that used for slink:VkInstanceCreateInfo (public issue 130). - * Clean up terminology for the case when the bits set in one bitmask are a subset of the bits set in another bitmask (public issue 138). - * Document that input attachments are UniformConstant not Input, in the <> section (public glslang bug 169). Internal Issues: - * Add max enum values to "flag bits" enums (internal issue #136). - + * Add max enum values to "flag bits" enums (internal issue 136). * Clarify language around the various uses of the term "block" in the <> section - (internal issue #202). - + (internal issue 202). * Removed "expand" dependency from groups in vk.xml and added auto-generation code in the scripts to infer it instead, to ensure consistency. This caused renaming of sname:VkColorSpaceKHR and @@ -347,7 +315,6 @@ Internal Issues: with this change. This change adds ranges to two additional enums that were missing them due to not defining the "expand" attribute (internal issue 217). - * Tweak makefile to generate ref page nroff (.3) files in the right output directory, working around an a2x limitation (internal issue 223). @@ -356,7 +323,6 @@ Other Commits: * Add validity requirements for flink:vkCmdCopyQueryPoolResults pname:dstBuffer parameter. - * Fix ref page build to generate .3 targets in the right output directory. @@ -396,7 +362,7 @@ Github Issues: Internal Issues: * Link to the fixed-function vertex chapter from the drawing chapter - (internal issue #110) + (internal issue 110) * Fix typo in slink:VkImageCreateInfo validity language: ptext:maxExtent.sampleCounts -> pname:sampleCounts (internal issue 249). @@ -499,3 +465,64 @@ Internal Issues: * Fix typo in the definition of point sampling for elink:VkCullModeFlagBits (internal issue 268). +----------------------------------------------------- + +Change log for April 22, 2016 Vulkan 1.0.11 spec update: + + * Bump API patch number and header version number to 11 for this + update. + +Github Issues: + + * Clarify the WSI extension language by switching from the fuzzier + "ownership" language to more-consistent "acquire" language (public + issue 117). + * Clarify that memory barriers apply to all commands in the dependency + chains in the flink:vkGetRenderAreaGranularity command and the + <> section (public issue 132). + * Clarify that a queue family is a set of queues in the + <> section (public issue + 166). + * Removed requirement from valid usage language that + VkPresentInfoKHR::waitSemaphoreCount must be greater than 0 (public + issue 171). + * Fix broken internal links, describe structures consistently, use + consistent style for SPIR-V codewords, and tag normative terms that + were missing asciidoc tags (public issue 183 and ancillary + markup/normative language fixes). + * Fix typos for slink:VkPhysicalDeviceLimits member names in + slink:VkImageCreateInfo validity language (public issue 184). + +Internal Issues: + + * Document that the requested patch version number specified as part + of slink:VkApplicationInfo::pname:apiVersion is ignored when + creating an instance (internal issue 176). + * Clarify handling of extension structs in the + <> section (internal issue 254). + * Update required slink:VkImageFormatProperties::pname:maxMipLevels to + be limited to the maximum allowed mipmap pyramid size corresponding + to the actual maximum supported size for the format (internal issue + 256). + * Modify the <> section so the allowed maximum extent is the maximum + image dimension supported for each dimension of the type of texture + being queried (internal issue 257). + * Clarify in the <> section that at least one of the code:LocalSize execution + mode or code:WorkgroupSize decoration is required for each compute + shader entry point in a shader module (internal issue 279). + * Add validity rules for formats in flink:vkCmdClearColorImage and + flink:vkCmdClearDepthStencilImage (internal issue 283). + * Clarify that slink:VkImageFormatProperties::pname:maxResourceSize is + an upper bound, and that it may not be possible to create an image + anywhere near that size (internal issue 284). + +Other Commits: + + * Fix various minor markup errors reported by validation scripts. + * Change copyright from Khronos Free Use License to Apache 2.0 license + on relevant script/XML/header files. This does not affect the + specification source copyright. + diff --git a/doc/specs/misc/GL_KHR_vulkan_glsl.txt b/doc/specs/misc/GL_KHR_vulkan_glsl.txt index fac0c038..811244e8 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: 5-Apr-2016 - Revision: 29 + Last Modified Date: 12-Apr-2016 + Revision: 30 Number @@ -943,24 +943,25 @@ Changes to Chapter 5 of the OpenGL Shading Language Specification operators and with another constant or specialization constant, the result is implicitly a specialization constant. - - int(), uint(), float(), and bool() constructors for type conversions + - int(), uint(), and bool() constructors for type conversions from any of the following types to any of the following types: * int * uint - * float - * double * bool - vector versions of the above conversion constructors - allowed implicit conversions of the above - - The operators + - swizzles (e.g., foo.yx) + - The following when applied to integer or unsigned integer types: * unary negative ( - ) - * not ( ! ) * binary operations ( + , - , * , / , % ) * shift ( <<, >> ) * bitwise operations ( & , | , ^ ) - * swizzles (e.g., foo.yx) - * logical operations ( && , || , ^^ ) + - The following when applied to integer or unsigned integer scalar types: * comparison ( == , != , > , >= , < , <= ) + - The following when applied to the Boolean scalar type: + * not ( ! ) + * logical operations ( && , || , ^^ ) + * comparison ( == , != ) Changes to Chapter 7 of the OpenGL Shading Language Specification @@ -1154,6 +1155,7 @@ Revision History Rev. Date Author Changes ---- ----------- ------- -------------------------------------------- + 30 12-Apr-2016 JohnK Restrict spec-const operations to non-float 29 5-Apr-2016 JohnK Clarify disallowance of spec-const arrays in initializers 28 7-Mar-2016 JohnK Make push_constants not have sets diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile index 5795b2aa..b09702da 100644 --- a/doc/specs/vulkan/Makefile +++ b/doc/specs/vulkan/Makefile @@ -31,8 +31,8 @@ QUIET?=@ ASCIIDOC ?= asciidoc.py A2X ?= a2x.py DBLATEX ?= dblatex -# DBLATEXPREFIX can be overriden by setting it as an environment variable if -# the not installed in the standard location on your distribution +# DBLATEXPREFIX can be overriden by setting it as an environment variable, +# if not installed in the standard location on your distribution DBLATEXPREFIX ?= /etc/asciidoc/dblatex RM=rm -f RMRF=rm -rf @@ -126,7 +126,7 @@ INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpo COMMONDOCS := $(CHAPTERS) $(INCLUDES) # A generated included file with the spec version, date, and git commit SPECVERSION = specversion.txt -SPECREVISION = 1.0.10 +SPECREVISION = 1.0.11 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 a1b08aaf..054334ba 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 @@ -26,7 +26,7 @@ s, t, and r directions. === New Enum Constants - * Extending ename:VkSamplerAddressMode: + * Extending elink:VkSamplerAddressMode: ** ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE === Example @@ -41,11 +41,11 @@ Creating a sampler with the new address mode in each dimension VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO // sType // Other members set to application-desired values }; - + createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; - + VkSampler sampler; VkResult result = vkCreateSampler( device, diff --git a/doc/specs/vulkan/appendices/extensions.txt b/doc/specs/vulkan/appendices/extensions.txt index 4f6013c2..f03c812c 100644 --- a/doc/specs/vulkan/appendices/extensions.txt +++ b/doc/specs/vulkan/appendices/extensions.txt @@ -445,9 +445,9 @@ all extensions must: define two additional tokens. extension defined in +vulkan.h+ and the revision supported by the {apiname} implementation (the pname:specVersion field of the slink:VkExtensionProperties structure corresponding to the extension and - returned by one of the <>) may: - differ. In such cases, only the functionality and behavior of the - lowest-numbered revision can: be used. + returned by one of the <>) may: differ. In such cases, only the functionality and + behavior of the lowest-numbered revision can: be used. * VK_EXTNAME_EXTENSION_NAME is a string constant which is the name of the extension. diff --git a/doc/specs/vulkan/appendices/glossary.txt b/doc/specs/vulkan/appendices/glossary.txt index b991934c..9c2123e5 100644 --- a/doc/specs/vulkan/appendices/glossary.txt +++ b/doc/specs/vulkan/appendices/glossary.txt @@ -242,7 +242,7 @@ Dynamic Uniform Buffer:: Explicitly-Enabled Layer:: A layer enabled by the application by adding it to the enabled layer - list in flink:vkCmdCreateInstance or flink:vkCmdCreateDevice. + list in flink:vkCreateInstance or flink:vkCreateDevice. Event:: A synchronization primitive that is signalled when execution of previous @@ -317,6 +317,18 @@ Handle:: An opaque integer or pointer value used to refer to a {apiname} object. Each object type has a unique handle type. +Happen-after:: + A command happens-after a dependency if they are separated by an execution + dependency chain, with the command included in the destination of the last + dependency of the chain. A memory barrier makes visible memory writes to + commands that happen-after it. + +Happen-before:: + A command happens-before a dependency if they are separated by an execution + dependency chain, with the command included in the source of the first + dependency of the chain. A memory barrier makes available memory writes of + commands that happen-before it. + Helper Invocation:: A fragment shader invocation that is created solely for the purposes of evaluating derivatives for use in non-helper fragment shader diff --git a/doc/specs/vulkan/appendices/spirvenv.txt b/doc/specs/vulkan/appendices/spirvenv.txt index 1762f685..a931148d 100644 --- a/doc/specs/vulkan/appendices/spirvenv.txt +++ b/doc/specs/vulkan/appendices/spirvenv.txt @@ -26,17 +26,17 @@ described in section 2.3 of the SPIR-V Specification. == Capabilities Implementations must: support the following capability operands declared by -*OpCapability*: +code:OpCapability: - - Matrix - - Shader - - InputAttachment - - Sampled1D - - Image1D - - SampledBuffer - - ImageBuffer - - ImageQuery - - DerivativeControl + - code:Matrix + - code:Shader + - code:InputAttachment + - code:Sampled1D + - code:Image1D + - code:SampledBuffer + - code:ImageBuffer + - code:ImageQuery + - code:DerivativeControl Implementations may: support features that are not required: by the Specification, as described in the <> chapter. @@ -48,32 +48,32 @@ to that feature must: also be supported. [options="header"] |==== | SPIR-V OpCapability | {apiname} feature name -| *Geometry* | <> -| *Tessellation* | <> -| *Float64* | <> -| *Int64* | <> -| *Int16* | <> -| *TessellationPointSize* | <> -| *GeometryPointSize* | <> -| *ImageGatherExtended* | <> -| *StorageImageMultisample* | <> -| *UniformBufferArrayDynamicIndexing* | <> -| *SampledImageArrayDynamicIndexing* | <> -| *StorageBufferArrayDynamicIndexing* | <> -| *StorageImageArrayDynamicIndexing* | <> -| *ClipDistance* | <> -| *CullDistance* | <> -| *ImageCubeArray* | <> -| *SampleRateShading* | <> -| *SparseResidency* | <> -| *MinLod* | <> -| *SampledCubeArray* | <> -| *ImageMSArray* | <> -| *StorageImageExtendedFormats* | <> -| *InterpolationFunction* | <> -| *StorageImageReadWithoutFormat* | <> -| *StorageImageWriteWithoutFormat* | <> -| *MultiViewport* | <> +| code:Geometry | <> +| code:Tessellation | <> +| code:Float64 | <> +| code:Int64 | <> +| code:Int16 | <> +| code:TessellationPointSize | <> +| code:GeometryPointSize | <> +| code:ImageGatherExtended | <> +| code:StorageImageMultisample | <> +| code:UniformBufferArrayDynamicIndexing | <> +| code:SampledImageArrayDynamicIndexing | <> +| code:StorageBufferArrayDynamicIndexing | <> +| code:StorageImageArrayDynamicIndexing | <> +| code:ClipDistance | <> +| code:CullDistance | <> +| code:ImageCubeArray | <> +| code:SampleRateShading | <> +| code:SparseResidency | <> +| code:MinLod | <> +| code:SampledCubeArray | <> +| code:ImageMSArray | <> +| code:StorageImageExtendedFormats | <> +| code:InterpolationFunction | <> +| code:StorageImageReadWithoutFormat | <> +| code:StorageImageWriteWithoutFormat | <> +| code:MultiViewport | <> |==== The application mustnot: pass a SPIR-V module containing any of the @@ -100,24 +100,24 @@ following rules: ** *Device* ** *Workgroup* ** *Invocation* - * The *OriginLowerLeft* execution mode mustnot: be used; fragment entry - points must: declare *OriginUpperLeft*. - * The *PixelCenterInteger* execution mode mustnot: be used. Pixels are + * The code:OriginLowerLeft execution mode mustnot: be used; fragment entry + points must: declare code:OriginUpperLeft. + * The code:PixelCenterInteger execution mode mustnot: be used. Pixels are always centered at half-integer coordinates. * Images - ** *OpTypeImage* must: declare a scalar 32-bit float or 32-bit integer - type for the ``Sampled Type''. (RelaxedPrecision can: be applied to a - sampling instruction and to the variable holding the result of a + ** code:OpTypeImage must: declare a scalar 32-bit float or 32-bit integer + type for the ``Sampled Type''. (code:RelaxedPrecision can: be applied + to a sampling instruction and to the variable holding the result of a sampling instruction.) - ** *OpSampledImage* must: only consume an ``Image'' operand whose type has - its ``Sampled'' operand set to 1. - ** The ``(u, v)'' coordinates used for a *SubpassData* must: be the + ** code:OpSampledImage must: only consume an ``Image'' operand whose type + has its ``Sampled'' operand set to 1. + ** The ``(u, v)'' coordinates used for a code:SubpassData must: be the of a constant vector (0, 0), or if a layer coordinate is used, must: be a vector that was formed with constant 0 for the ``u'' and ``v'' components. - ** The ``Depth'' operand of *OpTypeImage* is ignored. + ** The ``Depth'' operand of code:OpTypeImage is ignored. * Decorations - ** The *GLSLShared* and *GLSLPacked* decorations mustnot: be used. + ** The code:GLSLShared and code:GLSLPacked decorations mustnot: be used. ** The code:Flat, code:NoPerspective, code:Sample, and code:Centroid decorations mustnot: be used on variables with storage class other than code:Input or on variables used in the interface of non-fragment shader @@ -125,10 +125,14 @@ following rules: ** The code:Patch decoration mustnot: be used on variables in the interface of a vertex, geometry, or fragment shader stage's entry point. - - *OpTypeRuntimeArray* must: only be used for the last member of an - *OpTypeStruct* in the *Uniform* storage class. - - Linkage: See <> for additional linking and + * code:OpTypeRuntimeArray must: only be used for the last member of an + code:OpTypeStruct in the code:Uniform storage class. + * Linkage: See <> for additional linking and validation rules. + * Compute Shaders + ** For each compute shader entry point, either a code:LocalSize execution mode + or an object decorated with the code:WorkgroupSize decoration must: be + specified. [[spirvenv-precision-operation]] @@ -156,29 +160,29 @@ required: to be at least as follows, unless decorated with RelaxedPrecision: .Precision of core SPIR-V Instructions [options="header"] |==== -|Instruction | Precision -|*OpFAdd* | Correctly rounded. -|*OpFSub* | Correctly rounded. -|*OpFMul* | Correctly rounded. -|*OpFOrdEqual*, *OpFUnordEqual* | Correct result. -|*OpFOrdLessThan*, *OpFUnordLessThan* | Correct result. -|*OpFOrdGreaterThan*, *OpFUnordGreaterThan* | Correct result. -|*OpFOrdLessThanEqual*, *OpFUnordLessThanEqual* | Correct result. -|*OpFOrdGreaterThanEqual*, *OpFUnordGreaterThanEqual*| Correct result. -|*OpFDiv* | 2.5 ULP for b in the range [2^-126^, 2^126^]. -|conversions between types | Correctly rounded. +| Instruction | Precision +| code:OpFAdd | Correctly rounded. +| code:OpFSub | Correctly rounded. +| code:OpFMul | Correctly rounded. +| code:OpFOrdEqual, code:OpFUnordEqual | Correct result. +| code:OpFOrdLessThan, code:OpFUnordLessThan | Correct result. +| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan | Correct result. +| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual | Correct result. +| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual| Correct result. +| code:OpFDiv | 2.5 ULP for b in the range [2^-126^, 2^126^]. +| conversions between types | Correctly rounded. |==== Precision of GLSL.std.450 Instructions [options="header"] |==== -|Instruction | Precision -|*fma*() | Inherited from *OpFMul* followed by *OpFAdd*. -|*exp*(x), *exp2*(x) | latexmath:[$(3 + 2 \times \|x\|)$] ULP. -|*log*(), *log2*() | 3 ULP outside the range [0.5, 2.0]. Absolute error < 2^-21^ inside the range [0.5, 2.0]. -|*pow*(x, y) | Inherited from *exp2* (y × *log2* (x)). -|*sqrt*() | Inherited from 1.0 / *inversesqrt*(). -|*inversesqrt*() | 2 ULP. +|Instruction | Precision +| code:fma() | Inherited from code:OpFMul followed by code:OpFAdd. +| code:exp(x), code:exp2(x) | latexmath:[$(3 + 2 \times \|x\|)$] ULP. +| code:log(), code:log2() | 3 ULP outside the range [0.5, 2.0]. Absolute error < 2^-21^ inside the range [0.5, 2.0]. +| code:pow(x, y) | Inherited from code:exp2(y × code:log2(x)). +| code:sqrt() | Inherited from 1.0 / code:inversesqrt(). +| code:inversesqrt() | 2 ULP. |==== GLSL.std.450 extended instructions specifically defined in terms of the diff --git a/doc/specs/vulkan/chapters/clears.txt b/doc/specs/vulkan/chapters/clears.txt index e616b7b1..b946f5f1 100644 --- a/doc/specs/vulkan/chapters/clears.txt +++ b/doc/specs/vulkan/chapters/clears.txt @@ -98,7 +98,7 @@ parameters. include::../validity/protos/vkCmdClearAttachments.txt[] -The sname:VkClearRect struct is defined as follows: +The sname:VkClearRect structure is defined as: include::../structs/VkClearRect.txt[] @@ -111,7 +111,7 @@ counting from the base layer of the attachment image view are cleared. include::../validity/structs/VkClearRect.txt[] -The sname:VkClearAttachment struct is defined as follows: +The sname:VkClearAttachment structure is defined as: include::../structs/VkClearAttachment.txt[] @@ -147,7 +147,7 @@ include::../validity/structs/VkClearAttachment.txt[] [[clears-values]] == Clear Values -The definition of sname:VkClearColorValue is as follows: +The sname:VkClearColorValue structure is defined as: include::../structs/VkClearColorValue.txt[] @@ -170,12 +170,11 @@ The four array elements of the clear color map to R, G, B, and A components of image formats, in order. If the image has more than one sample, the same value is written to all -samples for any pixels being cleared. The ftext:vkClear*Image commands do -not support compressed image formats. +samples for any pixels being cleared. include::../validity/structs/VkClearColorValue.txt[] -The definition of sname:VkClearDepthStencilValue is as follows: +The sname:VkClearDepthStencilValue structure is defined as: include::../structs/VkClearDepthStencilValue.txt[] @@ -190,8 +189,10 @@ include::../structs/VkClearDepthStencilValue.txt[] include::../validity/structs/VkClearDepthStencilValue.txt[] Some parts of the API require either color or depth/stencil clear values, -depending on the attachment. For this the sname:VkClearValue union is -defined as follows: +depending on the attachment. The sname:VkClearValue union represents such +values. + +The sname:VkClearValue union is defined as: include::../structs/VkClearValue.txt[] diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt index 089dd9b8..cb4e7744 100644 --- a/doc/specs/vulkan/chapters/cmdbuffers.txt +++ b/doc/specs/vulkan/chapters/cmdbuffers.txt @@ -87,15 +87,14 @@ include::../protos/vkCreateCommandPool.txt[] include::../validity/protos/vkCreateCommandPool.txt[] -The sname:VkCommandPoolCreateInfo structure is defined as follows: +The sname:VkCommandPoolCreateInfo structure is defined as: include::../structs/VkCommandPoolCreateInfo.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. - * pname:flags is a combination of bitfield flags indicating usage behavior - for the pool and command buffers allocated from it. Possible values - include: + * pname:flags is a bitmask indicating usage behavior for the pool and + command buffers allocated from it. Bits which can: be set include: + -- include::../enums/VkCommandPoolCreateFlagBits.txt[] @@ -137,7 +136,8 @@ command buffers allocated from the command pool back to the command pool. All command buffers that have been allocated from the command pool are put in the initial state. -pname:flags is of type elink:VkCommandPoolResetFlags, which is defined as: +pname:flags is a bitmask controlling the operation. Bits which which can: be +set include: include::../enums/VkCommandPoolResetFlagBits.txt[] @@ -174,7 +174,7 @@ include::../protos/vkAllocateCommandBuffers.txt[] 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 + 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. @@ -203,7 +203,8 @@ include::../protos/vkResetCommandBuffer.txt[] * pname:commandBuffer is the command buffer to reset. The command buffer can: be in any state, and is put in the initial state. - * pname:flags is of type elink:VkCommandBufferResetFlags: + * pname:flags is a bitmask controlling the reset operation. Bits which + can: be set include: + -- include::../enums/VkCommandBufferResetFlagBits.txt[] @@ -252,8 +253,8 @@ include::../structs/VkCommandBufferBeginInfo.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. - * pname:flags is a combination of bitfield flags indicating usage behavior - for the command buffer. Possible values include: + * pname:flags is a bitmask indicating usage behavior for the command + buffer. Bits which can: be set include: + -- include::../enums/VkCommandBufferUsageFlagBits.txt[] @@ -292,7 +293,7 @@ include::../structs/VkCommandBufferInheritanceInfo.txt[] * pname:framebuffer refers to the sname:VkFramebuffer object that the sname:VkCommandBuffer will be rendering to if it was allocated with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT set. It can: - be sname:VK_NULL_HANDLE if the framebuffer is not known. + be code:VK_NULL_HANDLE if the framebuffer is not known. + [NOTE] .Note @@ -399,10 +400,10 @@ include::../protos/vkQueueSubmit.txt[] which describe the work to submit. All work described by pname:pSubmits must: be submitted to the queue before the command returns. * pname:fence is an optional handle to a fence. If pname:fence is not - sname:VK_NULL_HANDLE, the fence is signaled when execution of all + code:VK_NULL_HANDLE, the fence is signaled when execution of all sname:VkSubmitInfo::pname:pCommandBuffers members of pname:pSubmits is completed. If pname:submitCount is zero but pname:fence is not - sname:VK_NULL_HANDLE, the fence will still be submitted to the queue and + code:VK_NULL_HANDLE, the fence will still be submitted to the queue and will become signaled when all work previously submitted to the queue has completed. @@ -443,8 +444,9 @@ signalled before executing any work, followed by a number of command buffers that will be executed, and finally, zero or more semaphores that will be signaled after command buffer execution completes. Each batch is represented as an instance of the slink:VkSubmitInfo structure stored in an array, the -address of which is passed in pname:pSubmitInfo. The definition of -sname:VkSubmitInfo is: +address of which is passed in pname:pSubmitInfo. + +The sname:VkSubmitInfo structure is defined as: include::../structs/VkSubmitInfo.txt[] diff --git a/doc/specs/vulkan/chapters/copies.txt b/doc/specs/vulkan/chapters/copies.txt index bb2170bf..6fefdd6d 100644 --- a/doc/specs/vulkan/chapters/copies.txt +++ b/doc/specs/vulkan/chapters/copies.txt @@ -72,7 +72,7 @@ the copy regions overlap in memory. include::../validity/protos/vkCmdCopyBuffer.txt[] -Each element of pname:pRegions is a structure defined as: +The sname:VkBufferCopy structure is defined as: include::../structs/VkBufferCopy.txt[] @@ -117,7 +117,7 @@ the same image or alias the same memory. include::../validity/protos/vkCmdCopyImage.txt[] -Each element of pname:pRegions is a structure defined as: +The sname:VkImageCopy structure is defined as: include::../structs/VkImageCopy.txt[] @@ -281,19 +281,19 @@ When copying to or from a depth or stencil aspect, the data in buffer memory uses a layout that is a (mostly) tightly packed representation of the depth or stencil data. Specifically: - * data copied to or from the stencil aspect of any depth/stencil format - is tightly packed with one ename:VK_FORMAT_S8_UINT value per texel. - * data copied to or from the depth aspect of a ename:VK_FORMAT_D16_UNORM - or ename:VK_FORMAT_D16_UNORM_S8_UINT format is tightly packed with one - ename:VK_FORMAT_D16_UNORM value per texel. - * data copied to or from the depth aspect of a ename:VK_FORMAT_D32_SFLOAT - or ename:VK_FORMAT_D32_SFLOAT_S8_UINT format is tightly packed with - one ename:VK_FORMAT_D32_SFLOAT value per texel. - * data copied to or from the depth aspect of a - ename:VK_FORMAT_X8_D24_UNORM_PACK32 or - ename:VK_FORMAT_D24_UNORM_S8_UINT format is packed with one 32-bit word - per texel with the D24 value in the LSBs of the word, and undefined - values in the eight MSBs. + * data copied to or from the stencil aspect of any depth/stencil format + is tightly packed with one ename:VK_FORMAT_S8_UINT value per texel. + * data copied to or from the depth aspect of a ename:VK_FORMAT_D16_UNORM + or ename:VK_FORMAT_D16_UNORM_S8_UINT format is tightly packed with one + ename:VK_FORMAT_D16_UNORM value per texel. + * data copied to or from the depth aspect of a ename:VK_FORMAT_D32_SFLOAT + or ename:VK_FORMAT_D32_SFLOAT_S8_UINT format is tightly packed with + one ename:VK_FORMAT_D32_SFLOAT value per texel. + * data copied to or from the depth aspect of a + ename:VK_FORMAT_X8_D24_UNORM_PACK32 or + ename:VK_FORMAT_D24_UNORM_S8_UINT format is packed with one 32-bit word + per texel with the D24 value in the LSBs of the word, and undefined + values in the eight MSBs. [NOTE] .Note @@ -404,7 +404,7 @@ include::../validity/protos/vkCmdBlitImage.txt[] fname:vkCmdBlitImage mustnot: be used for multisampled source or destination images. Use flink:vkCmdResolveImage for this purpose. -Each element of pname:pRegions is a structure defined as: +The sname:VkImageBlit structure is defined as: include::../structs/VkImageBlit.txt[] @@ -491,7 +491,7 @@ include::../protos/vkCmdResolveImage.txt[] include::../validity/protos/vkCmdResolveImage.txt[] -Each element of pname:pRegions is a structure defined as: +The sname:VkImageResolve structure is defined as: include::../structs/VkImageResolve.txt[] diff --git a/doc/specs/vulkan/chapters/descriptorsets.txt b/doc/specs/vulkan/chapters/descriptorsets.txt index d721c3e8..65ecdd4a 100644 --- a/doc/specs/vulkan/chapters/descriptorsets.txt +++ b/doc/specs/vulkan/chapters/descriptorsets.txt @@ -99,7 +99,7 @@ from within shaders bound to pipelines. Loads from storage images do not use samplers and are unfiltered and do not support coordinate wrapping or clamping. Loads are supported in all shader stages for image formats which report support for the -<> +<> feature bit via flink:vkGetPhysicalDeviceFormatProperties. Stores to storage images are supported in compute shaders for image @@ -108,7 +108,7 @@ ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT feature. Storage images also support atomic operations in compute shaders for image formats which report support for the -<> +<> feature. Load and store operations on storage images can: only be done on images in @@ -578,7 +578,7 @@ include::../structs/VkDescriptorSetLayoutCreateInfo.txt[] include::../validity/structs/VkDescriptorSetLayoutCreateInfo.txt[] -The definition of the sname:VkDescriptorSetLayoutBinding structure is: +The sname:VkDescriptorSetLayoutBinding structure is defined as: include::../structs/VkDescriptorSetLayoutBinding.txt[] @@ -815,7 +815,7 @@ include::../protos/vkCreatePipelineLayout.txt[] include::../validity/protos/vkCreatePipelineLayout.txt[] -The definition of the slink:VkPipelineLayoutCreateInfo structure is: +The slink:VkPipelineLayoutCreateInfo structure is defined as: include::../structs/VkPipelineLayoutCreateInfo.txt[] @@ -843,7 +843,7 @@ pipelines that is expected to outperform memory-backed resource updates. include::../validity/structs/VkPipelineLayoutCreateInfo.txt[] -The definition of sname:VkPushConstantRange is: +The sname:VkPushConstantRange structure is defined as: include::../structs/VkPushConstantRange.txt[] @@ -1114,7 +1114,7 @@ allocated from the pool mustnot: be individually freed back to the pool, i.e. only fname:vkAllocateDescriptorSets and fname:vkResetDescriptorPool are allowed. -The definition of the sname:VkDescriptorPoolSize structure is: +The sname:VkDescriptorPoolSize structure is defined as: include::../structs/VkDescriptorPoolSize.txt[] @@ -1149,7 +1149,7 @@ include::../protos/vkAllocateDescriptorSets.txt[] allocation. * pname:pDescriptorSets is a pointer to an array of sname:VkDescriptorSet handles in which the resulting descriptor set objects are returned. The - array must be at least the length specified by the + array must: be at least the length specified by the pname:descriptorSetCount member of pname:pAllocateInfo. include::../validity/protos/vkAllocateDescriptorSets.txt[] @@ -1191,7 +1191,7 @@ include::../protos/vkFreeDescriptorSets.txt[] sets were allocated. * pname:descriptorSetCount is the number of elements in the pname:pDescriptorSets array. - * pname:pDescriptorSets is an array of handles to slink:VkDescriptorSet + * pname:pDescriptorSets is an array of handles to sname:VkDescriptorSet objects. All elements of pname:pDescriptorSets must: have been allocated from pname:descriptorPool. @@ -1219,7 +1219,7 @@ include::../protos/vkResetDescriptorPool.txt[] * pname:device is the logical device that owns the descriptor pool. * pname:descriptorPool is the descriptor pool to be reset. - * pname:flags is currently unused and must be zero. + * pname:flags is currently unused and must: be zero. include::../validity/protos/vkResetDescriptorPool.txt[] @@ -1259,7 +1259,7 @@ Each element in the pname:pDescriptorWrites array describes an operation updating the descriptor set using descriptors for resources specified in the structure. -The definition of sname:VkWriteDescriptorSet is: +The sname:VkWriteDescriptorSet structure is defined as: include::../structs/VkWriteDescriptorSet.txt[] @@ -1297,10 +1297,11 @@ structure, as specified below. 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, the pname:pBufferInfo array -will be used to update the descriptors, and other arrays will be ignored. -Each element of pname:pBufferInfo is of type sname:VkDescriptorBufferInfo -and is defined as: +ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the elements of the +pname:pBufferInfo array of sname:VkDescriptorBufferInfo structures will be +used to update the descriptors, and other arrays will be ignored. + +The sname:VkDescriptorBufferInfo structure is defined as: include::../structs/VkDescriptorBufferInfo.txt[] @@ -1329,9 +1330,10 @@ 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 elements of the -pname:pImageInfo array will be used to update the descriptors, and other -arrays will be ignored. Each element of pname:pImageInfo is of type -sname:VkDescriptorImageInfo and is defined as: +pname:pImageInfo array of sname:VkDescriptorImageInfo structures will be +used to update the descriptors, and other arrays will be ignored. + +The sname:VkDescriptorImageInfo structure is defined as: include::../structs/VkDescriptorImageInfo.txt[] @@ -1369,7 +1371,9 @@ immutable samplers or must: all not use immutable samplers. Each element in the pname:pDescriptorCopies array is a slink:VkCopyDescriptorSet structure describing an operation copying -descriptors between sets. The definition of sname:VkCopyDescriptorSet is: +descriptors between sets. + +The sname:VkCopyDescriptorSet structure is defined as: include::../structs/VkCopyDescriptorSet.txt[] @@ -1408,8 +1412,8 @@ include::../protos/vkCmdBindDescriptorSets.txt[] bound. * pname:descriptorSetCount is the number of elements in the pname:pDescriptorSets array. - * pname:pDescriptorSets is a pointer to an array of slink:VkDescriptorSet - structures describing the descriptor sets to write to. + * pname:pDescriptorSets is an array of handles to sname:VkDescriptorSet + objects describing the descriptor sets to write to. * pname:dynamicOffsetCount is the number of dynamic offsets in the pname:pDynamicOffsets array. * pname:pDynamicOffsets is a pointer to an array of basetype:uint32_t diff --git a/doc/specs/vulkan/chapters/devsandqueues.txt b/doc/specs/vulkan/chapters/devsandqueues.txt index 968f2278..4d40bc51 100644 --- a/doc/specs/vulkan/chapters/devsandqueues.txt +++ b/doc/specs/vulkan/chapters/devsandqueues.txt @@ -26,7 +26,7 @@ include::../protos/vkEnumeratePhysicalDevices.txt[] * pname:pPhysicalDeviceCount is a pointer to an integer related to the number of physical devices available or queried, as described below. * pname:pPhysicalDevices is either `NULL` or a pointer to an - array of sname:VkPhysicalDevice structures. + array of sname:VkPhysicalDevice handles. If pname:pPhysicalDevices is `NULL`, then the number of physical devices available is returned in pname:pPhysicalDeviceCount. Otherwise, @@ -51,17 +51,15 @@ include::../protos/vkGetPhysicalDeviceProperties.txt[] * pname:physicalDevice is the handle to the physical device whose properties will be queried. * pname:pProperties points to an instance of the - sname:VkPhysicalDeviceProperties structure, that will be filled with + slink:VkPhysicalDeviceProperties structure, that will be filled with returned information. include::../validity/protos/vkGetPhysicalDeviceProperties.txt[] -The definition of sname:VkPhysicalDeviceProperties is: +The sname:VkPhysicalDeviceProperties structure is defined as: include::../structs/VkPhysicalDeviceProperties.txt[] -The members of sname:VkPhysicalDeviceProperties have the following meanings: - * pname:apiVersion is the version of {apiname} supported by the device, encoded as described in the <> section. @@ -77,19 +75,19 @@ The members of sname:VkPhysicalDeviceProperties have the following meanings: * pname:pipelineCacheUUID is an array of size ename:VK_UUID_SIZE, containing 8-bit values that represent a universally unique identifier for the device. - * pname:limits is the sname:VkPhysicalDeviceLimits structure which + * pname:limits is the slink:VkPhysicalDeviceLimits structure which specifies device-specific limits of the physical device. See <> for details. - * pname:sparseProperties is the sname:VkPhysicalDeviceSparseProperties + * pname:sparseProperties is the slink:VkPhysicalDeviceSparseProperties structure which specifies various sparse related properties of the - physical device. See <> for - details. + physical device. See <> + for details. include::../validity/structs/VkPhysicalDeviceProperties.txt[] The pname:vendorID and pname:deviceID fields are provided to allow applications to adapt to device characteristics that are not -adequately exposed by other Vulkan queries. These may include +adequately exposed by other Vulkan queries. These may: include performance profiles, hardware errata, or other characteristics. In PCI-based implementations, the low sixteen bits of pname:vendorID and pname:deviceID must: contain (respectively) the PCI vendor and @@ -140,7 +138,7 @@ include::../enums/VkPhysicalDeviceType.txt[] The physical device type is advertised for informational purposes only, and does not directly affect the operation of the system. However, the device -type may correlate with other advertised properties or capabilities of the +type may: correlate with other advertised properties or capabilities of the system, such as how many memory heaps there are. Properties of queues available on a physical device are queried by calling: @@ -166,12 +164,10 @@ written. include::../validity/protos/vkGetPhysicalDeviceQueueFamilyProperties.txt[] -The definition of sname:VkQueueFamilyProperties is: +The sname:VkQueueFamilyProperties structure is defined as: include::../structs/VkQueueFamilyProperties.txt[] -The members of sname:VkQueueFamilyProperties have the following meanings: - * pname:queueFlags contains flags indicating the capabilities of the queues in this queue family. * pname:queueCount is the unsigned integer count of queues in this @@ -231,10 +227,10 @@ Possible values of pname:minImageTransferGranularity are: queues. In this case, the following restrictions apply to all offset and extent parameters of image transfer operations: - ** The pname:x, pname:y, and pname:z members of a sname:VkOffset3D + ** The pname:x, pname:y, and pname:z members of a slink:VkOffset3D parameter must: always be zero. ** The pname:width, pname:height, and pname:depth members of a - sname:VkExtent3D parameter must: always match the width, height, and + slink:VkExtent3D parameter must: always match the width, height, and depth of the image subresource corresponding to the parameter, respectively. @@ -242,18 +238,18 @@ Possible values of pname:minImageTransferGranularity are: and latexmath:[$Az$] are all integer powers of two. In this case the following restrictions apply to all image transfer operations: - ** pname:x, pname:y, and pname:z of a sname:VkOffset3D parameter must: be + ** pname:x, pname:y, and pname:z of a slink:VkOffset3D parameter must: be integer multiples of latexmath:[$Ax$], latexmath:[$Ay$], and latexmath:[$Az$], respectively. - ** pname:width of a sname:VkExtent3D parameter must: be an integer + ** pname:width of a slink:VkExtent3D parameter must: be an integer multiple of latexmath:[$Ax$], or else latexmath:[$(x + width)$] must: equal the width of the image subresource corresponding to the parameter. - ** pname:height of a sname:VkExtent3D parameter must: be an integer + ** pname:height of a slink:VkExtent3D parameter must: be an integer multiple of latexmath:[$Ay$], or else latexmath:[$(y + height)$] must: equal the height of the image subresource corresponding to the parameter. - ** pname:depth of a sname:VkExtent3D parameter must: be an integer + ** pname:depth of a slink:VkExtent3D parameter must: be an integer multiple of latexmath:[$Az$], or else latexmath:[$(z + depth)$] must: equal the depth of the image subresource corresponding to the parameter. @@ -309,7 +305,7 @@ include::../protos/vkCreateDevice.txt[] call to fname:vkEnumeratePhysicalDevices (see <>). - * pname:pCreateInfo is a pointer to a sname:VkDeviceCreateInfo structure + * pname:pCreateInfo is a pointer to a slink:VkDeviceCreateInfo structure containing information about how to create the device. * pname:pAllocator controls host memory allocation as described in the <> chapter. @@ -318,12 +314,10 @@ include::../protos/vkCreateDevice.txt[] include::../validity/protos/vkCreateDevice.txt[] -The definition of sname:VkDeviceCreateInfo is: +The sname:VkDeviceCreateInfo structure is defined as: include::../structs/VkDeviceCreateInfo.txt[] -The members of sname:VkDeviceCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -332,7 +326,7 @@ The members of sname:VkDeviceCreateInfo have the following meanings: <> section below for further details. * pname:pQueueCreateInfos is a pointer to an array of - sname:VkDeviceQueueCreateInfo structures describing the queues that are + slink:VkDeviceQueueCreateInfo structures describing the queues that are requested to be created along with the logical device. Refer to the <> section below for further details. @@ -346,10 +340,10 @@ The members of sname:VkDeviceCreateInfo have the following meanings: * pname:ppEnabledExtensionNames is a pointer to an array of pname:enabledExtensionCount null-terminated UTF-8 strings containing the names of extensions to enable for the created device. See the - <> - chapter for further details. + <> section for further + details. * pname:pEnabledFeatures is `NULL` or a pointer to a - sname:VkPhysicalDeviceFeatures structure that contains boolean + slink:VkPhysicalDeviceFeatures structure that contains boolean indicators of all the features to be enabled. Refer to the <> section for further details. @@ -440,12 +434,12 @@ or that the error is recoverable. When a device is lost, its child objects are not implicitly destroyed and their handles are still valid. Those objects must: still be destroyed before -their parents or the device can: be destroyed (see -<>). The host address space corresponding to -device memory mapped using flink:vkMapMemory is still valid, and host memory -accesses to these mapped regions are still valid, but the contents are -undefined. It is still legal to call any API command on the device and child -objects. +their parents or the device can: be destroyed (see the +<> section). The host +address space corresponding to device memory mapped using flink:vkMapMemory +is still valid, and host memory accesses to these mapped regions are still +valid, but the contents are undefined. It is still legal to call any API +command on the device and child objects. Once a device is lost, command execution may: fail, and commands that return a basetype:VkResult may: return ename:VK_ERROR_DEVICE_LOST. Commands that do @@ -544,14 +538,13 @@ device. This is described in the following section. Creating a logical device also creates the queues associated with that device. The queues to create are described by a set of -sname:VkDeviceQueueCreateInfo structures that are passed to -flink:vkCreateDevice in pname:pQueueCreateInfos. The definition of -sname:VkDeviceQueueCreateInfo is: +slink:VkDeviceQueueCreateInfo structures that are passed to +flink:vkCreateDevice in pname:pQueueCreateInfos. + +The sname:VkDeviceQueueCreateInfo structure is defined as: include::../structs/VkDeviceQueueCreateInfo.txt[] -The members of sname:VkDeviceQueueCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -597,7 +590,7 @@ sname:VkQueue handle from as described in the previous section. When creating a sname:VkCommandPool object (see <>), a queue family index is specified -in the sname:VkCommandPoolCreateInfo structure. Command buffers from this +in the slink:VkCommandPoolCreateInfo structure. Command buffers from this pool can: only be submitted on queues corresponding to this queue family. When creating sname:VkImage (see <>) and @@ -617,7 +610,7 @@ Sharing>> section for details. === Queue Priority Each queue is assigned a priority, as set in the -sname:VkDeviceQueueCreateInfo structures when creating the device. The +slink:VkDeviceQueueCreateInfo structures when creating the device. The priority of each queue is a normalized floating point value between 0.0 and 1.0, which is then translated to a discrete priority level by the implementation. Higher values indicate a higher priority, with 0.0 being the @@ -663,7 +656,7 @@ chapter. === Sparse Memory Binding In {apiname} it is possible to sparsely bind memory to buffers and -images as described in the <> chapter. Sparse +images as described in the <> chapter. Sparse memory binding is a queue operation. A queue whose flags include the ename:VK_QUEUE_SPARSE_BINDING_BIT must: be able to support the mapping of a virtual address to a physical address on the device. This diff --git a/doc/specs/vulkan/chapters/dispatch.txt b/doc/specs/vulkan/chapters/dispatch.txt index 0a21e543..40668297 100644 --- a/doc/specs/vulkan/chapters/dispatch.txt +++ b/doc/specs/vulkan/chapters/dispatch.txt @@ -44,7 +44,7 @@ at pname:offset. include::../validity/protos/vkCmdDispatchIndirect.txt[] -The definition of sname:VkDispatchIndirectCommand is: +The sname:VkDispatchIndirectCommand structure is defined as: include::../structs/VkDispatchIndirectCommand.txt[] diff --git a/doc/specs/vulkan/chapters/drawing.txt b/doc/specs/vulkan/chapters/drawing.txt index 3ef10048..0abc6ea2 100644 --- a/doc/specs/vulkan/chapters/drawing.txt +++ b/doc/specs/vulkan/chapters/drawing.txt @@ -336,8 +336,8 @@ ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, or ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY is rendered in one of several ways, such as outlining its border or filling its interior. The order of vertices in such a primitive is significant during -<> and <>. +<> and +<>. === Programmable Primitive Shading @@ -481,7 +481,7 @@ less than or equal to one, pname:stride is ignored. include::../validity/protos/vkCmdDrawIndirect.txt[] -The definition of sname:VkDrawIndirectCommand is: +The sname:VkDrawIndirectCommand structure is defined as: include::../structs/VkDrawIndirectCommand.txt[] @@ -513,7 +513,7 @@ pname:drawCount is less than or equal to one, pname:stride is ignored. include::../validity/protos/vkCmdDrawIndexedIndirect.txt[] -The definition of sname:VkDrawIndexedIndirectCommand is +The sname:VkDrawIndexedIndirectCommand structure is defined as: include::../structs/VkDrawIndexedIndirectCommand.txt[] diff --git a/doc/specs/vulkan/chapters/extensions.txt b/doc/specs/vulkan/chapters/extensions.txt index 9c5d6e4e..9e564ab3 100644 --- a/doc/specs/vulkan/chapters/extensions.txt +++ b/doc/specs/vulkan/chapters/extensions.txt @@ -45,7 +45,7 @@ include::../validity/protos/vkEnumerateInstanceLayerProperties.txt[] To enable a instance layer, the name of the layer should be added to the pname:ppEnabledLayerNames member of slink:VkInstanceCreateInfo when creating -a slink:VkInstance. +a sname:VkInstance. To query the layers available to a given physical device, call: @@ -61,7 +61,7 @@ include::../validity/protos/vkEnumerateDeviceLayerProperties.txt[] To enable a device layer, the name of the layer should be added to the pname:ppEnabledLayerNames member of slink:VkDeviceCreateInfo when creating -a slink:VkDevice. +a sname:VkDevice. For both flink:vkEnumerateInstanceLayerProperties and flink:vkEnumerateDeviceLayerProperties, if pname:pProperties is `NULL`, then @@ -76,7 +76,7 @@ number of layers available, ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to indicate that not all the available layer properties were returned. -The definition of sname:VkLayerProperties is: +The sname:VkLayerProperties structure is defined as: include::../structs/VkLayerProperties.txt[] @@ -104,6 +104,7 @@ and explicitly enabled layers differ only in the way they are enabled. Explicitly enabling a layer that is implicitly enabled has no additional effect. + [[extended-functionality-extensions]] == Extensions @@ -137,7 +138,7 @@ 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 -creating a slink:VkInstance. +creating a sname:VkInstance. To query the extensions available to a given physical device, call: @@ -160,7 +161,7 @@ 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 -creating a slink:VkDevice. +creating a sname:VkDevice. For both flink:vkEnumerateInstanceExtensionProperties and flink:vkEnumerateDeviceExtensionProperties, if pname:pProperties is `NULL`, @@ -175,7 +176,7 @@ pname:pPropertyCount is smaller than the number of extensions available, ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS, to indicate that not all the available properties were returned. -The definition of sname:VkExtensionProperties is: +The sname:VkExtensionProperties structure is defined as: include::../structs/VkExtensionProperties.txt[] diff --git a/doc/specs/vulkan/chapters/features.txt b/doc/specs/vulkan/chapters/features.txt index 3c306ed8..55e0968b 100644 --- a/doc/specs/vulkan/chapters/features.txt +++ b/doc/specs/vulkan/chapters/features.txt @@ -77,7 +77,7 @@ performance cost. Application writers should: carefully consider the implications of enabling all supported features. ==== -The definition of sname:VkPhysicalDeviceFeatures is: +The sname:VkPhysicalDeviceFeatures structure is defined as: include::../structs/VkPhysicalDeviceFeatures.txt[] @@ -112,7 +112,7 @@ following features: * [[features-features-imageCubeArray]] pname:imageCubeArray indicates whether image views with a elink:VkImageViewType of ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY can: be created, and that the - corresponding *SampledCubeArray* and *ImageCubeArray* SPIR-V + corresponding code:SampledCubeArray and code:ImageCubeArray SPIR-V capabilities can: be used in shader code. * [[features-features-independentBlend]] pname:independentBlend indicates whether the sname:VkPipelineColorBlendAttachmentState settings are @@ -556,7 +556,7 @@ check for the supported properties of individual formats. the same multisample rate. This has no effect in situations where a subpass uses any attachments. * [[features-features-inheritedQueries]] pname:inheritedQueries indicates - whether a secondary command buffer may be executed while a query is + whether a secondary command buffer may: be executed while a query is active. include::../validity/structs/VkPhysicalDeviceFeatures.txt[] @@ -582,7 +582,7 @@ device. These are available in the pname:limits member of the slink:VkPhysicalDeviceProperties structure which is returned from flink:vkGetPhysicalDeviceProperties. -The definition of sname:VkPhysicalDeviceLimits is: +The sname:VkPhysicalDeviceLimits structure is defined as: include::../structs/VkPhysicalDeviceLimits.txt[] @@ -1212,8 +1212,8 @@ range. // End of list 1:: - For all bitmasks of type elink:VkSampleCountFlags above, the bits which - can: be set include: + For all bitmasks of type ename:VkSampleCountFlags above, possible + values include: + -- include::../enums/VkSampleCountFlagBits.txt[] @@ -3147,7 +3147,7 @@ include::../validity/structs/VkFormatProperties.txt[] Implementations must: support at least the following set of features on the listed formats. For images, these features must: -be supported for every slink:VkImageType (including arrayed and cube +be supported for every elink:VkImageType (including arrayed and cube variants) unless otherwise noted. These features are supported on existing formats without needing to advertise an extension or needing to explicitly enable them. Support for additional functionality @@ -3481,7 +3481,7 @@ ename:VK_FORMAT_D24_UNORM_S8_UINT and ename:VK_FORMAT_D32_SFLOAT_S8_UINT. <<< [[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 +.Mandatory format support: BC compressed formats with elink: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"] |========================================= 14+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT @@ -3525,7 +3525,7 @@ one of: this table, <>, or <<< [[features-formats-mandatory-features-etc]] -.Mandatory format support: ETC2 and EAC compressed formats with slink:VkImageType ename:VK_IMAGE_TYPE_2D +.Mandatory format support: ETC2 and EAC compressed formats with elink:VkImageType ename:VK_IMAGE_TYPE_2D [width="100%",cols="62,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |========================================= 14+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT @@ -3563,7 +3563,7 @@ one of: this table, <>, or <<< [[features-formats-mandatory-features-astc]] -.Mandatory format support: ASTC LDR compressed formats with slink:VkImageType ename:VK_IMAGE_TYPE_2D +.Mandatory format support: ASTC LDR compressed formats with elink:VkImageType ename:VK_IMAGE_TYPE_2D [width="100%",cols="62,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |========================================= 14+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT @@ -3651,19 +3651,23 @@ flink:vkCreateImage. include::../validity/protos/vkGetPhysicalDeviceImageFormatProperties.txt[] -The definition of the sname:VkImageFormatProperties structure is: +The sname:VkImageFormatProperties structure is defined as: include::../structs/VkImageFormatProperties.txt[] * pname:maxExtent are the maximum image dimensions. See the - <> - table below for how these values are constrained by pname:type. + <> section below for + how these values are constrained by pname:type. * pname:maxMipLevels is the maximum number of mipmap levels. pname:maxMipLevels must: either be equal to 1 (valid only if - pname:tiling is ename:VK_IMAGE_TILING_LINEAR) or be greater than or - equal to the latexmath:[$log_2$] of the pname:maxImageDimension1D, - pname:maxImageDimension2D, or pname:maxImageDimension3D (depending on - pname:type) members of slink:VkPhysicalDeviceLimits. + pname:tiling is ename:VK_IMAGE_TILING_LINEAR) or be + equal to + latexmath:[$\left\lceil\log_2(\max( + \mathit{width},\mathit{height},\mathit{depth})) + \right\rceil + 1$] + where latexmath:[$\mathit{width}$], latexmath:[$\mathit{height}$], and + latexmath:[$\mathit{depth}$] are taken from the corresponding members of + pname:maxExtent. * pname:maxArrayLayers is the maximum number of array layers. pname:maxArrayLayers must: either be equal to 1 or be greater than or equal to the pname:maxImageArrayLayers member of @@ -3685,7 +3689,7 @@ include::../structs/VkImageFormatProperties.txt[] pname:storageImageSampleCounts. For depth/stencil images with both a depth and stencil component, both the depth and stencil limits must: be satisfied. - * pname:maxResourceSize is the maximum total image size in bytes, + * pname:maxResourceSize is an upper bound on the total image size in bytes, inclusive of all image subresources. Implementations may: have an address space limit on total size of a resource, which is advertised by this property. pname:maxResourceSize must: be at least 2^31^. @@ -3696,7 +3700,9 @@ include::../structs/VkImageFormatProperties.txt[] There is no mechanism to query the size of an image before creating it, to compare that size against pname:maxResourceSize. If an application attempts to create an image that exceeds this limit, the creation will fail or the -image will be invalid. +image will be invalid. While the advertised limit must: be at least 2^31^, +it may: not be possible to create an image that approaches that size, +particularly for ename:VK_IMAGE_TYPE_1D. ==== If the combination of parameters to @@ -3706,25 +3712,6 @@ sname:VkImageFormatProperties will be filled with zero. include::../validity/structs/VkImageFormatProperties.txt[] -[[features-extentperimagetype]] -.Allowed extent values based on imageType -[cols="1a,1a", options="header"] -|==== -| VkImageType | maxExtent values -| VK_IMAGE_TYPE_1D | -width >= 1 + -height = 1 + -depth = 1 + -| VK_IMAGE_TYPE_2D | -width >= 1 + -height >= 1 + -depth = 1 + -| VK_IMAGE_TYPE_3D | -width >= 1 + -height >= 1 + -depth >= 1 + -|==== - If pname:format is not a supported image format, or if the combination of pname:format, pname:type, pname:tiling, pname:usage, and pname:flags is not supported for images, then fname:vkGetPhysicalDeviceImageFormatProperties @@ -3732,10 +3719,37 @@ returns ename:VK_ERROR_FORMAT_NOT_SUPPORTED. The limitations on an image format that are reported by fname:vkGetPhysicalDeviceImageFormatProperties have the following property: -if code:usage1 and code:usage2 of type elink:VkImageUsageFlags are such that +if code:usage1 and code:usage2 of type ename:VkImageUsageFlags are such that the bits set in code:usage1 are a subset of the bits set in code:usage2, and -code:flags1 and code:flags2 of type elink:VkImageCreateFlags are such that +code:flags1 and code:flags2 of type ename:VkImageCreateFlags are such that the bits set in code:flags1 are a subset of the bits set in code:flags2, then the limitations for code:usage1 and code:flags1 must: be no more strict than the limitations for code:usage2 and code:flags2, for all values of pname:format, pname:type, and pname:tiling. + +[[features-extentperimagetype]] +=== Allowed Extent Values Based On Image Type + +For ename:VK_IMAGE_TYPE_1D: + + * pname:maxExtent.width >= + slink:VkPhysicalDeviceLimits::pname:maxImageDimension1D + * pname:maxExtent.height = 1 + * pname:maxExtent.depth = 1 + +For ename:VK_IMAGE_TYPE_2D: + + * pname:maxExtent.width >= + slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D + * pname:maxExtent.height >= + slink:VkPhysicalDeviceLimits::pname:maxImageDimension2D + * pname:maxExtent.depth = 1 + +For ename:VK_IMAGE_TYPE_3D: + + * pname:maxExtent.width >= + slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D + * pname:maxExtent.height >= + slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D + * pname:maxExtent.depth >= + slink:VkPhysicalDeviceLimits::pname:maxImageDimension3D diff --git a/doc/specs/vulkan/chapters/fragops.txt b/doc/specs/vulkan/chapters/fragops.txt index 8c0a7113..2b833451 100644 --- a/doc/specs/vulkan/chapters/fragops.txt +++ b/doc/specs/vulkan/chapters/fragops.txt @@ -140,10 +140,20 @@ latexmath:[$(x_f,y_f)$] and depth latexmath:[$z$], as described in fragment processing, which adds associated data as described in <>. The fragment is then further modified, and possibly discarded by the late per-fragment operations described in this chapter. -These operations are diagrammed in figure <>, in the order in which they are performed. Finally, if the -fragment was not discarded, it is used to update the framebuffer at the -fragment's framebuffer coordinates for any samples that remain covered. +Finally, if the fragment was not discarded, it is used to update the +framebuffer at the fragment's framebuffer coordinates for any samples that +remain covered. + +ifdef::editing-notes[] +[NOTE] +.editing-note +================== +There used to be a sentence of form "These operations are diagrammed in +figure ((fig-fragops,Fragment Operations)), in the order in which they are +performed" following "described in this chapter." above, but the referred +figure doesn't yet exist. +================== +endif::editing-notes[] The depth bounds test, stencil test, and depth test are performed for each pixel sample, rather than just once for each fragment. Stencil and depth @@ -186,9 +196,9 @@ of the slink:VkPipelineMultisampleStateCreateInfo structure. All alpha values in this section refer only to the alpha component of the fragment shader output that has a code:Location and code:Index decoration of -zero (see <>). -If that shader output has an integer or unsigned integer type, then these -operations are skipped. +zero (see the <> +section). If that shader output has an integer or unsigned integer type, +then these operations are skipped. If pname:alphaToCoverageEnable is enabled, a temporary coverage value is generated where each bit is determined by the fragment's alpha value. The @@ -213,19 +223,19 @@ Next, if pname:alphaToOneEnable is enabled, each alpha value is replaced by the maximum representable alpha value for fixed-point color buffers, or by 1.0 for floating-point buffers. Otherwise, the alpha values are not changed. + [[fragops-ds-state]] == Depth and Stencil Operations Pipeline state controlling the <>, <>, and <> is -specified through the members of -sname:VkPipelineDepthStencilStateCreateInfo: +specified through the members of the +sname:VkPipelineDepthStencilStateCreateInfo structure. + +The sname:VkPipelineDepthStencilStateCreateInfo structure is defined as: include::../structs/VkPipelineDepthStencilStateCreateInfo.txt[] -The members of sname:VkPipelineDepthStencilStateCreateInfo structure are as -follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -297,12 +307,10 @@ The stencil test is controlled with the pname:front and pname:back members of sname:VkPipelineDepthStencilStateCreateInfo which are of type sname:VkStencilOpState. -The definition of sname:VkStencilOpState is: +The sname:VkStencilOpState structure is defined as: include::../structs/VkStencilOpState.txt[] -The members of sname:VkStencilOpState structure are as follows: - * pname:failOp is the action performed on samples that fail the stencil test. * pname:passOp is the action performed on samples that pass both the depth @@ -328,7 +336,7 @@ back-facing polygon primitives. For the purposes of stencil testing, a primitive is still considered a polygon even if the polygon is to be rasterized as points or lines due to the current elink:VkPolygonMode. Whether a polygon is front- or back-facing is determined in the same manner -used for face culling (see <>). The operation of the stencil test is also affected by the @@ -349,7 +357,7 @@ include::../protos/vkCmdSetStencilCompareMask.txt[] * pname:commandBuffer is the command buffer into which the command will be recorded. * pname:faceMask is a bitmask specifying the set of stencil state for - which to update the compare mask, and may include the bits: + which to update the compare mask. Bits which can: be set include: + -- include::../enums/VkStencilFaceFlagBits.txt[] @@ -426,7 +434,7 @@ include::../enums/VkCompareOp.txt[] As described earlier, the pname:failOp, pname:passOp, and pname:depthFailOp members of pname:VkStencilOpState indicate what happens to the stored stencil value if this or certain subsequent tests fail or pass. Each enum is -of type ename:VkStencilOp, which is defined as: +of type elink:VkStencilOp, which is defined as: include::../enums/VkStencilOp.txt[] diff --git a/doc/specs/vulkan/chapters/framebuffer.txt b/doc/specs/vulkan/chapters/framebuffer.txt index 3cd7cc3d..fd2713b9 100644 --- a/doc/specs/vulkan/chapters/framebuffer.txt +++ b/doc/specs/vulkan/chapters/framebuffer.txt @@ -34,13 +34,12 @@ Blending applies only to fixed-point and floating-point color attachments. If the color attachment has an integer format, blending is not applied. The pipeline blend state is included in the -sname:VkPipelineColorBlendStateCreateInfo struct during graphics pipeline +sname:VkPipelineColorBlendStateCreateInfo structure during graphics pipeline creation: -include::../structs/VkPipelineColorBlendStateCreateInfo.txt[] +The sname:VkPipelineColorBlendStateCreateInfo structure is defined as: -The members of the sname:VkPipelineColorBlendStateCreateInfo structure are -as follows: +include::../structs/VkPipelineColorBlendStateCreateInfo.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. @@ -60,19 +59,17 @@ as follows: include::../validity/structs/VkPipelineColorBlendStateCreateInfo.txt[] -The elements of the pname:pAttachments array specify per-target blending -state, and are of type: +Each element of the pname:pAttachments array is a +slink:VkPipelineColorBlendAttachmentState structure specifying per-target +blending state for each individual color attachment. If the +<> feature is not +enabled on the device, all slink:VkPipelineColorBlendAttachmentState +elements in the pname:pAttachments array must: be identical. + +The sname:VkPipelineColorBlendAttachmentState structure is defined as: include::../structs/VkPipelineColorBlendAttachmentState.txt[] -Blending of each individual color attachment is controlled by the -corresponding element of the pname:pAttachments array. If the -<> feature is -not enabled on the device, all sname:VkPipelineColorBlendAttachmentState -elements in the pname:pAttachments array must: be identical. The members of -the sname:VkPipelineColorBlendAttachmentState struct have the following -meanings: - * pname:blendEnable controls whether blending is enabled for the corresponding color attachment. If blending is not enabled, the source fragment's color for that attachment is passed through unmodified. diff --git a/doc/specs/vulkan/chapters/fundamentals.txt b/doc/specs/vulkan/chapters/fundamentals.txt index 6b067bd8..5c7bf1f9 100644 --- a/doc/specs/vulkan/chapters/fundamentals.txt +++ b/doc/specs/vulkan/chapters/fundamentals.txt @@ -59,9 +59,9 @@ This section outlines the execution model of a {apiname} system. {apiname} exposes one or more _devices_, each of which exposes one or more _queues_ which may: process work -asynchronously to one another. The queues supported by a device are divided -into _families_, each of which supports one or more types of functionality -and may: +asynchronously to one another. The set of queues supported by a device is +partitioned into _families_. Each family supports one or more types of +functionality and may: contain multiple queues with similar characteristics. Queues within a single family are considered _compatible_ with one another, and work produced for a family of queues can: be executed on any queue within that family. This @@ -71,8 +71,8 @@ graphics, compute, transfer, and sparse memory management. [NOTE] .Note ==== -It is possible that a single device may: report multiple similar queue -families rather than, or as well as reporting multiple members of one or +A single device may: report multiple similar queue +families rather than, or as well as, reporting multiple members of one or more of those families. This indicates that while members of those families have similar capabilities, they are _not_ directly compatible with one another. @@ -186,7 +186,7 @@ commands depends on the first set of commands. These dependencies enforce that both the execution of certain <> in the later set occur after the execution of certain stages in the source set, and that the -effects of <> performed by +effects of <> performed by certain pipeline stages occur in order and are visible to each other. When not enforced by an explicit dependency or otherwise forbidden by the specification, action commands may: overlap execution or execute out of @@ -293,7 +293,7 @@ the commands that consume it have returned. The following object types are consumed when they are passed into a {apiname} command and not further accessed by the objects they are used to -create. They can be destroyed at any time they are not in use by an API +create. They can: be destroyed at any time they are not in use by an API command: * sname:VkShaderModule @@ -304,7 +304,7 @@ sname:VkDescriptorSetLayout objects may: be accessed by commands that operate on descriptor sets allocated using that layout, and those descriptor sets mustnot: be updated with flink:vkUpdateDescriptorSets after the descriptor set layout has been destroyed. Otherwise, descriptor set layouts -can be destroyed any time they are not in use by an API command. +can: be destroyed any time they are not in use by an API command. The application mustnot: destroy any other type of {apiname} object until all uses of that object by the device (such as via command buffer execution) @@ -433,7 +433,7 @@ ftext:vkGet*. Commands are recorded into a command buffer by calling API commands of the form ftext:vkCmd*. Each such command may: have different restrictions on -where it can be used: in a primary and/or secondary command buffer, inside +where it can: be used: in a primary and/or secondary command buffer, inside and/or outside a render pass, and in one or more of the supported queue types. These restrictions are documented together with the definition of each such command. @@ -556,10 +556,10 @@ object handle, unless otherwise specified. An object handle is valid if: * Any objects used by that object, either as part of creation or execution, must: also be valid. -The reserved handle sname:VK_NULL_HANDLE can: be passed in place of valid +The reserved handle code:VK_NULL_HANDLE can: be passed in place of valid object handles when _explicitly called out in the specification_. Any command that creates an object successfully mustnot: return -sname:VK_NULL_HANDLE. It is valid to pass sname:VK_NULL_HANDLE to any +code:VK_NULL_HANDLE. It is valid to pass code:VK_NULL_HANDLE to any ftext:vkDestroy* or ftext:vkFree* command, which will silently ignore these values. @@ -584,7 +584,7 @@ flags. A bit flag is valid if: * The flag is defined as part of the bits type, where the bits type is obtained by taking the flag type and replacing the trailing etext:Flags with etext:FlagBits. For example, a flag value of type - elink:VkColorComponentFlags must: contain only values selected from the + ename:VkColorComponentFlags must: contain only values selected from the bit flags in elink:VkColorComponentFlagBits. * The flag is allowed in the context in which it is being used. For example, in some cases, certain bit flags or combinations of bit flags @@ -606,11 +606,16 @@ use by the loader, and don't have corresponding {apiname} structures in this specification. Any parameter that is a structure containing a basetype:void* ptext:pNext -member must: have a value of ptext:pNext that is either `NULL`, or points to -a valid structure that is defined by an enabled extension. Extension -structures are not described in the base {apiname} specification, but either -in layered specifications incorporating those extensions, or in separate -vendor-provided documents. +member must: have a value of ptext:pNext that is either `NULL`, or points to a +valid structure defined by an extension. If that extension is supported by +the implementation, then it must: be enabled. +Any component of the implementation (the loader, any enabled layers, and +drivers) must: ignore extension structures with pname:sType values defined +by extensions not supported by that component. + +Extension structures are not described in the base {apiname} specification, +but either in layered specifications incorporating those extensions, +or in separate vendor-provided documents. The above rules also apply recursively to members of structures provided as input to a command, either as a direct argument to the command, or @@ -734,11 +739,11 @@ ifdef::editing-notes[] .editing-note ==== (Jon, Bug 14966) This is a rat's nest of complexity, both in terms of -describing/enumerating places such computation may take place (other than -``not shader code'') and in how implementations may do it. We have consciously +describing/enumerating places such computation may: take place (other than +``not shader code'') and in how implementations may: do it. We have consciously deferred the resolution of this issue to post-1.0, and in the meantime, the following language inherited from the OpenGL Specification is inserted as a -placeholder. Hopefully it can be tightened up considerably. +placeholder. Hopefully it can: be tightened up considerably. ==== endif::editing-notes[] diff --git a/doc/specs/vulkan/chapters/fxvertex.txt b/doc/specs/vulkan/chapters/fxvertex.txt index 8157a0ea..651acab2 100644 --- a/doc/specs/vulkan/chapters/fxvertex.txt +++ b/doc/specs/vulkan/chapters/fxvertex.txt @@ -258,15 +258,14 @@ will result in an invalid pipeline. == Vertex Input Description Applications specify vertex input attribute and vertex input binding -descriptions as part of graphics pipeline creation, via the -pname:pVertexInputState member of sname:VkGraphicsPipelineCreateInfo, which -is of type sname:VkPipelineVertexInputStateCreateInfo: +descriptions as part of graphics pipeline creation. The +slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState points to a +structure of type sname:VkPipelineVertexInputStateCreateInfo. + +The sname:VkPipelineVertexInputStateCreateInfo structure is defined as: include::../structs/VkPipelineVertexInputStateCreateInfo.txt[] -The members of sname:VkPipelineVertexInputStateCreateInfo have the following -meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -282,13 +281,12 @@ meanings: include::../validity/structs/VkPipelineVertexInputStateCreateInfo.txt[] Each vertex input binding is specified by an instance of the -sname:VkVertexInputBindingDescription structure: +sname:VkVertexInputBindingDescription structure. + +The sname:VkVertexInputBindingDescription structure is defined as: include::../structs/VkVertexInputBindingDescription.txt[] -The members of sname:VkVertexInputBindingDescription have the following -meanings: - * pname:binding is the binding number that this structure describes. * pname:stride is the distance in bytes between two @@ -299,7 +297,7 @@ meanings: include::../validity/structs/VkVertexInputBindingDescription.txt[] -The definition of elink:VkVertexInputRate is: +elink:VkVertexInputRate is defined as: include::../enums/VkVertexInputRate.txt[] @@ -311,13 +309,12 @@ The values of elink:VkVertexInputRate have the following meanings: addressing is a function of the instance index. Each vertex input attribute is specified by an instance of the -sname:VkVertexInputAttributeDescription structure: +sname:VkVertexInputAttributeDescription structure. + +The sname:VkVertexInputAttributeDescription structure is defined as: include::../structs/VkVertexInputAttributeDescription.txt[] -The members of sname:VkVertexInputAttributeDescription have the following -meanings: - * pname:location is the shader binding location number for this attribute. * pname:binding is the binding number which this attribute takes diff --git a/doc/specs/vulkan/chapters/initialization.txt b/doc/specs/vulkan/chapters/initialization.txt index 2f5c96a5..100a64d1 100644 --- a/doc/specs/vulkan/chapters/initialization.txt +++ b/doc/specs/vulkan/chapters/initialization.txt @@ -5,7 +5,7 @@ = Initialization Before using {apiname}, an application must: initialize it by loading the -{apiname} commands, and creating a slink:VkInstance object. +{apiname} commands, and creating a sname:VkInstance object. [[initialization-functionpointers]] == Command Function Pointers @@ -34,9 +34,9 @@ Function pointers to commands that don't operate on a specific instance can: be obtained by using this command with pname:instance equal to `NULL`. The following commands can: be accessed this way: - * fname:vkEnumerateInstanceExtensionProperties - * fname:vkEnumerateInstanceLayerProperties - * fname:vkCreateInstance + * flink:vkEnumerateInstanceExtensionProperties + * flink:vkEnumerateInstanceLayerProperties + * flink:vkCreateInstance If pname:instance is a valid sname:VkInstance, function pointers to any commands that operate on pname:instance or a child of pname:instance can: be @@ -112,7 +112,7 @@ include::../protos/vkCreateInstance.txt[] include::../validity/protos/vkCreateInstance.txt[] -The definition of sname:VkInstanceCreateInfo is: +The sname:VkInstanceCreateInfo structure is defined as: include::../structs/VkInstanceCreateInfo.txt[] @@ -142,7 +142,9 @@ is provided by a layer, both the layer and extension must: be specified at fname:vkCreateInstance time. The pname:pApplicationInfo member of slink:VkInstanceCreateInfo can: point -to an instance of sname:VkApplicationInfo. This structure is defined as: +to an instance of sname:VkApplicationInfo. + +The sname:VkApplicationInfo structure is defined as: include::../structs/VkApplicationInfo.txt[] @@ -162,8 +164,11 @@ include::../structs/VkApplicationInfo.txt[] application expects to run, encoded as described in the <> section. If pname:apiVersion is 0 the implementation must: ignore it, otherwise - if the implementation does not support the requested pname:apiVersion - it must: return VK_ERROR_INCOMPATIBLE_DRIVER. + if the implementation does not support the requested pname:apiVersion it + must: return VK_ERROR_INCOMPATIBLE_DRIVER. The patch version number + specified in pname:apiVersion is ignored when creating an instance + object. Only the major and minor versions of the instance must: match + those requested in pname:apiVersion. include::../validity/structs/VkApplicationInfo.txt[] diff --git a/doc/specs/vulkan/chapters/interfaces.txt b/doc/specs/vulkan/chapters/interfaces.txt index 11ca2d29..1e09f03b 100644 --- a/doc/specs/vulkan/chapters/interfaces.txt +++ b/doc/specs/vulkan/chapters/interfaces.txt @@ -288,7 +288,7 @@ Components of the output variables are assigned as described in Output components identified as 0, 1, 2, and 3 will be directed to the R, G, B, and A inputs to the blending unit, respectively, or to the output attachment if blending is disabled. -If two variables are placed within the same location, they must +If two variables are placed within the same location, they must: have the same underlying type (floating-point or integer). Fragment outputs identified with an code:Index of zero are directed @@ -355,7 +355,7 @@ See <> for more details. When a shader stage accesses buffer or image resources, as described in the <> section, the shader -resource variables must be matched with the +resource variables must: be matched with the <> that is provided at pipeline creation time. @@ -365,9 +365,8 @@ with the storage class of code:Uniform, code:UniformConstant, or code:PushConstant. For the fragment shader, this includes the <>. -The shader resource interface can be further broken down into two -sub-interfaces: the push constant interface and the descriptor -set interface. +The shader resource interface consists of two sub-interfaces: the push +constant interface and the descriptor set interface. [[interfaces-resources-pushconst]] @@ -479,7 +478,7 @@ space required for that variable to extend outside the range latexmath:[$[0, \mathit{maxStorageBufferRange})$]. Variables identified with a storage class of code:UniformConstant and a -decoration of code:InputAttachmentIndex must be declared as described in +decoration of code:InputAttachmentIndex must: be declared as described in <>. Each shader variable declaration must: refer to the same type of resource as @@ -559,7 +558,7 @@ and descriptor set <>, if a resource variable is not an array, it is treated as if it has an arrayElement of zero. -The binding can be any 32-bit unsigned integer value, as described in +The binding can: be any 32-bit unsigned integer value, as described in <>. Each descriptor set has its own binding name space. @@ -574,7 +573,7 @@ multiple limits. If multiple entry points in the same pipeline refer to the same set and binding, all variable definitions with that code:DescriptorSet and -code:Binding must have the same basic type. +code:Binding must: have the same basic type. Not all descriptor sets and bindings specified in a pipeline layout need to be used in a particular shader stage or pipeline, but if a @@ -611,7 +610,7 @@ elink:VkShaderStageFlagBits for that stage. [[interfaces-resources-layout]] === Offset and Stride Assignment -All variables with a storage class of code:PushConstant or code:Uniform must +All variables with a storage class of code:PushConstant or code:Uniform must: be explicitly laid out using the code:Offset, code:ArrayStride, and code:MatrixStride decorations. There are two different layouts requirements depending on the specific resources. @@ -623,7 +622,7 @@ Member variables of an code:OpTypeStruct with storage class of code:Uniform and a decoration of code:Block (uniform buffers) must: be laid out according to the following rules. - * The code:Offset Decoration must be a multiple of its base alignment, + * The code:Offset Decoration must: be a multiple of its base alignment, computed recursively as follows: + ** a scalar of size latexmath:[$N$] has a base alignment of @@ -668,7 +667,6 @@ The *std430 layout* in GLSL satisfies these rules. ==== - [[interfaces-builtin-variables]] == Built-In Variables diff --git a/doc/specs/vulkan/chapters/introduction.txt b/doc/specs/vulkan/chapters/introduction.txt index 7597c5ba..3eb1031e 100644 --- a/doc/specs/vulkan/chapters/introduction.txt +++ b/doc/specs/vulkan/chapters/introduction.txt @@ -96,7 +96,7 @@ Please tag issues with appropriate labels, such as ``Specification'', ``Ref Pages'' or ``Registry'', to help us triage and assign them appropriately. Unfortunately, Github does not currently let users who do not have write access to the repository set Github labels on issues. In the -meantime, they can be added to the title line of the issue set in brackets, +meantime, they can: be added to the title line of the issue set in brackets, e.g. ''[Specification]''. diff --git a/doc/specs/vulkan/chapters/memory.txt b/doc/specs/vulkan/chapters/memory.txt index cf6a1bd5..0ba4c388 100644 --- a/doc/specs/vulkan/chapters/memory.txt +++ b/doc/specs/vulkan/chapters/memory.txt @@ -74,15 +74,15 @@ with the pointer value being a multiple of pname:alignment. [NOTE] ==== -Correct Vulkan operation cannot be assumed if the application doesn't +Correct Vulkan operation cannot: be assumed if the application doesn't follow these rules. For example, pname:pfnAllocation (or pname:pfnReallocation) could cause termination of running Vulkan instance(s) on a failed allocation for debugging purposes, either directly or indirectly. In these circumstances, -it cannot be assumed that any part of any affected VkInstance objects are +it cannot: be assumed that any part of any affected VkInstance objects are going to operate correctly (even flink:vkDestroyInstance), and the -application must ensure it cleans up properly via other means (e.g. +application must: ensure it cleans up properly via other means (e.g. process termination). ==== @@ -369,7 +369,7 @@ include::../protos/vkGetPhysicalDeviceMemoryProperties.txt[] include::../validity/protos/vkGetPhysicalDeviceMemoryProperties.txt[] -The definition of sname:VkPhysicalDeviceMemoryProperties is: +The sname:VkPhysicalDeviceMemoryProperties structure is defined as: include::../structs/VkPhysicalDeviceMemoryProperties.txt[] @@ -377,7 +377,7 @@ ifdef::editing-notes[] [NOTE] .editing-note ==== -TODO (Jon) - Need to restructure description like other structs. +TODO (Jon) - Need to restructure description like other structures. ==== endif::editing-notes[] @@ -403,7 +403,7 @@ pname:memoryTypeCount and is less than or equal to ename:VK_MAX_MEMORY_TYPES. Each memory type is described by an element of the pname:memoryTypes array, as a sname:VkMemoryType structure. -The definition of sname:VkMemoryHeap is: +The sname:VkMemoryHeap structure is defined as: include::../structs/VkMemoryHeap.txt[] @@ -427,7 +427,7 @@ In a unified memory architecture (UMA) system, there is often only a single memory heap which is considered to be equally ``local'' to the host and to the device, and such an implementation must: advertise the heap as device-local. -The definition of sname:VkMemoryType is: +The sname:VkMemoryType structure is defined as: include::../structs/VkMemoryType.txt[] @@ -557,7 +557,7 @@ include::../protos/vkAllocateMemory.txt[] include::../validity/protos/vkAllocateMemory.txt[] -sname:VkMemoryAllocateInfo is defined as: +The sname:VkMemoryAllocateInfo structure is defined as: include::../structs/VkMemoryAllocateInfo.txt[] @@ -746,7 +746,7 @@ include::../protos/vkInvalidateMappedMemoryRanges.txt[] include::../validity/protos/vkInvalidateMappedMemoryRanges.txt[] -sname:VkMappedMemoryRange is defined as: +The sname:VkMappedMemoryRange structure is defined as: include::../structs/VkMappedMemoryRange.txt[] diff --git a/doc/specs/vulkan/chapters/pipelines.txt b/doc/specs/vulkan/chapters/pipelines.txt index d73d864b..f6908236 100644 --- a/doc/specs/vulkan/chapters/pipelines.txt +++ b/doc/specs/vulkan/chapters/pipelines.txt @@ -93,7 +93,7 @@ Compute pipelines are created by calling: include::../protos/vkCreateComputePipelines.txt[] * pname:device is the logical device that creates the compute pipelines. - * pname:pipelineCache is either sname:VK_NULL_HANDLE, indicating that + * pname:pipelineCache is either code:VK_NULL_HANDLE, indicating that pipeline caching is disabled; or the handle of a valid <> object, in which case use of that cache is enabled for the duration of the command. @@ -120,7 +120,7 @@ endif::editing-notes[] include::../validity/protos/vkCreateComputePipelines.txt[] -The definition of sname:VkComputePipelineCreateInfo is: +The sname:VkComputePipelineCreateInfo structure is defined as: include::../structs/VkComputePipelineCreateInfo.txt[] @@ -142,14 +142,13 @@ The parameters pname:basePipelineHandle and pname:basePipelineIndex are described in more detail in <>. -The parameter pname:stage member of type -sname:VkPipelineShaderStageCreateInfo is: +pname:stage points to a structure of type +sname:VkPipelineShaderStageCreateInfo. + +The sname:VkPipelineShaderStageCreateInfo structure is defined as: include::../structs/VkPipelineShaderStageCreateInfo.txt[] -The members of the sname:VkPipelineShaderStageCreateInfo structure are as -follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -179,7 +178,7 @@ calling fname:vkCreateGraphicsPipelines: include::../protos/vkCreateGraphicsPipelines.txt[] * pname:device is the logical device that creates the graphics pipelines. - * pname:pipelineCache is either sname:VK_NULL_HANDLE, indicating that + * pname:pipelineCache is either code:VK_NULL_HANDLE, indicating that pipeline caching is disabled; or the handle of a valid <> object, in which case use of that cache is enabled for the duration of the command. @@ -197,7 +196,9 @@ include::../validity/protos/vkCreateGraphicsPipelines.txt[] The sname:VkGraphicsPipelineCreateInfo structure includes an array of shader create info structures containing all the desired active shader stages, as well as creation info to define all relevant fixed-function stages, and a -pipeline layout. The definition of sname:VkGraphicsPipelineCreateInfo is: +pipeline layout. + +The sname:VkGraphicsPipelineCreateInfo structure is defined as: include::../structs/VkGraphicsPipelineCreateInfo.txt[] @@ -281,14 +282,13 @@ parent and possibly a child in a pipeline hierarchy. See <> for more information. -The definition of the pname:pDynamicState member of type -sname:VkPipelineDynamicStateCreateInfo is: +pname:pDynamicState points to a structure of type +sname:VkPipelineDynamicStateCreateInfo. + +The sname:VkPipelineDynamicStateCreateInfo structure is defined as: include::../structs/VkPipelineDynamicStateCreateInfo.txt[] -The members of the sname:VkPipelineDynamicStateCreateInfo structure are as -follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -300,69 +300,69 @@ follows: include::../validity/structs/VkPipelineDynamicStateCreateInfo.txt[] -The definition of the elink:VkDynamicState enumeration is as follows: +The elink:VkDynamicState enumerants are defined as: include::../enums/VkDynamicState.txt[] - * ename:VK_DYNAMIC_STATE_VIEWPORT indicates that the pname:pViewports - state in sname:VkPipelineViewportStateCreateInfo will be ignored and - must: be set dynamically with flink:vkCmdSetViewport before any draw - commands. The number of viewports used by a pipeline is still - specified by the pname:viewportCount member of - sname:VkPipelineViewportStateCreateInfo. - * ename:VK_DYNAMIC_STATE_SCISSOR indicates that the pname:pScissors - state in sname:VkPipelineViewportStateCreateInfo will be ignored and - must: be set dynamically with flink:vkCmdSetScissor before any draw - commands. The number of scissor rectangles used by a pipeline is still - specified by the pname:scissorCount member of - sname:VkPipelineViewportStateCreateInfo. - * ename:VK_DYNAMIC_STATE_LINE_WIDTH indicates that the pname:lineWidth - state in sname:VkPipelineRasterizationStateCreateInfo will be ignored - and must: be set dynamically with flink:vkCmdSetLineWidth before any - draw commands that generate line primitives for the rasterizer. - * ename:VK_DYNAMIC_STATE_DEPTH_BIAS indicates that the - pname:depthBiasConstantFactor, pname:depthBiasClamp and - pname:depthBiasSlopeFactor states in - sname:VkPipelineRasterizationStateCreateInfo will be ignored and must: - be set dynamically with flink:vkCmdSetDepthBias before any draws are - performed with pname:depthBiasEnable in - sname:VkPipelineRasterizationStateCreateInfo set to ename:VK_TRUE. - * ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS indicates that the - pname:blendConstants state in - sname:VkPipelineColorBlendStateCreateInfo will be ignored and must: be - set dynamically with flink:vkCmdSetBlendConstants before any draws are - performed with a pipeline state with - sname:VkPipelineColorBlendAttachmentState member pname:blendEnable set - to ename:VK_TRUE and any of the blend functions using a constant blend - color. - * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS indicates that the - pname:minDepthBounds and pname:maxDepthBounds states of - slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: - be set dynamically with flink:vkCmdSetDepthBounds before any draws are - performed with a pipeline state with - sname:VkPipelineDepthStencilStateCreateInfo member - pname:depthBoundsTestEnable set to ename:VK_TRUE. - * ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK indicates that the - pname:compareMask state in - sname:VkPipelineDepthStencilStateCreateInfo for both pname:front and - pname:back will be ignored and must: be set dynamically with - flink:vkCmdSetStencilCompareMask before any draws are performed with a - pipeline state with sname:VkPipelineDepthStencilStateCreateInfo member - pname:stencilTestEnable set to ename:VK_TRUE - * ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK indicates that the - pname:writeMask state in sname:VkPipelineDepthStencilStateCreateInfo - for both pname:front and pname:back will be ignored and must: be set - dynamically with flink:vkCmdSetStencilWriteMask before any draws are - performed with a pipeline state with - sname:VkPipelineDepthStencilStateCreateInfo member - pname:stencilTestEnable set to ename:VK_TRUE - * ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE indicates that the - pname:reference state in sname:VkPipelineDepthStencilStateCreateInfo - for both pname:front and pname:back will be ignored and must: be set - dynamically with flink:vkCmdSetStencilReference before any draws are - performed with a pipeline state with - sname:VkPipelineDepthStencilStateCreateInfo member - pname:stencilTestEnable set to ename:VK_TRUE + * ename:VK_DYNAMIC_STATE_VIEWPORT indicates that the pname:pViewports + state in sname:VkPipelineViewportStateCreateInfo will be ignored and + must: be set dynamically with flink:vkCmdSetViewport before any draw + commands. The number of viewports used by a pipeline is still + specified by the pname:viewportCount member of + sname:VkPipelineViewportStateCreateInfo. + * ename:VK_DYNAMIC_STATE_SCISSOR indicates that the pname:pScissors + state in sname:VkPipelineViewportStateCreateInfo will be ignored and + must: be set dynamically with flink:vkCmdSetScissor before any draw + commands. The number of scissor rectangles used by a pipeline is still + specified by the pname:scissorCount member of + sname:VkPipelineViewportStateCreateInfo. + * ename:VK_DYNAMIC_STATE_LINE_WIDTH indicates that the pname:lineWidth + state in sname:VkPipelineRasterizationStateCreateInfo will be ignored + and must: be set dynamically with flink:vkCmdSetLineWidth before any + draw commands that generate line primitives for the rasterizer. + * ename:VK_DYNAMIC_STATE_DEPTH_BIAS indicates that the + pname:depthBiasConstantFactor, pname:depthBiasClamp and + pname:depthBiasSlopeFactor states in + sname:VkPipelineRasterizationStateCreateInfo will be ignored and must: + be set dynamically with flink:vkCmdSetDepthBias before any draws are + performed with pname:depthBiasEnable in + sname:VkPipelineRasterizationStateCreateInfo set to ename:VK_TRUE. + * ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS indicates that the + pname:blendConstants state in + sname:VkPipelineColorBlendStateCreateInfo will be ignored and must: be + set dynamically with flink:vkCmdSetBlendConstants before any draws are + performed with a pipeline state with + sname:VkPipelineColorBlendAttachmentState member pname:blendEnable set + to ename:VK_TRUE and any of the blend functions using a constant blend + color. + * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS indicates that the + pname:minDepthBounds and pname:maxDepthBounds states of + slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: + be set dynamically with flink:vkCmdSetDepthBounds before any draws are + performed with a pipeline state with + sname:VkPipelineDepthStencilStateCreateInfo member + pname:depthBoundsTestEnable set to ename:VK_TRUE. + * ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK indicates that the + pname:compareMask state in + sname:VkPipelineDepthStencilStateCreateInfo for both pname:front and + pname:back will be ignored and must: be set dynamically with + flink:vkCmdSetStencilCompareMask before any draws are performed with a + pipeline state with sname:VkPipelineDepthStencilStateCreateInfo member + pname:stencilTestEnable set to ename:VK_TRUE + * ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK indicates that the + pname:writeMask state in sname:VkPipelineDepthStencilStateCreateInfo + for both pname:front and pname:back will be ignored and must: be set + dynamically with flink:vkCmdSetStencilWriteMask before any draws are + performed with a pipeline state with + sname:VkPipelineDepthStencilStateCreateInfo member + pname:stencilTestEnable set to ename:VK_TRUE + * ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE indicates that the + pname:reference state in sname:VkPipelineDepthStencilStateCreateInfo + for both pname:front and pname:back will be ignored and must: be set + dynamically with flink:vkCmdSetStencilReference before any draws are + performed with a pipeline state with + sname:VkPipelineDepthStencilStateCreateInfo member + pname:stencilTestEnable set to ename:VK_TRUE If tessellation shader stages are omitted, the tessellation shading and fixed-function stages of the pipeline are skipped. @@ -453,10 +453,10 @@ group-create. When an application attempts to create many pipelines in a single command, it is possible that some subset may: fail creation. In that case, the corresponding entries in the pname:pPipelines output array will be filled -with sname:VK_NULL_HANDLE values. If any pipeline fails creation (for +with code:VK_NULL_HANDLE values. If any pipeline fails creation (for example, due to out of memory errors), the ftext:vkCreate*Pipelines commands will return an error code. The implementation will attempt to create all -pipelines, and only return sname:VK_NULL_HANDLE values for those that +pipelines, and only return code:VK_NULL_HANDLE values for those that actually failed. @@ -476,7 +476,7 @@ pname:basePipelineHandle or pname:basePipelineIndex members of the structure must: have a valid handle/index, and indicates the parent pipeline. If pname:basePipelineHandle is used, the parent pipeline must: have already been created. If pname:basePipelineIndex is used, then the parent is being -created in the same command. sname:VK_NULL_HANDLE acts as the invalid handle +created in the same command. code:VK_NULL_HANDLE acts as the invalid handle for pname:basePipelineHandle, and -1 is the invalid index for pname:basePipelineIndex. If pname:basePipelineIndex is used, the base pipeline must: appear earlier in the array. The base pipeline must: have @@ -513,7 +513,7 @@ include::../protos/vkCreatePipelineCache.txt[] include::../validity/protos/vkCreatePipelineCache.txt[] -The definition of sname:VkPipelineCacheCreateInfo is: +The sname:VkPipelineCacheCreateInfo structure is defined as: include::../structs/VkPipelineCacheCreateInfo.txt[] @@ -533,7 +533,7 @@ include::../validity/structs/VkPipelineCacheCreateInfo.txt[] Once created, a pipeline cache can: be passed to the fname:vkCreateGraphicsPipelines and fname:vkCreateComputePipelines commands. If the pipeline cache passed into these commands is not -sname:VK_NULL_HANDLE, the implementation will query it for possible reuse +code:VK_NULL_HANDLE, the implementation will query it for possible reuse opportunities and update it with new content. The use of the pipeline cache object in these commands is internally synchronized, and the same pipeline cache object can: be used in multiple threads simultaneously. @@ -579,7 +579,7 @@ include::../protos/vkGetPipelineCacheData.txt[] the pipeline cache, as described below. * pname:pData is either `NULL` or a pointer to a buffer. -If pname:pData is `NULL`, then the maximum size of the data that can be +If pname:pData is `NULL`, then the maximum size of the data that can: be retrieved from the pipeline cache, in bytes, is returned in pname:pDataSize. Otherwise, pname:pDataSize must: point to a variable set by the user to the size of the buffer, in bytes, pointed to by pname:pData, and on return the @@ -675,13 +675,13 @@ its local workgroup size changed at runtime by the user, for example. Each instance of the sname:VkPipelineShaderStageCreateInfo structure contains a parameter pname:pSpecializationInfo, which can: be `NULL` to -indicate no specialization constants. The definition of the -sname:VkSpecializationInfo structure is: +indicate no specialization constants, or point to a +sname:VkSpecializationInfo structure. + +The sname:VkSpecializationInfo structure is defined as: include::../structs/VkSpecializationInfo.txt[] -The members of sname:VkSpecializationInfo are as follows: - * pname:mapEntryCount is the number of entries in the pname:pMapEntries array. * pname:pMapEntries is a pointer to an array of @@ -692,13 +692,13 @@ The members of sname:VkSpecializationInfo are as follows: include::../validity/structs/VkSpecializationInfo.txt[] -The definition of the pname:pMapEntries member of type -sname:VkSpecializationMapEntry is: +pname:pMapEntries points to a structure of type +sname:VkSpecializationMapEntry. + +The sname:VkSpecializationMapEntry structure is defined as: include::../structs/VkSpecializationMapEntry.txt[] -The members of sname:VkSpecializationMapEntry are as follows: - * pname:constantID ID of the specialization constant in SPIR-V. * pname:offset byte offset of the specialization constant value within the supplied data buffer. diff --git a/doc/specs/vulkan/chapters/primsrast.txt b/doc/specs/vulkan/chapters/primsrast.txt index edd8592c..54a00b6a 100644 --- a/doc/specs/vulkan/chapters/primsrast.txt +++ b/doc/specs/vulkan/chapters/primsrast.txt @@ -67,9 +67,6 @@ The sname:VkPipelineMultisampleStateCreateInfo structure is defined as: include::../structs/VkPipelineMultisampleStateCreateInfo.txt[] -The members of the sname:VkPipelineMultisampleStateCreateInfo structure are -as follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. diff --git a/doc/specs/vulkan/chapters/queries.txt b/doc/specs/vulkan/chapters/queries.txt index b99ddfd0..a831f1f0 100644 --- a/doc/specs/vulkan/chapters/queries.txt +++ b/doc/specs/vulkan/chapters/queries.txt @@ -37,12 +37,10 @@ include::../protos/vkCreateQueryPool.txt[] include::../validity/protos/vkCreateQueryPool.txt[] -The definition of sname:VkQueryPoolCreateInfo is: +The sname:VkQueryPoolCreateInfo structure is defined as: include::../structs/VkQueryPoolCreateInfo.txt[] -The members of sname:VkQueryPoolCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -133,15 +131,16 @@ compute commands. Timestamp queries write timestamps to a query pool. A query must: begin and end in the same command buffer, although if it is a primary command buffer, and the -<> feature is +<> feature is enabled, it can: execute secondary command buffers during the query operation. For a secondary command buffer to be executed while a query is active, it must: set the pname:occlusionQueryEnable, pname:queryFlags, -and/or pname:pipelineStatistics members of slink:VkCommandBufferInheritanceInfo -to conservative values, as described in the <> section. A query must: either begin and end inside the -same subpass of a render pass instance, or must: both begin and end outside -of a render pass instance (i.e. contain entire render pass instances). +and/or pname:pipelineStatistics members of +slink:VkCommandBufferInheritanceInfo to conservative values, as described in +the <> section. A query +must: either begin and end inside the same subpass of a render pass +instance, or must: both begin and end outside of a render pass instance +(i.e. contain entire render pass instances). Begin a query by calling: diff --git a/doc/specs/vulkan/chapters/renderpass.txt b/doc/specs/vulkan/chapters/renderpass.txt index e5a59a42..6d50f16c 100644 --- a/doc/specs/vulkan/chapters/renderpass.txt +++ b/doc/specs/vulkan/chapters/renderpass.txt @@ -91,7 +91,7 @@ include::../protos/vkCreateRenderPass.txt[] * pname:device is the logical device that creates the render pass. * pname:pCreateInfo is a pointer to an instance of the - sname:VkRenderPassCreateInfo structure that describes the parameters of + slink:VkRenderPassCreateInfo structure that describes the parameters of the render pass. * pname:pAllocator controls host memory allocation as described in the <> chapter. @@ -127,7 +127,7 @@ include::../structs/VkRenderPassCreateInfo.txt[] include::../validity/structs/VkRenderPassCreateInfo.txt[] -sname:VkAttachmentDescription is defined as: +The sname:VkAttachmentDescription structure is defined as: include::../structs/VkAttachmentDescription.txt[] @@ -271,7 +271,7 @@ until a framebuffer is created using the render pass, so the above conditions cannot: be validated at render pass creation time. ==== -sname:VkSubpassDescription is defined as: +The sname:VkSubpassDescription structure is defined as: include::../structs/VkSubpassDescription.txt[] @@ -299,7 +299,7 @@ include::../structs/VkSubpassDescription.txt[] i.e. if the shader declared an output variable `layout(location=X)` then it uses the attachment provided in pname:pColorAttachments[X]. * pname:pResolveAttachments is `NULL` or a pointer to an array of - sname:VkAttachmentReference structures. If pname:pResolveAttachments is + slink:VkAttachmentReference structures. If pname:pResolveAttachments is not `NULL`, each of its elements corresponds to a color attachment (the element in pname:pColorAttachments at the same index). At the end of each subpass, the subpass's color attachments are resolved to @@ -500,7 +500,7 @@ It will be common for a render pass to consist of a simple linear graph of dependencies, where subpass N depends on subpass N-1 for all N, and the operation of the memory barriers and layout transitions is fairly straightforward to reason about for those simple cases. But for more complex -graphs, there are some rules that govern when there must be dependencies +graphs, there are some rules that govern when there must: be dependencies between subpasses. As stated earlier, render passes must: include subpass dependencies which @@ -623,9 +623,9 @@ references are compatible. If two render passes contain more than one subpass, they are compatible if they are identical except for: - * Initial and final image layout in attachment descriptions - * Load and store operations in attachment descriptions - * Image layout in attachment references + * Initial and final image layout in attachment descriptions + * Load and store operations in attachment descriptions + * Image layout in attachment references A framebuffer is compatible with a render pass if it was created using the same render pass or a compatible render pass. @@ -641,7 +641,7 @@ An application creates a framebuffer by calling: include::../protos/vkCreateFramebuffer.txt[] * pname:device is the logical device that creates the framebuffer. - * pname:pCreateInfo points to a sname:VkFramebufferCreateInfo structure + * pname:pCreateInfo points to a slink:VkFramebufferCreateInfo structure which describes additional information about framebuffer creation. * pname:pAllocator controls host memory allocation as described in the <> chapter. @@ -687,12 +687,12 @@ rather use shader side effects such as image stores and atomics to produce an output. In this case, the subpass continues to use the pname:width, pname:height, and pname:layers of the framebuffer to define the dimensions of the rendering area, and the pname:rasterizationSamples from each -pipeline's sname:VkPipelineMultisampleStateCreateInfo to define the number +pipeline's slink:VkPipelineMultisampleStateCreateInfo to define the number of samples used in rasterization; however, if -sname:VkPhysicalDeviceFeatures::pname:variableMultisampleRate is +slink:VkPhysicalDeviceFeatures::pname:variableMultisampleRate is code:VK_FALSE, then all pipelines to be bound with a given zero-attachment subpass must: have the same value for -sname:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples. +slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples. To destroy a framebuffer, call: @@ -720,7 +720,7 @@ include::../protos/vkCmdBeginRenderPass.txt[] * pname:commandBuffer is the command buffer in which to record the command. - * pname:pRenderPassBegin is a pointer to a sname:VkRenderPassBeginInfo + * pname:pRenderPassBegin is a pointer to a slink:VkRenderPassBeginInfo structure (defined below) which indicates the render pass to begin an instance of, and the framebuffer the instance uses. * pname:contents specifies how the commands in the first subpass will be @@ -743,7 +743,6 @@ include::../validity/protos/vkCmdBeginRenderPass.txt[] After beginning a render pass instance, the command buffer is ready to record the commands for the first subpass of that render pass. -[[renderpass-VkRenderPassBeginInfo]] The sname:VkRenderPassBeginInfo structure is defined as: include::../structs/VkRenderPassBeginInfo.txt[] @@ -756,7 +755,7 @@ include::../structs/VkRenderPassBeginInfo.txt[] * pname:renderArea is the render area that is affected by the render pass instance, and is described in more detail below. * pname:clearValueCount is the number of elements in pname:pClearValues. - * pname:pClearValues is an array of sname:VkClearValue structures that + * pname:pClearValues is an array of slink:VkClearValue structures that contains clear values for each attachment, if the attachment uses a pname:loadOp value of ename:VK_ATTACHMENT_LOAD_OP_CLEAR. The array is indexed by attachment number, with elements corresponding to uncleared @@ -788,7 +787,7 @@ include::../protos/vkGetRenderAreaGranularity.txt[] * pname:device is the logical device that owns the render pass. * pname:renderPass is a handle to a render pass. - * pname:pGranularity points to a sname:VkExtent2D structure in which the + * pname:pGranularity points to a slink:VkExtent2D structure in which the granularity is returned. include::../validity/protos/vkGetRenderAreaGranularity.txt[] @@ -796,19 +795,23 @@ include::../validity/protos/vkGetRenderAreaGranularity.txt[] The conditions leading to an optimal pname:renderArea are: * the pname:offset.x member in pname:renderArea is a multiple of the - pname:width member of the returned sname:VkExtent2D (the horizontal + pname:width member of the returned slink:VkExtent2D (the horizontal granularity). * the pname:offset.y member in pname:renderArea is a multiple of the - pname:height of the returned sname:VkExtent2D (the vertical + pname:height of the returned slink:VkExtent2D (the vertical granularity). * either the pname:offset.width member in pname:renderArea is a multiple of the horizontal granularity or pname:offset.x+pname:offset.width is equal to the pname:width of the pname:framebuffer in the - sname:VkRenderPassBeginInfo. + slink:VkRenderPassBeginInfo. * either the pname:offset.height member in pname:renderArea is a multiple of the vertical granularity or pname:offset.y+pname:offset.height is equal to the pname:height of the pname:framebuffer in the - sname:VkRenderPassBeginInfo. + slink:VkRenderPassBeginInfo. + +Subpass dependencies are not affected by the render area, and apply to the +entire image subresources attached to the framebuffer. Similarly, pipeline +barriers are valid even if their effect extends outside the render area. After recording the commands for a subpass, an application transitions to the next subpass in the render pass instance by calling: diff --git a/doc/specs/vulkan/chapters/resources.txt b/doc/specs/vulkan/chapters/resources.txt index c07614a0..6c1a586f 100644 --- a/doc/specs/vulkan/chapters/resources.txt +++ b/doc/specs/vulkan/chapters/resources.txt @@ -34,12 +34,10 @@ include::../protos/vkCreateBuffer.txt[] include::../validity/protos/vkCreateBuffer.txt[] -The definition of sname:VkBufferCreateInfo is: +The sname:VkBufferCreateInfo structure is defined as: include::../structs/VkBufferCreateInfo.txt[] -The members of sname:VkBufferCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is a bitfield describing additional parameters of the @@ -163,12 +161,10 @@ include::../protos/vkCreateBufferView.txt[] include::../validity/protos/vkCreateBufferView.txt[] -The definition of sname:VkBufferViewCreateInfo is: +The sname:VkBufferViewCreateInfo structure is defined as: include::../structs/VkBufferViewCreateInfo.txt[] -The members of sname:VkBufferViewCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -221,12 +217,10 @@ include::../protos/vkCreateImage.txt[] include::../validity/protos/vkCreateImage.txt[] -The definition of sname:VkImageCreateInfo is: +The sname:VkImageCreateInfo structure is defined as: include::../structs/VkImageCreateInfo.txt[] -The members of sname:VkImageCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is a bitfield describing additional parameters of the image. @@ -372,10 +366,10 @@ See <> and more details. * ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT indicates that the image can: - be used to create a slink:VkImageView with a different format from the + be used to create a sname:VkImageView with a different format from the image. * ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT indicates that the image can: - be used to create a slink:VkImageView of type + be used to create a sname:VkImageView of type ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY. The layout of an image subresource (mipLevel/arrayLayer) of an image created @@ -392,11 +386,11 @@ include::../protos/vkGetImageSubresourceLayout.txt[] include::../validity/protos/vkGetImageSubresourceLayout.txt[] -The definition of the sname:VkImageSubresource structure is: +The sname:VkImageSubresource structure is defined as: include::../structs/VkImageSubresource.txt[] - * pname:aspectMask is a elink:VkImageAspectFlags selecting the image + * pname:aspectMask is a ename:VkImageAspectFlags selecting the image aspect. * pname:mipLevel selects the mipmap level. * pname:arrayLayer selects the array layer. @@ -762,8 +756,9 @@ baseArrayLayer = 0 + arrayLayers = 1 |======================================== -The pname:subresourceRange member is of type sname:VkImageSubresourceRange -and is defined as: +The pname:subresourceRange member is of type sname:VkImageSubresourceRange. + +The sname:VkImageSubresourceRange structure is defined as: include::../structs/VkImageSubresourceRange.txt[] @@ -818,7 +813,9 @@ depth/stencil image is used as a depth/stencil framebuffer attachment, the pname:aspectMask is ignored and both depth and stencil image subresources are used. -The pname:components member is defined as follows: +The pname:components member is of type sname:VkComponentMapping. + +The sname:VkComponentMapping structure is defined as: include::../structs/VkComponentMapping.txt[] @@ -891,7 +888,7 @@ details on resource memory association for sparse resources is described in <>. Non-sparse resources must: be bound completely and contiguously to a single -slink:VkDeviceMemory object before the resource is passed as a parameter to +sname:VkDeviceMemory object before the resource is passed as a parameter to any of the following operations: * creating image or buffer views @@ -925,9 +922,7 @@ include::../protos/vkGetImageMemoryRequirements.txt[] include::../validity/protos/vkGetImageMemoryRequirements.txt[] -The sname:VkMemoryRequirements structure returned by -flink:vkGetBufferMemoryRequirements and flink:vkGetImageMemoryRequirements -is defined as follows: +The sname:VkMemoryRequirements structure is defined as: include::../structs/VkMemoryRequirements.txt[] @@ -963,7 +958,7 @@ flink:vkGetImageMemoryRequirements: 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 the bits set in code:usage2 are a + ename:VkBufferUsageFlags are such that the bits set in code:usage2 are 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 @@ -1178,7 +1173,7 @@ Buffers, and linear image subresources in either the ename:VK_IMAGE_LAYOUT_PREINITIALIZED or ename:VK_IMAGE_LAYOUT_GENERAL layouts, are _host-accessible subresources_. That is, the host has a well-defined addressing scheme to interpret the contents, and thus the -layout of the data in memory can be consistently interpreted across aliases +layout of the data in memory can: be consistently interpreted across aliases if each of those aliases is a host-accessible subresource. Opaque images and linear image subresources in other layouts are not host-accessible. diff --git a/doc/specs/vulkan/chapters/samplers.txt b/doc/specs/vulkan/chapters/samplers.txt index 3d334e53..3c7c1419 100644 --- a/doc/specs/vulkan/chapters/samplers.txt +++ b/doc/specs/vulkan/chapters/samplers.txt @@ -23,12 +23,10 @@ include::../protos/vkCreateSampler.txt[] include::../validity/protos/vkCreateSampler.txt[] -The sname:VkSamplerCreateInfo structure is defined as follows: +The sname:VkSamplerCreateInfo structure is defined as: include::../structs/VkSamplerCreateInfo.txt[] -The members of sname:VkSamplerCreateInfo are described as follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -123,7 +121,7 @@ ename:VK_SAMPLER_MIPMAP_MODE_NEAREST correspond to code:GL_LINEAR_MIPMAP_NEAREST). There are no {apiname} filter modes that directly correspond to OpenGL -minification filters of code:GL_LINEAR or code:GL_NEAREST, but they can be +minification filters of code:GL_LINEAR or code:GL_NEAREST, but they can: be emulated using ename:VK_SAMPLER_MIPMAP_MODE_NEAREST, pname:minLod = 0, and pname:maxLod = 0.25, and using pname:minFilter = ename:VK_FILTER_LINEAR or pname:minFilter = ename:VK_FILTER_NEAREST, respectively. diff --git a/doc/specs/vulkan/chapters/shaders.txt b/doc/specs/vulkan/chapters/shaders.txt index 4eeddec1..70e29756 100644 --- a/doc/specs/vulkan/chapters/shaders.txt +++ b/doc/specs/vulkan/chapters/shaders.txt @@ -424,7 +424,7 @@ be assigned to that variable for all samples in the pixel, but that value must: be interpolated to a location that lies in both the pixel and in the primitive being rendered, including any of the pixel's samples covered by the primitive. Because the location at which the variable is interpolated -may be different in neighboring pixels, and derivatives may be computed by +may: be different in neighboring pixels, and derivatives may: be computed by computing differences between neighboring pixels, derivatives of centroid-sampled inputs may: be less accurate than those for non-centroid interpolated variables. If a fragment shader input is decorated with diff --git a/doc/specs/vulkan/chapters/sparsemem.txt b/doc/specs/vulkan/chapters/sparsemem.txt index 77026a58..e8fa836b 100644 --- a/doc/specs/vulkan/chapters/sparsemem.txt +++ b/doc/specs/vulkan/chapters/sparsemem.txt @@ -463,12 +463,12 @@ must: abide by the following guidelines: * All sparse resources that are bound to aliased physical memory must: be created with the ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT / ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT flag. - * All resources that access aliased physical memory must interpret the + * All resources that access aliased physical memory must: interpret the memory in the same way. This implies the following: ** Buffers and images cannot: alias the same physical memory in a data - consistent fashion. The physical memory ranges must be used exclusively - by buffers or used exclusively by images for data consistency to be - guaranteed. + consistent fashion. The physical memory ranges must: be used + exclusively by buffers or used exclusively by images for data + consistency to be guaranteed. ** Memory in sparse image mip tail regions cannot: access aliased memory in a data consistent fashion. ** Sparse images that alias the same physical memory must: have compatible @@ -477,7 +477,7 @@ must: abide by the following guidelines: Failure to follow any of the above guidelines will require the application to abide by the normal, non-sparse resource <>. In this case memory cannot be accessed in a data +aliasing rules>>. In this case memory cannot: be accessed in a data consistent fashion. [NOTE] @@ -667,8 +667,10 @@ features. Some features of the implementation are not possible to disable, and are reported to allow applications to alter their sparse resource usage accordingly. These read-only capabilites are reported in the -pname:sparseProperties member of slink:VkPhysicalDeviceProperties. -The definition of pname:sparseProperties is +slink:VkPhysicalDeviceProperties::pname:sparseProperties member, which is a +structure of type sname:VkPhysicalDeviceSparseProperties. + +The sname:VkPhysicalDeviceSparseProperties structure is defined as: include::../structs/VkPhysicalDeviceSparseProperties.txt[] @@ -734,12 +736,12 @@ supported and what the sparse image block shape will be. include::../structs/VkSparseImageFormatProperties.txt[] - * pname:aspectMask is a elink:VkImageAspectFlags specifying which - aspects of the image the properties apply to. + * pname:aspectMask is a bitmask of elink:VkImageAspectFlagBits specifying + which aspects of the image the properties apply to. * pname:imageGranularity is the width, height, and depth of the sparse image block in texels or compressed texel blocks. - * pname:flags is a bitmask specifying additional information about - the sparse resource. Bits which can: be set include: + * pname:flags is a bitmask specifying additional information about the + sparse resource. Bits which can: be set include: + -- include::../enums/VkSparseImageFormatFlagBits.txt[] @@ -877,8 +879,8 @@ include::../structs/VkSparseImageMemoryRequirements.txt[] single bindable sparse image block in pixel units. For aspect ename:VK_IMAGE_ASPECT_METADATA_BIT, all dimensions will be zero pixels. All metadata is located in the mip tail region. - * pname:formatProperties.flags contains members of - elink:VkSparseImageFormatFlags: + * pname:formatProperties.flags is a bitmask of + elink:VkSparseImageFormatFlagBits: ** If ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT is set the image uses a single mip tail region for all array layers. ** If ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT is set the @@ -954,8 +956,8 @@ resource. Non-sparse resources are backed by a single physical allocation prior to device use (via fname:vkBindImageMemory or fname:vkBindBufferMemory), and -their backing mustnot: be changed. On the other hand, sparse resources can -be bound to memory non-contiguously and these bindings can be altered +their backing mustnot: be changed. On the other hand, sparse resources can: +be bound to memory non-contiguously and these bindings can: be altered during the lifetime of the resource. [NOTE] @@ -1045,10 +1047,10 @@ include::../structs/VkSparseMemoryBind.txt[] * pname:resourceOffset is the offset into the resource. * pname:size is the size of the memory region to be bound. * pname:memory is the sname:VkDeviceMemory object that the range of the - resource is bound to. If pname:memory is sname:VK_NULL_HANDLE, the range + resource is bound to. If pname:memory is code:VK_NULL_HANDLE, the range is unbound. * pname:memoryOffset is the offset into the sname:VkDeviceMemory object to - bind the resource range to. If pname:memory is sname:VK_NULL_HANDLE, + bind the resource range to. If pname:memory is code:VK_NULL_HANDLE, this value is ignored. * pname:flags are sparse memory binding flags. @@ -1155,7 +1157,7 @@ include::../structs/VkSparseImageMemoryBindInfo.txt[] include::../validity/structs/VkSparseImageMemoryBindInfo.txt[] -Where sname:VkSparseImageMemoryBind is defined as follows: +The sname:VkSparseImageMemoryBind structure is defined as: include::../structs/VkSparseImageMemoryBind.txt[] @@ -1169,10 +1171,10 @@ include::../structs/VkSparseImageMemoryBind.txt[] latexmath:[$\mathit{offset} + \mathit{extent}$] equals the corresponding dimensions of the image subresource. * pname:memory is the sname:VkDeviceMemory object that the sparse image - blocks of the image are bound to. If pname:memory is sname:VK_NULL_HANDLE, + blocks of the image are bound to. If pname:memory is code:VK_NULL_HANDLE, the sparse image blocks are unbound. * pname:memoryOffset is an offset into sname:VkDeviceMemory object. If - pname:memory is sname:VK_NULL_HANDLE, this value is ignored. + pname:memory is code:VK_NULL_HANDLE, this value is ignored. * pname:flags are sparse memory binding flags. include::../validity/structs/VkSparseImageMemoryBind.txt[] @@ -1188,7 +1190,7 @@ include::../protos/vkQueueBindSparse.txt[] * pname:pBindInfo is an array of slink:VkBindSparseInfo structures each specifying the parameters of a sparse binding operation batch as described below. - * pname:fence, if not ename:VK_NULL_HANDLE, is a fence to be signaled + * pname:fence, if not code:VK_NULL_HANDLE, is a fence to be signaled once the sparse binding operation completes. Each batch of sparse binding operations is represented by a list of diff --git a/doc/specs/vulkan/chapters/synchronization.txt b/doc/specs/vulkan/chapters/synchronization.txt index 481f204f..6f8f43bb 100644 --- a/doc/specs/vulkan/chapters/synchronization.txt +++ b/doc/specs/vulkan/chapters/synchronization.txt @@ -59,7 +59,7 @@ include::../protos/vkCreateFence.txt[] include::../validity/protos/vkCreateFence.txt[] -The definition of sname:VkFenceCreateInfo is: +The sname:VkFenceCreateInfo structure is defined as: include::../structs/VkFenceCreateInfo.txt[] @@ -201,12 +201,10 @@ include::../protos/vkCreateSemaphore.txt[] include::../validity/protos/vkCreateSemaphore.txt[] -The definition of sname:VkSemaphoreCreateInfo is: +The sname:VkSemaphoreCreateInfo structure is defined as: include::../structs/VkSemaphoreCreateInfo.txt[] -The members of sname:VkSemaphoreCreateInfo have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. @@ -271,7 +269,7 @@ Some implementations may: be able to execute transfer operations and/or vertex processing work before the semaphore is signaled. If an image layout transition needs to be performed on a swapchain image -before it is used in a framebuffer, that can be performed as the first +before it is used in a framebuffer, that can: be performed as the first operation submitted to the queue after acquiring the image, and shouldnot: prevent other work from overlapping with the presentation operation. For example, a sname:VkImageMemoryBarrier could use: @@ -336,7 +334,7 @@ include::../protos/vkCreateEvent.txt[] include::../validity/protos/vkCreateEvent.txt[] -The definition of sname:VkEventCreateInfo is: +The sname:VkEventCreateInfo structure is defined as: include::../structs/VkEventCreateInfo.txt[] @@ -554,6 +552,43 @@ conditions: ** pname:dstStageMask of the previous dependency includes ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, and pname:srcStageMask of the current dependency includes at least one graphics pipeline stage. + * for each dependency in the sequence (except the first), at least one of the + following conditions is true: + ** the current dependency is a fname:vkCmdSetEvent/fname:vkCmdWaitEvents pair + (where the fname:vkCmdWaitEvents may: be inside or outside a render pass + instance), or a fname:vkCmdPipelineBarrier outside of a render pass instance, + or a subpass dependency with pname:srcSubpass equal to + ename:VK_SUBPASS_EXTERNAL for a render pass instance that begins with a + fname:vkCmdBeginRenderPass command, and the previous dependency is any of: + *** a fname:vkCmdSetEvent/fname:vkCmdWaitEvents pair or a + fname:vkCmdPipelineBarrier, either one outside of a render pass instance, + that precedes the current dependency in the queue execution order. Or, + *** a subpass dependency, with pname:dstSubpass equal to + ename:VK_SUBPASS_EXTERNAL, for a renderpass instance that was ended with a + fname:vkCmdEndRenderPass command that precedes the current dependency in + the queue execution order. + ** the current dependency is a subpass dependency for a render pass instance, + and the previous dependency is any of: + *** another dependency for the same render pass instance, with a + pname:dstSubpass equal to the pname:srcSubpass of the current dependency. + Or, + *** a fname:vkCmdPipelineBarrier of the same render pass instance, recorded + for the subpass indicated by the pname:srcSubpass of the current + dependency. Or, + *** a fname:vkCmdSetEvent/fname:vkCmdWaitEvents pair, where the + fname:vkCmdWaitEvents is inside the same render pass instance, recorded + for the subpass indicated by the pname:srcSubpass of the current + dependency. + ** the current dependency is a fname:vkCmdPipelineBarrier inside a subpass of + a render pass instance, and the previous dependency is any of: + *** a subpass dependency for the same render pass instance, with a + pname:dstSubpass equal to the subpass of the fname:vkCmdPipelineBarrier. + Or, + *** a fname:vkCmdPipelineBarrier of the same render pass instance, recorded + for the same subpass, before the current dependency. Or, + *** a fname:vkCmdSetEvent/fname:vkCmdWaitEvents pair, where the + fname:vkCmdWaitEvents is inside the same render pass instance, recorded + for the same subpass, before the current dependency. A pair of consecutive execution dependencies in an execution dependency chain accomplishes a dependency between the stages latexmath:[$A$] and @@ -566,6 +601,29 @@ pipeline stages latexmath:[$A$] in the first set of commands completes before the work performed by pipeline stages latexmath:[$B$] in the second set of commands begins. +A command latexmath:[$C_1$] is said to _happen-before_ an execution dependency +latexmath:[$D_2$] for a pipeline stage latexmath:[$S$] if all the following +conditions are true: + + * latexmath:[$C_1$] is in the first set of commands for an execution dependency + latexmath:[$D_1$] that includes latexmath:[$S$] in its pname:srcStageMask. + And, + * there exists an execution dependency chain that includes latexmath:[$D_1$] + and latexmath:[$D_2$], where latexmath:[$D_2$] follows latexmath:[$D_1$] in the + execution dependency sequence. + +Similarly, a command latexmath:[$C_2$] is said to _happen-after_ an execution +dependency latexmath:[$D_1$] for a pipeline stage latexmath:[$S$] if all the +following conditions are true: + + * latexmath:[$C_2$] is in the second set of commands for an execution dependency + latexmath:[$D_2$] that includes latexmath:[$S$] in its pname:dstStageMask. + And, + * there exists an execution dependency chain that includes latexmath:[$D_1$] + and latexmath:[$D_2$], where latexmath:[$D_2$] follows latexmath:[$D_1$] in the + execution dependency sequence. + + An execution dependency is _by-region_ if its pname:dependencyFlags parameter includes ename:VK_DEPENDENCY_BY_REGION_BIT. Such a barrier describes a per-region (x,y,layer) dependency. That is, for each region, the @@ -581,22 +639,23 @@ stages must: have completed for preceding commands before any destination stages starts for subsequent commands. [[synchronization-execution-and-memory-dependencies-available-and-visible]] -_Memory dependencies_ synchronize accesses to memory between two sets of -commands. They operate according to two ``halves'' of a dependency to -synchronize two sets of commands, the commands that execute first vs the -commands that execute second, as described above. The first half of the -dependency makes memory accesses using the set of access types in -pname:srcAccessMask performed in pipeline stages in pname:srcStageMask by -the first set of commands complete and writes be _available_ for subsequent -commands. The second half of the dependency makes any available writes from -previous commands _visible_ to pipeline stages in pname:dstStageMask using -the set of access types in pname:dstAccessMask for the second set of -commands, if those writes have been made available with the first half of -the same or a previous dependency. The two halves of a memory dependency +_Memory dependencies_ are coupled to execution dependencies, and synchronize +accesses to memory between two sets of commands. They operate according to two +``halves'' of a dependency to synchronize two sets of commands, the commands +that happen-before the execution dependency for the pname:srcStageMask vs the +commands that happen-after the execution dependency for the pname:dstStageMask, +as described above. The first half of the dependency makes memory accesses using +the set of access types in pname:srcAccessMask performed in pipeline stages in +pname:srcStageMask by the first set of commands complete and writes be +_available_ for subsequent commands. The second half of the dependency makes any +available writes from previous commands _visible_ to pipeline stages in +pname:dstStageMask using the set of access types in pname:dstAccessMask for the +second set of commands, if those writes have been made available with the first +half of the same or a previous dependency. The two halves of a memory dependency can: either be expressed as part of a single command, or can: be part of separate barriers as long as there is an execution dependency chain between them. The application must: use memory dependencies to make writes visible -before subsequent reads can rely on them, and before subsequent writes can +before subsequent reads can: rely on them, and before subsequent writes can: overwrite them. Failure to do so causes the result of the reads to be undefined, and the order of writes to be undefined. @@ -812,7 +871,8 @@ ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT is useful for accomplishing memory barriers and layout transitions when the next accesses will be done in a different queue or by a presentation engine; in these cases subsequent commands in the same queue do not need to wait, but the barrier or -transition must complete before semaphores associated with the batch signal. +transition must: complete before semaphores associated with the batch +signal. ==== [NOTE] @@ -886,18 +946,18 @@ memory, and image memory. The global memory barrier type is specified with an instance of the sname:VkMemoryBarrier structure. This type of barrier applies to memory accesses involving all memory objects that exist at the time of its -execution. The definition of sname:VkMemoryBarrier is: +execution. + +The sname:VkMemoryBarrier structure is defined as: include::../structs/VkMemoryBarrier.txt[] -The members of sname:VkMemoryBarrier have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. - * pname:srcAccessMask is a mask of the classes of memory accesses + * pname:srcAccessMask is a bitmask of the classes of memory accesses performed by the first set of commands that will participate in the dependency. - * pname:dstAccessMask is a mask of the classes of memory accesses + * pname:dstAccessMask is a bitmask of the classes of memory accesses performed by the second set of commands that will participate in the dependency. @@ -1046,18 +1106,16 @@ specified range of the buffer. It is also used to transfer ownership of a buffer range from one queue family to another, as described in the <> section. -sname:VkBufferMemoryBarrier has the following definition: +The sname:VkBufferMemoryBarrier structure is defined as: include::../structs/VkBufferMemoryBarrier.txt[] -The members of sname:VkBufferMemoryBarrier have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. - * pname:srcAccessMask is a mask of the classes of memory accesses + * pname:srcAccessMask is a bitmask of the classes of memory accesses performed by the first set of commands that will participate in the dependency. - * pname:dstAccessMask is a mask of the classes of memory accesses + * pname:dstAccessMask is a bitmask of the classes of memory accesses performed by the second set of commands that will participate in the dependency. * pname:srcQueueFamilyIndex is the queue family that is relinquishing @@ -1092,18 +1150,16 @@ layout transition for an image subresource range, or to transfer ownership of an image subresource range from one queue family to another as described in the <> section. -sname:VkImageMemoryBarrier has the following definition: +The sname:VkImageMemoryBarrier structure is defined as: include::../structs/VkImageMemoryBarrier.txt[] -The members of sname:VkImageMemoryBarrier have the following meanings: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. - * pname:srcAccessMask is a mask of the classes of memory accesses + * pname:srcAccessMask is a bitmask of the classes of memory accesses performed by the first set of commands that will participate in the dependency. - * pname:dstAccessMask is a mask of the classes of memory accesses + * pname:dstAccessMask is a bitmask of the classes of memory accesses performed by the second set of commands that will participate in the dependency. * pname:oldLayout describes the current layout of the image diff --git a/doc/specs/vulkan/chapters/tessellation.txt b/doc/specs/vulkan/chapters/tessellation.txt index 29710366..885be033 100644 --- a/doc/specs/vulkan/chapters/tessellation.txt +++ b/doc/specs/vulkan/chapters/tessellation.txt @@ -423,14 +423,13 @@ segment are both implementation-dependent. == Tessellation Pipeline State -The pname:pTessellationState member of slink:VkGraphicsPipelineCreateInfo is -of type sname:VkPipelineTessellationStateCreateInfo: +The pname:pTessellationState member of slink:VkGraphicsPipelineCreateInfo +points to a structure of type sname:VkPipelineTessellationStateCreateInfo. + +The sname:VkPipelineTessellationStateCreateInfo structure is defined as: include::../structs/VkPipelineTessellationStateCreateInfo.txt[] -The members of the sname:VkPipelineTessellationStateCreateInfo structure are -as follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. diff --git a/doc/specs/vulkan/chapters/textures.txt b/doc/specs/vulkan/chapters/textures.txt index 60e3a300..4c2e6cd8 100644 --- a/doc/specs/vulkan/chapters/textures.txt +++ b/doc/specs/vulkan/chapters/textures.txt @@ -365,7 +365,7 @@ These cases include: pname:shaderStorageImageReadWithoutFormat feature is not enabled, or the instruction is code:OpImageWrite and the pname:shaderStorageImageWriteWithoutFormat feature is not enabled, then - the SPIR-V Image Format must be <> + the SPIR-V Image Format must: be <> with the image view's pname:format. * The sampler pname:unnormalizedCoordinates is ename:VK_TRUE and any of the <> section for each elink:VkFormat), using the appropriate equations in <> and -<>. +<>. == Derivative Operations diff --git a/doc/specs/vulkan/chapters/vertexpostproc.txt b/doc/specs/vulkan/chapters/vertexpostproc.txt index 7d377838..b8a4267b 100644 --- a/doc/specs/vulkan/chapters/vertexpostproc.txt +++ b/doc/specs/vulkan/chapters/vertexpostproc.txt @@ -17,7 +17,7 @@ operations are applied to vertices of the resulting primitives: * Viewport mapping, including depth range scaling (see <>). * Front face determination for polygon primitives (see - <>). + <>). ifdef::editing-notes[] [NOTE] @@ -288,24 +288,23 @@ Multiple viewports are available, numbered zero up to sname:VkPhysicalDeviceLimits::pname:maxViewports minus one. The number of viewports used by a pipeline is controlled by the pname:viewportCount member of the sname:VkPipelineViewportStateCreateInfo structure used in pipeline -creation: +creation. + +The sname:VkPipelineViewportStateCreateInfo structure is defined as: include::../structs/VkPipelineViewportStateCreateInfo.txt[] -The members of the sname:VkPipelineViewportStateCreateInfo structure are as -follows: - * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:flags is reserved for future use. * pname:viewportCount is the number of viewports used by the pipeline. - * pname:pViewports is a pointer to an array of slink:VkViewport structs, - defining the viewport transforms. If the viewport state is dynamic, this - member is ignored. + * pname:pViewports is a pointer to an array of slink:VkViewport + structures, defining the viewport transforms. If the viewport state is + dynamic, this member is ignored. * pname:scissorCount is the number of <> and must: match the number of viewports. - * pname:pScissors is a pointer to an array of sname:VkRect2D structs which - define the rectangular bounds of the scissor for the corresponding + * pname:pScissors is a pointer to an array of sname:VkRect2D structures + which define the rectangular bounds of the scissor for the corresponding viewport. If the scissor state is dynamic, this member is ignored. include::../validity/structs/VkPipelineViewportStateCreateInfo.txt[] diff --git a/doc/specs/vulkan/checkLinks.py b/doc/specs/vulkan/checkLinks.py index 8c2d8e9a..b624c9a0 100755 --- a/doc/specs/vulkan/checkLinks.py +++ b/doc/specs/vulkan/checkLinks.py @@ -2,24 +2,17 @@ # # Copyright (c) 2015-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # checkLinks.py - validate link/reference API constructs in files # diff --git a/doc/specs/vulkan/man/vkBeginCommandBuffer.txt b/doc/specs/vulkan/man/vkBeginCommandBuffer.txt index bc29d499..46b5d179 100644 --- a/doc/specs/vulkan/man/vkBeginCommandBuffer.txt +++ b/doc/specs/vulkan/man/vkBeginCommandBuffer.txt @@ -79,7 +79,7 @@ should be clear. Secondary command buffers may be referenced at most once from a primary command buffer (even the same primary command buffer) unless ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT is set. -The pname:renderPass and pname:framebuffer members must be sname:VK_NULL_HANDLE +The pname:renderPass and pname:framebuffer members must be code:VK_NULL_HANDLE for primary command buffers. For secondary command buffers, they must refer to the render pass and framebuffer that will be active when the secondary command buffer is called. diff --git a/doc/specs/vulkan/man/vkCmdClearAttachments.txt b/doc/specs/vulkan/man/vkCmdClearAttachments.txt index 64ade8b8..ded402b7 100644 --- a/doc/specs/vulkan/man/vkCmdClearAttachments.txt +++ b/doc/specs/vulkan/man/vkCmdClearAttachments.txt @@ -58,7 +58,7 @@ of the slink:VkClearValue union, the definition of which is: include::../structs/VkClearValue.txt[] If the attachment and aspect referenced by ptext:aspectMask and -ptext:colorAttachment is a color attachment, the the values contained in the +ptext:colorAttachment is a color attachment, the values contained in the pname:color field of slink:VkClearValue is used to clear the attachment regions. If the attachment and aspect referenced by ptext:aspectMask and ptext:colorAttachment is a depth, stencil or depth-stencil attachment, then diff --git a/doc/specs/vulkan/man/vkCmdClearDepthStencilImage.txt b/doc/specs/vulkan/man/vkCmdClearDepthStencilImage.txt index 2dd29f15..bef55be2 100644 --- a/doc/specs/vulkan/man/vkCmdClearDepthStencilImage.txt +++ b/doc/specs/vulkan/man/vkCmdClearDepthStencilImage.txt @@ -41,7 +41,7 @@ slink:VkClearDepthStencilValue structure, the definition of which is: include::../structs/VkClearDepthStencilValue.txt[] -The pname:depth and pname:stencil members contain the value to clear the the +The pname:depth and pname:stencil members contain the value to clear the depth and stencil aspects of the image to, respectively. pname:imageLayout specifies the layout of the image being cleared. pname:pRanges points to an array pname:rangeCount regions of the image are cleared, each of which is described diff --git a/doc/specs/vulkan/man/vkCmdDrawIndirect.txt b/doc/specs/vulkan/man/vkCmdDrawIndirect.txt index cb38a73c..320d5e33 100644 --- a/doc/specs/vulkan/man/vkCmdDrawIndirect.txt +++ b/doc/specs/vulkan/man/vkCmdDrawIndirect.txt @@ -38,7 +38,7 @@ indirect command consumes pname:drawCount structures, stored at pname:offset bytes into the buffer object whose handle is specified in pname:buffer. The beginning of each structure is pname:stride bytes from the previous. The data structures have the a layout in memory which may be represented by -the the slink:VkDrawIndirectCommand structure, the definition of which is: +the slink:VkDrawIndirectCommand structure, the definition of which is: include::../structs/VkDrawIndirectCommand.txt[] diff --git a/doc/specs/vulkan/man/vkCreateComputePipelines.txt b/doc/specs/vulkan/man/vkCreateComputePipelines.txt index 2be29115..4b914d3a 100644 --- a/doc/specs/vulkan/man/vkCreateComputePipelines.txt +++ b/doc/specs/vulkan/man/vkCreateComputePipelines.txt @@ -58,7 +58,7 @@ compute shader. pipeline and the descritor sets. - pname:basePipelineHandle the pipeline to derive from (can be -VK_NULL_HANDLE, if pipeline is not derived). + code:VK_NULL_HANDLE, if pipeline is not derived). - pname:basePipelineIndex the index into the pname:pCreateInfos parameter to fname:vkCreateComputePipelines. @@ -71,7 +71,7 @@ earlier than the current sname:VkComputePipelineCreateInfo in the list. The parameters pname:basePipelineHandle and pname:basePipelineIndex are mutually exclusive. If you specify a valid pname:basePipelineHandle, pname:basePipelineIndex must be set to -1. If you specify a valid -pname:basePipelineIndex, pname:basePipelineHandle must be VK_NULL_HANDLE. +pname:basePipelineIndex, pname:basePipelineHandle must be code:VK_NULL_HANDLE. include::../validity/protos/vkCreateComputePipelines.txt[] diff --git a/doc/specs/vulkan/man/vkGetImageSubresourceLayout.txt b/doc/specs/vulkan/man/vkGetImageSubresourceLayout.txt index 176f7068..4e4e16ae 100644 --- a/doc/specs/vulkan/man/vkGetImageSubresourceLayout.txt +++ b/doc/specs/vulkan/man/vkGetImageSubresourceLayout.txt @@ -48,7 +48,7 @@ The ename:VK_IMAGE_ASPECT_COLOR_BIT aspect is valid only for image formats that ename:VK_IMAGE_ASPECT_DEPTH_BIT aspect is valid for formats containing depth information and the ename:VK_IMAGE_ASPECT_STENCIL_BIT aspect is valid only for formats containing stencil information. Note that some formats contain both depth and stencil information, and -in this case, pname:aspectMask is is used to select which to query. It is not legal to include more than +in this case, pname:aspectMask is used to select which to query. It is not legal to include more than one member of elink:VkImageAspectFlagBits in pname:aspectMask. Some formats also include metadata which may be implementation dependent but is queryable by specifying ename:VK_IMAGE_ASPECT_METADATA_BIT. diff --git a/doc/specs/vulkan/style/styleguide.txt b/doc/specs/vulkan/style/styleguide.txt index 53a9a7af..770d18aa 100644 --- a/doc/specs/vulkan/style/styleguide.txt +++ b/doc/specs/vulkan/style/styleguide.txt @@ -271,9 +271,11 @@ following table: slink:VkCommandPoolCreateInfo. | sname{cl} | Formats the macro argument like slink{cl}. Does not generate a cross-reference. May also be an abstract - structure name. Examples: sname{cl}VkCommandPoolCreateInfo - -> sname:VkCommandPoolCreateInfo, sname{cl}VK_NULL_HANDLE - -> sname:VK_NULL_HANDLE. The slink{cl} macro is preferred. + structure or handle name. Example: + sname{cl}VkCommandPoolCreateInfo -> + sname:VkCommandPoolCreateInfo. The slink{cl} macro is + preferred if a definition of the target type with an + anchor exists in the document. | stext{cl} | Formats the macro argument like sname{cl}. May contain asterisks for wildcards. Not validated. Example: stext{cl}Vk*CreateInfo -> stext:Vk*CreateInfo. @@ -323,7 +325,8 @@ following table: basetype{cl}VkDeviceSize -> basetype:VkDeviceSize. | code{cl} | Formats the macro argument as a code sample. Primarily used for SPIR-V keywords. Examples: code{cl}ClipDistance - -> code:ClipDistance, code{cl}NULL -> code:NULL. + -> code:ClipDistance, code{cl}VK_NULL_HANDLE -> + code:VK_NULL_HANDLE, code{cl}NULL -> code:NULL. |===== diff --git a/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt b/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt index d3c99332..ba5d69e1 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdClearColorImage.txt @@ -21,6 +21,7 @@ endif::doctype-manpage[] * pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice * pname:imageLayout must: be either of ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL * The image range of any given element of pname:pRanges must: be a image subresource range that is contained within pname:image +* pname:image mustnot: have a compressed or depth/stencil format ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt b/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt index d70566c2..1d635617 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdClearDepthStencilImage.txt @@ -21,6 +21,7 @@ endif::doctype-manpage[] * pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice * pname:imageLayout must: be either of ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL * The image range of any given element of pname:pRanges must: be a image subresource range that is contained within pname:image +* pname:image must: have a depth/stencil format ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdCopyQueryPoolResults.txt b/doc/specs/vulkan/validity/protos/vkCmdCopyQueryPoolResults.txt index a7c09306..34847878 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdCopyQueryPoolResults.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdCopyQueryPoolResults.txt @@ -18,10 +18,10 @@ endif::doctype-manpage[] * pname:dstOffset must: be less than the size of pname:dstBuffer * pname:firstQuery must: be less than the number of queries in pname:queryPool * The sum of pname:firstQuery and pname:queryCount must: be less than or equal to the number of queries in pname:queryPool -* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:dstOffset and pname:stride must be multiples of `4` -* If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:dstOffset and pname:stride must be multiples of `8` +* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:dstOffset and pname:stride must: be multiples of `4` +* If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:dstOffset and pname:stride must: be multiples of `8` * pname:dstBuffer must: have enough storage, from pname:dstOffset, to contain the result of each query, as described <> -* pname:dstBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag +* pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag * If the pname:queryType used to create pname:queryPool was ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags mustnot: contain ename:VK_QUERY_RESULT_PARTIAL_BIT ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/protos/vkCmdDispatch.txt b/doc/specs/vulkan/validity/protos/vkCmdDispatch.txt index 00ca3c2c..d91b3f33 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDispatch.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDispatch.txt @@ -23,7 +23,7 @@ endif::doctype-manpage[] * 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 with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that includes a lod bias or any offset values, in any shader stage * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set -* Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt b/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt index 6bf0ed50..9af07848 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDispatchIndirect.txt @@ -25,7 +25,7 @@ endif::doctype-manpage[] * 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 with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that includes a lod bias or any offset values, in any shader stage * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set -* Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdDraw.txt b/doc/specs/vulkan/validity/protos/vkCmdDraw.txt index 89e75d28..b0e12e44 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDraw.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDraw.txt @@ -24,7 +24,7 @@ endif::doctype-manpage[] * 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 that includes a lod bias or any offset values, in any shader stage * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set -* Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt index ae4923f3..94aa5840 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexed.txt @@ -25,7 +25,7 @@ endif::doctype-manpage[] * 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 that includes a lod bias or any offset values, in any shader stage * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set -* Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt index 8640127c..54d65d2d 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDrawIndexedIndirect.txt @@ -32,7 +32,7 @@ endif::doctype-manpage[] * 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 that includes a lod bias or any offset values, in any shader stage * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set -* Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt b/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt index d421f4bb..52ee2b89 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdDrawIndirect.txt @@ -32,7 +32,7 @@ endif::doctype-manpage[] * 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 that includes a lod bias or any offset values, in any shader stage * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set * If the <> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set -* Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties +* Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkCmdPipelineBarrier.txt b/doc/specs/vulkan/validity/protos/vkCmdPipelineBarrier.txt index c7ee7408..31d27122 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdPipelineBarrier.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdPipelineBarrier.txt @@ -21,7 +21,7 @@ endif::doctype-manpage[] * If the <> feature is not enabled, pname:srcStageMask mustnot: contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT * 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 pname: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 * If fname:vkCmdPipelineBarrier is called within a render pass instance, the render pass must: declare at least one self-dependency from the current subpass to itself - see <> ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt b/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt index ed588a52..1d5261b8 100644 --- a/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt +++ b/doc/specs/vulkan/validity/protos/vkGetQueryPoolResults.txt @@ -15,8 +15,8 @@ endif::doctype-manpage[] * 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 -* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:pData and pname:stride must be multiples of `4` -* If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData and pname:stride must be multiples of `8` +* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:pData and pname:stride must: be multiples of `4` +* If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData and pname:stride must: be multiples of `8` * The sum of pname:firstQuery and pname:queryCount must: be less than or equal to the number of queries in pname:queryPool * pname:dataSize must: be large enough to contain the result of each query, as described <> * If the pname:queryType used to create pname:queryPool was ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags mustnot: contain ename:VK_QUERY_RESULT_PARTIAL_BIT diff --git a/doc/specs/vulkan/validity/structs/VkBufferImageCopy.txt b/doc/specs/vulkan/validity/structs/VkBufferImageCopy.txt index dc8bb35c..3a8df78b 100644 --- a/doc/specs/vulkan/validity/structs/VkBufferImageCopy.txt +++ b/doc/specs/vulkan/validity/structs/VkBufferImageCopy.txt @@ -23,7 +23,7 @@ endif::doctype-manpage[] * pname:imageExtent.width must: be a multiple of the compressed texel block width or (pname:imageExtent.width + pname:imageOffset.x) must: equal the image subresource width * pname:imageExtent.height must: be a multiple of the compressed texel block height or (pname:imageExtent.height + pname:imageOffset.y) must: equal the image subresource height * pname:imageExtent.depth must: be a multiple of the compressed texel block depth or (pname:imageExtent.depth + pname:imageOffset.z) must: equal the image subresource depth -* pname:bufferOffset, pname:bufferRowLength, pname:bufferImageHeight and all members of pname:imageOffset and pname:imageExtent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <> +* pname:bufferOffset, pname:bufferRowLength, pname:bufferImageHeight and all members of pname:imageOffset and pname:imageExtent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <> * The pname:aspectMask member of pname:imageSubresource must: specify aspects present in the calling command's sname:VkImage parameter * The pname:aspectMask member of pname:imageSubresource must: only have a single bit set * If the calling command's sname:VkImage parameter is of elink:VkImageType ename:VK_IMAGE_TYPE_3D, the pname:baseArrayLayer and pname:layerCount members of pname:imageSubresource must: be `0` and `1`, respectively diff --git a/doc/specs/vulkan/validity/structs/VkImageCopy.txt b/doc/specs/vulkan/validity/structs/VkImageCopy.txt index 4d186098..0254a1d7 100644 --- a/doc/specs/vulkan/validity/structs/VkImageCopy.txt +++ b/doc/specs/vulkan/validity/structs/VkImageCopy.txt @@ -30,7 +30,7 @@ endif::doctype-manpage[] * pname:extent.width must: be a multiple of the compressed texel block width or (pname:extent.width + pname:dstOffset.x) must: equal the destination image subresource width * pname:extent.height must: be a multiple of the compressed texel block height or (pname:extent.height + pname:dstOffset.y) must: equal the destination image subresource height * pname:extent.depth must: be a multiple of the compressed texel block depth or (pname:extent.depth + pname:dstOffset.z) must: equal the destination image subresource depth -* pname:srcOffset, pname:dstOffset, and pname:extent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <> +* pname:srcOffset, pname:dstOffset, and pname:extent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <> ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt index 805d38bf..dcb7856c 100644 --- a/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkImageCreateInfo.txt @@ -37,13 +37,13 @@ endif::doctype-manpage[] * pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or sname:VkImageFormatProperties::pname: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 pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts +* 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:framebufferDepthSampleCounts +* 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:framebufferStencilSampleCounts +* 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:sampledImageColorSampleCounts +* 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:sampledImageDepthSampleCounts +* 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:sampledImageIntegerSampleCounts +* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts * 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 diff --git a/doc/specs/vulkan/validity/structs/VkPipelineColorBlendAttachmentState.txt b/doc/specs/vulkan/validity/structs/VkPipelineColorBlendAttachmentState.txt index 6fa92884..ac66cd9d 100644 --- a/doc/specs/vulkan/validity/structs/VkPipelineColorBlendAttachmentState.txt +++ b/doc/specs/vulkan/validity/structs/VkPipelineColorBlendAttachmentState.txt @@ -14,10 +14,10 @@ endif::doctype-manpage[] * pname:dstAlphaBlendFactor must: be a valid elink:VkBlendFactor value * pname:alphaBlendOp must: be a valid elink:VkBlendOp value * pname:colorWriteMask must: be a valid combination of elink:VkColorComponentFlagBits values -* If the <> feature is not enabled, pname:srcColorBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA -* If the <> feature is not enabled, pname:dstColorBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA -* If the <> feature is not enabled, pname:srcAlphaBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA -* If the <> feature is not enabled, pname:dstAlphaBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA +* If the <> feature is not enabled, pname:srcColorBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA +* If the <> feature is not enabled, pname:dstColorBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA +* If the <> feature is not enabled, pname:srcAlphaBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA +* If the <> feature is not enabled, pname:dstAlphaBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkSpecializationInfo.txt b/doc/specs/vulkan/validity/structs/VkSpecializationInfo.txt index 7053c7f8..26e8b37d 100644 --- a/doc/specs/vulkan/validity/structs/VkSpecializationInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkSpecializationInfo.txt @@ -10,7 +10,7 @@ endif::doctype-manpage[] * If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer to an array of pname:mapEntryCount sname:VkSpecializationMapEntry structures * If pname:dataSize is not `0`, pname:pData must: be a pointer to an array of pname:dataSize bytes * The pname:offset member of any given element of pname:pMapEntries must: be less than pname:dataSize -* For any given element of pname:pMapEntries, pname:size must be less than or equal to pname:dataSize minus pname:offset +* For any given element of pname:pMapEntries, pname:size must: be less than or equal to pname:dataSize minus pname:offset 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 a2f507e2..4f39e801 100644 --- a/doc/specs/vulkan/validity/structs/VkSubpassDescription.txt +++ b/doc/specs/vulkan/validity/structs/VkSubpassDescription.txt @@ -25,7 +25,7 @@ endif::doctype-manpage[] * If any input attachments are ename:VK_ATTACHMENT_UNUSED, then any pipelines bound during the subpass mustnot: accesss those input attachments from the fragment shader * The pname:attachment member of any element of pname:pPreserveAttachments mustnot: be ename:VK_ATTACHMENT_UNUSED * Any given element of pname:pPreserveAttachments mustnot: also be an element of any other member of the subpass description -* If any attachment is used as both an input attachment and a color or depth/stencil attachment, then each use must use the same pname:layout +* If any attachment is used as both an input attachment and a color or depth/stencil attachment, then each use must: use the same pname:layout ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/src/spec/Makefile b/src/spec/Makefile index cb86f406..b8f15fe4 100644 --- a/src/spec/Makefile +++ b/src/spec/Makefile @@ -1,23 +1,16 @@ # Copyright (c) 2013-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Generator scripts and options # GENOPTS can be e.g. '-noprotect' diff --git a/src/spec/generator.py b/src/spec/generator.py index 70451c47..00a274be 100644 --- a/src/spec/generator.py +++ b/src/spec/generator.py @@ -2,24 +2,17 @@ # # Copyright (c) 2013-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import os,re,sys @@ -765,9 +758,9 @@ class COutputGenerator(OutputGenerator): def genGroup(self, groupinfo, groupName): OutputGenerator.genGroup(self, groupinfo, groupName) groupElem = groupinfo.elem - + expandName = re.sub(r'([0-9a-z_])([A-Z0-9][^A-Z0-9]?)',r'\1_\2',groupName).upper() - + expandPrefix = expandName expandSuffix = '' expandSuffixMatch = re.search(r'[A-Z][A-Z]+$',groupName) @@ -775,12 +768,12 @@ class COutputGenerator(OutputGenerator): expandSuffix = '_' + expandSuffixMatch.group() # Strip off the suffix from the prefix expandPrefix = expandName.rsplit(expandSuffix, 1)[0] - + # Prefix body = "\ntypedef enum " + groupName + " {\n" - + isEnum = ('FLAG_BITS' not in expandPrefix) - + # Loop over the nested 'enum' tags. Keep track of the minimum and # maximum numeric values, if they can be determined; but only for # core API enumerants, not extension enumerants. This is inferred @@ -816,9 +809,9 @@ class COutputGenerator(OutputGenerator): body += " " + expandPrefix + "_BEGIN_RANGE" + expandSuffix + " = " + minName + ",\n" body += " " + expandPrefix + "_END_RANGE" + expandSuffix + " = " + maxName + ",\n" body += " " + expandPrefix + "_RANGE_SIZE" + expandSuffix + " = (" + maxName + " - " + minName + " + 1),\n" - + body += " " + expandPrefix + "_MAX_ENUM" + expandSuffix + " = 0x7FFFFFFF\n" - + # Postfix body += "} " + groupName + ";" if groupElem.get('type') == 'bitmask': @@ -964,24 +957,24 @@ class DocOutputGenerator(OutputGenerator): def genGroup(self, groupinfo, groupName): OutputGenerator.genGroup(self, groupinfo, groupName) groupElem = groupinfo.elem - + # See if we need min/max/num/padding at end expand = self.genOpts.expandEnumerants - + if expand: expandName = re.sub(r'([0-9a-z_])([A-Z0-9][^A-Z0-9]?)',r'\1_\2',groupName).upper() isEnum = ('FLAG_BITS' not in expandName) - + expandPrefix = expandName expandSuffix = '' - + # Look for a suffix expandSuffixMatch = re.search(r'[A-Z][A-Z]+$',groupName) if expandSuffixMatch: expandSuffix = '_' + expandSuffixMatch.group() # Strip off the suffix from the prefix expandPrefix = expandName.rsplit(expandSuffix, 1)[0] - + # Prefix s = "typedef enum " + groupName + " {\n" @@ -1020,7 +1013,7 @@ class DocOutputGenerator(OutputGenerator): s += " " + expandPrefix + "_BEGIN_RANGE" + expandSuffix + " = " + minName + ",\n" s += " " + expandPrefix + "_END_RANGE" + expandSuffix + " = " + maxName + ",\n" s += " " + expandPrefix + "_RANGE_SIZE" + expandSuffix + " = (" + maxName + " - " + minName + " + 1),\n" - + s += " " + expandPrefix + "_MAX_ENUM" + expandSuffix + " = 0x7FFFFFFF\n" # Postfix s += "} " + groupName + ";" @@ -2087,7 +2080,7 @@ class ValidityOutputGenerator(OutputGenerator): 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) @@ -2114,7 +2107,7 @@ class ValidityOutputGenerator(OutputGenerator): 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/genvk.py b/src/spec/genvk.py index c9a37175..334090c3 100755 --- a/src/spec/genvk.py +++ b/src/spec/genvk.py @@ -2,24 +2,17 @@ # # Copyright (c) 2013-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import sys, time, pdb, string, cProfile from reg import * @@ -125,24 +118,17 @@ prefixStrings = [ '/*', '** Copyright (c) 2015-2016 The Khronos Group Inc.', '**', - '** Permission is hereby granted, free of charge, to any person obtaining a', - '** copy of this software and/or associated documentation files (the', - '** "Materials"), to deal in the Materials without restriction, including', - '** without limitation the rights to use, copy, modify, merge, publish,', - '** distribute, sublicense, and/or sell copies of the Materials, and to', - '** permit persons to whom the Materials are furnished to do so, subject to', - '** the following conditions:', + '** Licensed under the Apache License, Version 2.0 (the "License");', + '** you may not use this file except in compliance with the License.', + '** You may obtain a copy of the License at', '**', - '** The above copyright notice and this permission notice shall be included', - '** in all copies or substantial portions of the Materials.', + '** http://www.apache.org/licenses/LICENSE-2.0', '**', - '** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,', - '** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF', - '** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.', - '** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY', - '** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,', - '** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE', - '** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.', + '** Unless required by applicable law or agreed to in writing, software', + '** distributed under the License is distributed on an "AS IS" BASIS,', + '** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.', + '** See the License for the specific language governing permissions and', + '** limitations under the License.', '*/', '' ] diff --git a/src/spec/readme.tex b/src/spec/readme.tex index 8c4fd1fc..ded33a17 100644 --- a/src/spec/readme.tex +++ b/src/spec/readme.tex @@ -1,23 +1,16 @@ % Copyright (c) 2013-2016 The Khronos Group Inc. % -% Permission is hereby granted, free of charge, to any person obtaining a -% copy of this software and/or associated documentation files (the -% "Materials"), to deal in the Materials without restriction, including -% without limitation the rights to use, copy, modify, merge, publish, -% distribute, sublicense, and/or sell copies of the Materials, and to -% permit persons to whom the Materials are furnished to do so, subject to -% the following conditions: +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at % -% The above copyright notice and this permission notice shall be included -% in all copies or substantial portions of the Materials. +% http://www.apache.org/licenses/LICENSE-2.0 % -% THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -% IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -% CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -% TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -% MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and +% limitations under the License. \documentclass{article} diff --git a/src/spec/realign.py b/src/spec/realign.py index c37527e4..2e697217 100755 --- a/src/spec/realign.py +++ b/src/spec/realign.py @@ -2,24 +2,17 @@ # # Copyright (c) 2013-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Usage: realign [infile] > outfile # Used to realign XML tags in the Vulkan registry after it's operated on by diff --git a/src/spec/reg.py b/src/spec/reg.py index 155df78e..f76be20c 100755 --- a/src/spec/reg.py +++ b/src/spec/reg.py @@ -2,24 +2,17 @@ # # Copyright (c) 2013-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import io,os,re,string,sys,copy from lxml import etree @@ -102,7 +95,7 @@ class TypeInfo(BaseInfo): 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): @@ -499,7 +492,7 @@ 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. @@ -510,7 +503,7 @@ class Registry: 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'): @@ -602,17 +595,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. - 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 diff --git a/src/spec/registry.rnc b/src/spec/registry.rnc index 9518b109..1ac7d095 100644 --- a/src/spec/registry.rnc +++ b/src/spec/registry.rnc @@ -1,23 +1,16 @@ # Copyright (c) 2013-2016 The Khronos Group Inc. # -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and/or associated documentation files (the -# "Materials"), to deal in the Materials without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Materials, and to -# permit persons to whom the Materials are furnished to do so, subject to -# the following conditions: +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Materials. +# http://www.apache.org/licenses/LICENSE-2.0 # -# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Relax NG schema for Khronos Vulkan API Registry XML # diff --git a/src/spec/vk.xml b/src/spec/vk.xml index da243dae..9d6d4d7c 100644 --- a/src/spec/vk.xml +++ b/src/spec/vk.xml @@ -101,7 +101,7 @@ maintained in the master branch of the Khronos Vulkan Github project. // 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 10 +#define VK_HEADER_VERSION 11 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -822,13 +822,13 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or sname:VkImageFormatProperties::pname: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 pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts + 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:framebufferDepthSampleCounts + 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:framebufferStencilSampleCounts + 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:sampledImageColorSampleCounts + 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:sampledImageDepthSampleCounts + 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:sampledImageIntegerSampleCounts + If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be a bit value that is set in sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts 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 @@ -987,7 +987,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:extent.width must: be a multiple of the compressed texel block width or (pname:extent.width + pname:dstOffset.x) must: equal the destination image subresource width pname:extent.height must: be a multiple of the compressed texel block height or (pname:extent.height + pname:dstOffset.y) must: equal the destination image subresource height pname:extent.depth must: be a multiple of the compressed texel block depth or (pname:extent.depth + pname:dstOffset.z) must: equal the destination image subresource depth - pname:srcOffset, pname:dstOffset, and pname:extent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <<execution-physical-device-enumeration,Physical Device Enumeration>> + pname:srcOffset, pname:dstOffset, and pname:extent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <<devsandqueues-physical-device-enumeration,Physical Device Enumeration>> @@ -1032,7 +1032,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:imageExtent.width must: be a multiple of the compressed texel block width or (pname:imageExtent.width + pname:imageOffset.x) must: equal the image subresource width pname:imageExtent.height must: be a multiple of the compressed texel block height or (pname:imageExtent.height + pname:imageOffset.y) must: equal the image subresource height pname:imageExtent.depth must: be a multiple of the compressed texel block depth or (pname:imageExtent.depth + pname:imageOffset.z) must: equal the image subresource depth - pname:bufferOffset, pname:bufferRowLength, pname:bufferImageHeight and all members of pname:imageOffset and pname:imageExtent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <<execution-physical-device-enumeration,Physical Device Enumeration>> + pname:bufferOffset, pname:bufferRowLength, pname:bufferImageHeight and all members of pname:imageOffset and pname:imageExtent must: respect the image transfer granularity requirements of the queue family that it will be submitted against, as described in <<devsandqueues-physical-device-enumeration,Physical Device Enumeration>> The pname:aspectMask member of pname:imageSubresource must: specify aspects present in the calling command's sname:VkImage parameter The pname:aspectMask member of pname:imageSubresource must: only have a single bit set If the calling command's sname:VkImage parameter is of elink:VkImageType ename:VK_IMAGE_TYPE_3D, the pname:baseArrayLayer and pname:layerCount members of pname:imageSubresource must: be `0` and `1`, respectively @@ -1125,7 +1125,7 @@ maintained in the master branch of the Khronos Vulkan Github project. const void* pData The pname:offset member of any given element of pname:pMapEntries must: be less than pname:dataSize - For any given element of pname:pMapEntries, pname:size must be less than or equal to pname:dataSize minus pname:offset + For any given element of pname:pMapEntries, pname:size must: be less than or equal to pname:dataSize minus pname:offset @@ -1294,10 +1294,10 @@ maintained in the master branch of the Khronos Vulkan Github project. VkBlendOp alphaBlendOp VkColorComponentFlags colorWriteMask - If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:srcColorBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA - If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:dstColorBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA - If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:srcAlphaBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA - If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:dstAlphaBlendFactor mustnot: be ename:VK_BLEND_SRC1_COLOR, ename:VK_BLEND_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_SRC1_ALPHA, or ename:VK_BLEND_ONE_MINUS_SRC1_ALPHA + If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:srcColorBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA + If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:dstColorBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA + If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:srcAlphaBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA + If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:dstAlphaBlendFactor mustnot: be ename:VK_BLEND_FACTOR_SRC1_COLOR, ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, ename:VK_BLEND_FACTOR_SRC1_ALPHA, or ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA @@ -1596,7 +1596,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If any input attachments are ename:VK_ATTACHMENT_UNUSED, then any pipelines bound during the subpass mustnot: accesss those input attachments from the fragment shader The pname:attachment member of any element of pname:pPreserveAttachments mustnot: be ename:VK_ATTACHMENT_UNUSED Any given element of pname:pPreserveAttachments mustnot: also be an element of any other member of the subpass description - If any attachment is used as both an input attachment and a color or depth/stencil attachment, then each use must use the same pname:layout + If any attachment is used as both an input attachment and a color or depth/stencil attachment, then each use must: use the same pname:layout @@ -1967,8 +1967,8 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDisplayModeCreateFlagsKHR flags VkDisplayModeParametersKHR parameters - The pname:width and pname:height members of the pname:visibleRegion member of pname:parameters must be greater than `0` - The pname:refreshRate member of pname:parameters must be greater than `0` + The pname:width and pname:height members of the pname:visibleRegion member of pname:parameters must: be greater than `0` + The pname:refreshRate member of pname:parameters must: be greater than `0` @@ -1998,7 +1998,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If the pname:planeReorderPossible member of the sname:VkDisplayPropertiesKHR structure returned by fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display corresponding to pname:displayMode is ename:VK_TRUE then pname:planeStackIndex must: be less than the number of display planes supported by the device as determined by calling fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR; otherwise pname:planeStackIndex must: equal the pname:currentStackIndex member of sname:VkDisplayPlanePropertiesKHR returned by fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR for the display plane corresponding to pname:displayMode If pname:alphaMode is ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR then pname:globalAlpha must: be between `0` and `1`, inclusive pname:alphaMode must: be `0` or one of the bits present in the pname:supportedAlpha member of sname:VkDisplayPlaneCapabilitiesKHR returned by fname:vkGetDisplayPlaneCapabilitiesKHR for the display plane corresponding to pname:displayMode - The pname:width and pname:height members of pname:imageExtent must be less than the pname:maxImageDimensions2D member of sname:VkPhysicalDeviceLimits + The pname:width and pname:height members of pname:imageExtent must: be less than the pname:maxImageDimensions2D member of sname:VkPhysicalDeviceLimits @@ -2111,14 +2111,14 @@ maintained in the master branch of the Khronos Vulkan Github project. VkStructureType sType const void* pNext - uint32_t waitSemaphoreCount + uint32_t waitSemaphoreCount const VkSemaphore* pWaitSemaphores uint32_t swapchainCount const VkSwapchainKHR* pSwapchains const uint32_t* pImageIndices VkResult* pResults - Any given element of pname:pImageIndices must: be the index of a presentable image acquired from the swapchain specified by the corresponding element of the pname:pSwapchains array that is owned by the application + Any given element of pname:pImageIndices must: be the index of a presentable image acquired from the swapchain specified by the corresponding element of the pname:pSwapchains array Any given element of sname:VkSemaphore in pname:pWaitSemaphores must: refer to a prior signal of that sname:VkSemaphore that won't be consumed by any other wait on that semaphore @@ -2665,7 +2665,7 @@ maintained in the master branch of the Khronos Vulkan Github project. - + @@ -2694,8 +2694,8 @@ maintained in the master branch of the Khronos Vulkan Github project. - - + + @@ -2720,8 +2720,8 @@ maintained in the master branch of the Khronos Vulkan Github project. - - + + @@ -2777,7 +2777,7 @@ maintained in the master branch of the Khronos Vulkan Github project. - + @@ -2801,7 +2801,7 @@ maintained in the master branch of the Khronos Vulkan Github project. - + @@ -2826,14 +2826,14 @@ maintained in the master branch of the Khronos Vulkan Github project. - - + + - + - + @@ -2850,7 +2850,7 @@ maintained in the master branch of the Khronos Vulkan Github project. - + @@ -3358,8 +3358,8 @@ maintained in the master branch of the Khronos Vulkan Github project. VkQueryResultFlags flags pname:firstQuery must: be less than the number of queries in pname:queryPool - If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:pData and pname:stride must be multiples of `4` - If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData and pname:stride must be multiples of `8` + If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:pData and pname:stride must: be multiples of `4` + If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData and pname:stride must: be multiples of `8` The sum of pname:firstQuery and pname:queryCount must: be less than or equal to the number of queries in pname:queryPool pname:dataSize must: be large enough to contain the result of each query, as described <<queries-operation-memorylayout,here>> If the pname:queryType used to create pname:queryPool was ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags mustnot: contain ename:VK_QUERY_RESULT_PARTIAL_BIT @@ -3918,7 +3918,7 @@ maintained in the master branch of the Khronos Vulkan Github project. 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 that includes a lod bias or any offset values, in any shader stage If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set - Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -3944,7 +3944,7 @@ maintained in the master branch of the Khronos Vulkan Github project. 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 that includes a lod bias or any offset values, in any shader stage If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set - Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -3974,7 +3974,7 @@ maintained in the master branch of the Khronos Vulkan Github project. 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 that includes a lod bias or any offset values, in any shader stage If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set - Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -4004,7 +4004,7 @@ maintained in the master branch of the Khronos Vulkan Github project. 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 that includes a lod bias or any offset values, in any shader stage If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set - Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -4026,7 +4026,7 @@ maintained in the master branch of the Khronos Vulkan Github project. 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 with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that includes a lod bias or any offset values, in any shader stage If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set - Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -4047,7 +4047,7 @@ maintained in the master branch of the Khronos Vulkan Github project. 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 with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that includes a lod bias or any offset values, in any shader stage If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a uniform buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set If the <<features-features-robustBufferAccess,robust buffer access>> feature is not enabled, and any shader stage in the sname:VkPipeline object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage buffer, it mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set - Any slink:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties + Any sname:VkImage being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -4204,6 +4204,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice pname:imageLayout must: be either of ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL The image range of any given element of pname:pRanges must: be a image subresource range that is contained within pname:image + pname:image mustnot: have a compressed or depth/stencil format @@ -4219,6 +4220,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:imageLayout must: specify the layout of the image subresource ranges of pname:image specified in pname:pRanges at the time this command is executed on a sname:VkDevice pname:imageLayout must: be either of ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL The image range of any given element of pname:pRanges must: be a image subresource range that is contained within pname:image + pname:image must: have a depth/stencil format @@ -4316,7 +4318,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:srcStageMask mustnot: contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT 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 pname: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 If fname:vkCmdPipelineBarrier is called within a render pass instance, the render pass must: declare at least one self-dependency from the current subpass to itself - see <<synchronization-pipeline-barriers-subpass-self-dependencies,Subpass Self-dependency>> @@ -4383,10 +4385,10 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:dstOffset must: be less than the size of pname:dstBuffer pname:firstQuery must: be less than the number of queries in pname:queryPool The sum of pname:firstQuery and pname:queryCount must: be less than or equal to the number of queries in pname:queryPool - If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:dstOffset and pname:stride must be multiples of `4` - If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:dstOffset and pname:stride must be multiples of `8` + If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then pname:dstOffset and pname:stride must: be multiples of `4` + If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:dstOffset and pname:stride must: be multiples of `8` pname:dstBuffer must: have enough storage, from pname:dstOffset, to contain the result of each query, as described <<queries-operation-memorylayout,here>> - pname:dstBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag + pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag If the pname:queryType used to create pname:queryPool was ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags mustnot: contain ename:VK_QUERY_RESULT_PARTIAL_BIT @@ -4497,7 +4499,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkResult vkCreateDisplayModeKHR VkPhysicalDevice physicalDevice VkDisplayKHR display - const VkDisplayModeCreateInfoKHR*pCreateInfo + const VkDisplayModeCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkDisplayModeKHR* pMode @@ -4593,7 +4595,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkSwapchainKHR swapchain const VkAllocationCallbacks* pAllocator - All uses of presentable images acquired from pname:swapchain and owned by the application must: have completed execution + All uses of presentable images acquired from pname:swapchain must: have completed execution If sname:VkAllocationCallbacks were provided when pname:swapchain was created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:swapchain was created, pname:pAllocator must: be `NULL` @@ -4605,7 +4607,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t* pSwapchainImageCount VkImage* pSwapchainImages - + VkResult vkAcquireNextImageKHR VkDevice device VkSwapchainKHR swapchain @@ -4720,9 +4722,9 @@ maintained in the master branch of the Khronos Vulkan Github project. const char* pMessage pname:instance must: be a valid sname:VkInstance handle - pname:flags must be a combination of one or more of sname:VkDebugReportFlagBitsEXT - pname:objType must be one of sname:VkDebugReportObjectTypeEXT, ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT if pname:object is `NULL` - pname:object may be a {apiname} object + pname:flags must: be a combination of one or more of sname:VkDebugReportFlagBitsEXT + pname:objType must: be one of sname:VkDebugReportObjectTypeEXT, ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT if pname:object is `NULL` + pname:object may: be a {apiname} object pname:pLayerPrefix must: be a `NULL` terminated string. pname:pMsg must: be a `NULL` terminated string. @@ -4977,7 +4979,7 @@ maintained in the master branch of the Khronos Vulkan Github project. - + @@ -5137,7 +5139,7 @@ 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 diff --git a/src/vulkan/vk_platform.h b/src/vulkan/vk_platform.h index f5a5243b..5d0fc766 100644 --- a/src/vulkan/vk_platform.h +++ b/src/vulkan/vk_platform.h @@ -4,24 +4,17 @@ /* ** Copyright (c) 2014-2015 The Khronos Group Inc. ** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. +** http://www.apache.org/licenses/LICENSE-2.0 ** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index afbddd95..eb8343e2 100644 --- a/src/vulkan/vulkan.h +++ b/src/vulkan/vulkan.h @@ -8,24 +8,17 @@ extern "C" { /* ** Copyright (c) 2015-2016 The Khronos Group Inc. ** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. +** http://www.apache.org/licenses/LICENSE-2.0 ** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ /* @@ -50,7 +43,7 @@ extern "C" { #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Version of this file -#define VK_HEADER_VERSION 10 +#define VK_HEADER_VERSION 11 #define VK_NULL_HANDLE 0 @@ -3278,7 +3271,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( #define VK_KHR_swapchain 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) -#define VK_KHR_SWAPCHAIN_SPEC_VERSION 67 +#define VK_KHR_SWAPCHAIN_SPEC_VERSION 68 #define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" typedef VkFlags VkSwapchainCreateFlagsKHR; @@ -3434,7 +3427,7 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhys typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);