From 7380aee56b53e9ea3647186ec477202f7f17e28c Mon Sep 17 00:00:00 2001 From: Jon Leech Date: Thu, 3 Mar 2016 05:06:18 -0800 Subject: [PATCH] Change log for March 4, 2016 Vulkan 1.0.5 spec update: * Bump API patch number to 5 for this update. Github Issues: * Correctly describe slink:VkPhysicalDeviceProperties pname:deviceName member as a string, not a pointer to a string. Also one typo fix for "hetereogeneous" (public issue 4). * Replace maynot: macro with may: not, and "may: or maynot:" with "may:" (public issue 4). * Clarify that redundantly setting the state of a fence or event has no effect (public issue 4). * Minor fixes to ref pages to track descriptions of memory bits that changed in the core spec. Fix name of a member in the description of sname:sname:VkPipelineMultisampleStateCreateInfo (public issues 8, 13). * Remove redundant validity statement for sname:VkGraphicsPipelineCreateInfo::pname:stageCount (public issue 14). * Fix typos in chapters 7-9 (public issue 14). * Clarify the example demonstrating the behavior of code:OpMemoryBarrier in the <<shaders-execution-memory-ordering,shader memory acces ordering>> section (public issue 16). * Specify that freeing mapped memory implicitly unmaps the memory in the description of flink:vkFreeMemory (public issue 17). * Forbid allocation callbacks from calling into the API in the <<memory-allocation,memory allocation>> section (public issue 20). * Add missing validity rules about size being greater than 0 and offset being less than size of object. Fix flink:VkMappedMemoryRange's misinterpretation of offset (public issues 27, 31). * Add validity rule disallowing overlapping source/destination descriptors in flink:VkCopyDescriptorSet (public issue 32). * Clarify that array and matrix stride has to be a multiple of the base alignment of the array or matrix in the <<interfaces-resources-layout,Offset and Stride Assignment>> section (public issue 38). * Correct parenthesis floor nesting error in equation for <<textures-RGB-sexp,RGB to shared exponent conversion>>. Clarify case of when exp' is forced to 0, avoiding log2(0) undefined problem (public issue 40). * Remove redundant statement from the code:FragDepth description in the <<interfaces-builtin-variables,Built-In Variables>> section (public issue 47). * Define the clamping of the <<textures-level-of-detail-operation,bias added to the scale factor>> by linking to the slink:VkPhysicalDevice feature pname:maxSamplerLodBias (public issue 64). * Fix typo "optimal linear resources" and clarify the set of resources <<features-limits-bufferImageGranularity,the pname:bufferImageGranularity resource>> applies to (public issue 67). * Replace 'descriptor accessed by a pipeline' language for sname:VkDescriptorSetAllocateInfo with more precise phrasing about binding a descriptor set before a command that invokes work using that set (public issue 69). * tstripadj.svg contained an Inkscape tag which caused Firefox and IE 11 to fail to render it, and was illegal SVG. Generating Plain SVG from the Inkscape SVG source fixes this (public issue 70). * Fix validity for sname:VkVertexInputBindingDescription and sname:VkVertexInputAttributeDescription numbers (public issue 72). Internal Issues: * Clarify the meaning of ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT in elink:VkFormatFeatureFlagBits with respect to depth compare (internal issue 107). * Added a note explaining that ename:VK_QUEUE_TRANSFER_BIT may or may not be reported for a queue family that already supports ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT as the former is a strict subset of the latter ones (internal issue 116). * Add validity language for sname:VkDescriptorSetAllocateInfo about exceeding the descriptor pool capacity (internal issue 140). * Add ename:VK_INCOMPLETE success code for flink:vkEnumeratePhysicalDevices query (internal issue 163). Other Commits: * Add the VK_NV_glsl_shader extension definitions to the API. * Update GL_KHR_vulkan_glsl with 1) origin_upper_left as default 2) specialization array constant semantics. * Corrected/updated Data Format Specification date. --- doc/specs/misc/GL_KHR_vulkan_glsl.txt | 41 +- doc/specs/vulkan/Makefile | 2 +- doc/specs/vulkan/appendices/glossary.txt | 2 +- doc/specs/vulkan/appendices/spirvenv.txt | 2 +- doc/specs/vulkan/chapters/cmdbuffers.txt | 2 +- doc/specs/vulkan/chapters/descriptorsets.txt | 13 +- doc/specs/vulkan/chapters/devsandqueues.txt | 23 +- doc/specs/vulkan/chapters/extensions.txt | 6 +- doc/specs/vulkan/chapters/features.txt | 17 +- doc/specs/vulkan/chapters/fundamentals.txt | 2 +- doc/specs/vulkan/chapters/initialization.txt | 2 +- doc/specs/vulkan/chapters/interfaces.txt | 7 +- doc/specs/vulkan/chapters/introduction.txt | 2 +- doc/specs/vulkan/chapters/memory.txt | 16 +- doc/specs/vulkan/chapters/pipelines.txt | 20 +- doc/specs/vulkan/chapters/primsrast.txt | 6 +- doc/specs/vulkan/chapters/queries.txt | 21 +- doc/specs/vulkan/chapters/renderpass.txt | 12 +- doc/specs/vulkan/chapters/resources.txt | 13 +- doc/specs/vulkan/chapters/shaders.txt | 29 +- doc/specs/vulkan/chapters/sparsemem.txt | 2 +- doc/specs/vulkan/chapters/synchronization.txt | 26 +- doc/specs/vulkan/chapters/textures.txt | 17 +- .../vulkan/enums/VkShaderStageFlagBits.txt | 2 +- doc/specs/vulkan/images/Makefile | 11 +- .../vulkan/images/{ => Source}/innerquad.dia | Bin .../vulkan/images/{ => Source}/innertri.dia | 0 .../vulkan/images/{ => Source}/lineadj.dia | Bin doc/specs/vulkan/images/Source/tstripadj.svg | 1078 +++++++++++++++++ doc/specs/vulkan/images/tstripadj.pdf | Bin 8845 -> 8194 bytes doc/specs/vulkan/images/tstripadj.svg | 434 ++----- .../vulkan/man/VkMemoryPropertyFlags.txt | 15 +- .../vkGetPhysicalDeviceMemoryProperties.txt | 18 +- doc/specs/vulkan/style/styleguide.txt | 16 +- .../validity/protos/vkBindBufferMemory.txt | 2 +- .../validity/protos/vkBindImageMemory.txt | 2 +- .../validity/protos/vkCmdCopyBuffer.txt | 7 +- .../protos/vkCmdCopyQueryPoolResults.txt | 1 + .../validity/protos/vkCmdFillBuffer.txt | 6 +- .../validity/protos/vkCmdPushConstants.txt | 2 + .../validity/protos/vkCmdUpdateBuffer.txt | 5 +- .../protos/vkEnumeratePhysicalDevices.txt | 1 + .../protos/vkFlushMappedMemoryRanges.txt | 1 - .../validity/protos/vkGetDeviceQueue.txt | 2 +- .../protos/vkInvalidateMappedMemoryRanges.txt | 1 - .../vulkan/validity/protos/vkMapMemory.txt | 3 +- .../structs/VkBufferMemoryBarrier.txt | 3 +- .../structs/VkBufferViewCreateInfo.txt | 3 +- .../validity/structs/VkCopyDescriptorSet.txt | 1 + .../structs/VkDescriptorBufferInfo.txt | 4 +- .../structs/VkDescriptorSetAllocateInfo.txt | 1 + .../structs/VkGraphicsPipelineCreateInfo.txt | 1 - .../validity/structs/VkMappedMemoryRange.txt | 7 +- .../validity/structs/VkPushConstantRange.txt | 3 +- .../validity/structs/VkSparseMemoryBind.txt | 5 +- .../validity/structs/VkSpecializationInfo.txt | 2 +- .../VkVertexInputAttributeDescription.txt | 1 + .../VkVertexInputBindingDescription.txt | 2 +- doc/specs/vulkan/vkapi.py | 4 +- out/index.html | 40 +- src/spec/vk.xml | 91 +- src/vulkan/vulkan.h | 10 +- 62 files changed, 1492 insertions(+), 576 deletions(-) rename doc/specs/vulkan/images/{ => Source}/innerquad.dia (100%) rename doc/specs/vulkan/images/{ => Source}/innertri.dia (100%) rename doc/specs/vulkan/images/{ => Source}/lineadj.dia (100%) create mode 100644 doc/specs/vulkan/images/Source/tstripadj.svg diff --git a/doc/specs/misc/GL_KHR_vulkan_glsl.txt b/doc/specs/misc/GL_KHR_vulkan_glsl.txt index 6c045d3b..b1cee3cf 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: 10-Feb-2016 - Revision: 25 + Last Modified Date: 28-Feb-2016 + Revision: 27 Number @@ -82,6 +82,7 @@ Overview * gl_FragColor will no longer indicate an implicit broadcast * arrays of opaque uniforms take only one binding number for the entire object, not one per array element + * the default origin is origin_upper_left instead of origin_lower_left Each of these is discussed in more detail below. @@ -699,9 +700,26 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification (Making all stages have the same rule that dvec3 takes two locations...) + Change section 4.4.1.3 "Fragment Shader Inputs" from + + "By default, gl_FragCoord assumes a lower-left origin for window + coordinates ... For example, the (x, y) location (0.5, 0.5) is + returned for the lowerleft-most pixel in a window. The origin can be + changed by redeclaring gl_FragCoord with the + origin_upper_left identifier." + + To + + "The gl_FragCoord built-in variable assumes an upper-left origin for + window coordinates ... For example, the (x, y) location (0.5, 0.5) is + returned for the upper-left-most pixel in a window. The origin can be + explicitly set by redeclaring gl_FragCoord with the origin_upper_left + identifier. It is a compile-time error to change it to + origin_lower_left." + Add to the end of section 4.4.3 Uniform Variable Layout Qualifiers: - The /push_constant/ identifier is used to declare an entire block, and + "The /push_constant/ identifier is used to declare an entire block, and represents a set of "push constants", as defined by the API. It is a compile-time error to apply this to anything other than a uniform block declaration. The values in the block will be initialized through the @@ -712,22 +730,22 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification push-constant array can only be indexed with dynamically uniform indexes. Uniform blocks declared with push_constant use different resources than those without; and are accounted for separately. See the API - specification for more detail. + specification for more detail." After the paragraphs about binding ("The binding identifier..."), add - The /set/ identifier specifies the descriptor set this object belongs to. + "The /set/ identifier specifies the descriptor set this object belongs to. It is a compile-time error to apply to just a qualifier or a member of a block. Any uniform or shader storage block declared without a /set/ identifier is assigned to descriptor set 0. Similarly, any sampler, texture, or subpass input type declared as a uniform, but without a /set/ identifier is also assigned to descriptor set 0. - If applied to an object declared as an array, all elements of the array + "If applied to an object declared as an array, all elements of the array belong to the specified /set/. - It is a compile-time error for either the /set/ or /binding/ value - to exceed a front-end-configuration supplied maximum value. + "It is a compile-time error for either the /set/ or /binding/ value + to exceed a front-end-configuration supplied maximum value." Change section 4.4.6 Opaque-Uniform Layout Qualifiers: @@ -802,6 +820,11 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification int d[aSize + pad]; // different type than a, b, or c int e[aSize + 2]; // different type than a, b, c, or d + "Types containing arrays sized with a specialization constant cannot be + compared, assigned as aggregates, or used in initializers. They can, + however, be passed as arguments to functions having formal parameters of + the same type. + "Arrays inside a block may be sized with a specialization constant, but the block will have a static layout. Changing the specialized size will not re-layout the block. In the absence of explicit offsets, the layout @@ -1129,6 +1152,8 @@ Revision History Rev. Date Author Changes ---- ----------- ------- -------------------------------------------- + 27 28-Feb-2016 JohnK Make the default by origin_upper_left + 26 17-Feb-2016 JohnK Expand specialized array semantics 25 10-Feb-2016 JohnK Incorporate resolutions from the face to face 24 28-Jan-2016 JohnK Update the resolutions from the face to face 23 6-Jan-2016 Piers Remove support for gl_VertexID and diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile index cc344dc9..fae6d7e2 100644 --- a/doc/specs/vulkan/Makefile +++ b/doc/specs/vulkan/Makefile @@ -126,7 +126,7 @@ INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpo COMMONDOCS := $(CHAPTERS) $(INCLUDES) # A generate included file with the spec version, date, and git commit SPECVERSION = specversion.txt -SPECREVISION = 1.0.4 +SPECREVISION = 1.0.5 SPECREMARK = # Spec targets diff --git a/doc/specs/vulkan/appendices/glossary.txt b/doc/specs/vulkan/appendices/glossary.txt index 51d63310..5fdddd8c 100644 --- a/doc/specs/vulkan/appendices/glossary.txt +++ b/doc/specs/vulkan/appendices/glossary.txt @@ -423,7 +423,7 @@ Mip Tail Region:: and opaquely. Non-Dispatchable Handle:: - A handle of an integer handle type. Handle values maynot: be unique, + A handle of an integer handle type. Handle values may: not be unique, even for two objects of the same type. Normalized:: diff --git a/doc/specs/vulkan/appendices/spirvenv.txt b/doc/specs/vulkan/appendices/spirvenv.txt index 41f42fce..1762f685 100644 --- a/doc/specs/vulkan/appendices/spirvenv.txt +++ b/doc/specs/vulkan/appendices/spirvenv.txt @@ -145,7 +145,7 @@ instructions: - Any denormalized value input into a shader or potentially generated by any instruction in a shader may: be flushed to 0. - The rounding mode cannot: be set and is undefined. - - NaNs maynot: be generated. Instructions that operate on a NaN maynot: + - NaNs may: not be generated. Instructions that operate on a NaN may: not result in a NaN. - Support for signaling NaNs is optional: and exceptions are never raised. diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt index f7feaa44..18fab83d 100644 --- a/doc/specs/vulkan/chapters/cmdbuffers.txt +++ b/doc/specs/vulkan/chapters/cmdbuffers.txt @@ -36,7 +36,7 @@ otherwise the behavior of executing that command buffer is undefined. Unless otherwise specified, and without explicit synchronization, the various commands submitted to a queue via command buffers may: execute in arbitrary order relative to each other, and/or concurrently. Also, the -memory side-effects of those commands maynot: be directly visible to other +memory side-effects of those commands may: not be directly visible to other commands without memory barriers. This is true within a command buffer, and across command buffers submitted to a given queue. See <>, <> and diff --git a/doc/specs/vulkan/chapters/descriptorsets.txt b/doc/specs/vulkan/chapters/descriptorsets.txt index db06cb19..b9ac4c2b 100644 --- a/doc/specs/vulkan/chapters/descriptorsets.txt +++ b/doc/specs/vulkan/chapters/descriptorsets.txt @@ -1168,10 +1168,13 @@ include::../validity/structs/VkDescriptorSetAllocateInfo.txt[] When a descriptor set is allocated, the initial state is largely uninitialized and all descriptors are undefined. However, the descriptor set can: be bound -in a command buffer without causing errors or exceptions. Entries must: be -populated before they are accessed by a pipeline, but leaving uninitialized -entries that are not accessed by a pipeline will produce well-defined -results. This means applications need not populate unused entries with dummy +in a command buffer without causing errors or exceptions. All entries that +are statically used by a pipeline in a drawing or dispatching command must: +have been populated before the descriptor set is bound for use by that command. +Entries that are not statically used by a pipeline can: have uninitialized +descriptors or descriptors of resources that have been destroyed, and executing +a draw or dispatch with such a descriptor set bound does not cause undefined +behavior. This means applications need not populate unused entries with dummy descriptors. Allocated descriptor sets are freed by calling: @@ -1353,7 +1356,7 @@ sname:VkWriteDescriptorSet structure must: have identical pname:descriptorType and pname:stageFlags, and must: all either use immutable samplers or must: all not use immutable samplers. -Each element in the pname:pDescriptorCopies array in a +Each element in the pname:pDescriptorCopies array is a sname:VkCopyDescriptorSet structure describing an operation copying descriptors between sets. The definition of sname:VkCopyDescriptorSet is: diff --git a/doc/specs/vulkan/chapters/devsandqueues.txt b/doc/specs/vulkan/chapters/devsandqueues.txt index c9c8adf5..78e02f3a 100644 --- a/doc/specs/vulkan/chapters/devsandqueues.txt +++ b/doc/specs/vulkan/chapters/devsandqueues.txt @@ -36,7 +36,10 @@ return the variable is overwritten with the number of structures actually written to pname:pPhysicalDevices. If the value of pname:pPhysicalDeviceCount is less than the number of physical devices available, at most pname:pPhysicalDeviceCount structures will be -written. +written. If pname:pPhysicalDeviceCount is smaller than the number of +physical devices available, ename:VK_INCOMPLETE will be returned instead of +ename:VK_SUCCESS, to indicate that not all the available physical devices +were returned. include::../validity/protos/vkEnumeratePhysicalDevices.txt[] @@ -69,8 +72,8 @@ The members of sname:VkPhysicalDeviceProperties have the following meanings: devices available from the vendor. * pname:deviceType is a elink:VkPhysicalDeviceType specifying the type of device. - * pname:deviceName is a pointer to a null-terminated UTF-8 string - containing the name of the device. + * pname:deviceName is a null-terminated UTF-8 string containing the name + of the device. * pname:pipelineCacheUUID is an array of size ename:VK_UUID_SIZE, containing 8-bit values that represent a universally unique identifier for the device. @@ -202,6 +205,17 @@ operations, at least one queue family of at least one physical device exposed by the implementation must: support both graphics and compute operations. +[NOTE] +.Note +==== +All commands that are allowed on a queue that supports transfer operations +are also allowed on a queue that supports either graphics or compute +operations thus if the capabilities of a queue family include +ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT then +reporting the ename:VK_QUEUE_TRANSFER_BIT capability separately for that +queue family is optional:. +==== + include::../validity/structs/VkQueueFamilyProperties.txt[] For further details see <>. @@ -408,7 +422,8 @@ error is largely informational and intended only to inform the user that their hardware has probably developed a fault or become physically disconnected, and should: be investigated further. In many cases, physical device loss may: cause other more serious issues such as the operating -system crashing; in which case it maynot: be reported via the {apiname} API. +system crashing; in which case it may: not be reported via the {apiname} +API. ==== [NOTE] diff --git a/doc/specs/vulkan/chapters/extensions.txt b/doc/specs/vulkan/chapters/extensions.txt index 0daacaee..e322ccc1 100644 --- a/doc/specs/vulkan/chapters/extensions.txt +++ b/doc/specs/vulkan/chapters/extensions.txt @@ -73,8 +73,8 @@ pname:pProperties. If the value of pname:pPropertyCount is less than the number of layer properties available, at most pname:pPropertyCount structures will be written. If pname:pPropertyCount is smaller than the number of layers available, ename:VK_INCOMPLETE will be returned instead of -ename:VK_SUCCESS, to indicate that not all the available properties were -returned. +ename:VK_SUCCESS, to indicate that not all the available layer properties +were returned. The definition of sname:VkLayerProperties is: @@ -111,7 +111,7 @@ Extensions may: define new {apiname} commands, structures, and enumerants. For compilation purposes, the interfaces defined by registered extensions, including new structures and enumerants as well as function pointer types for new commands, are defined in the Khronos-supplied +vulkan.h+ together -with the core API. However, commands defined by extensions maynot: be +with the core API. However, commands defined by extensions may: not be available for static linking - in which case function pointers to these commands should: be queried at runtime as described in <>. Extensions may: be provided by layers diff --git a/doc/specs/vulkan/chapters/features.txt b/doc/specs/vulkan/chapters/features.txt index bf07eeb4..c93a9575 100644 --- a/doc/specs/vulkan/chapters/features.txt +++ b/doc/specs/vulkan/chapters/features.txt @@ -1453,7 +1453,7 @@ the same whether or not the feature is enabled. * 128. -- + -It maynot: be possible to reach this limit in every stage. +It may: not be possible to reach this limit in every stage. 3:: Maximum image attachment size or maximum display size @@ -3060,9 +3060,18 @@ ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT:: pname:magFilter or pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR. This bit must: only be exposed for formats that also support the - ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT. If the format being - queried is a depth/stencil format, this only indicates that the - depth aspect is linearly filterable. + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT. ++ +If the format being queried is a depth/stencil format, this bit only indicates + that the depth aspect (not the stencil aspect) supports linear filtering, + and that linear filtering of the depth aspect is supported whether depth + compare is enabled in the sampler or not. If this bit is not present, + linear filtering with depth compare disabled is unsupported and linear + filtering with depth compare enabled is supported, but may: compute the + filtered value in an implementation-dependent manner which differs from + the normal rules of linear filtering. The resulting value must: be in the + range latexmath:[$[0,1\]$] and should: be proportional to, or a weighted + average of, the number of comparison passes or failures. The pname:bufferFeatures member of the sname:VkFormatProperties structure describes what features are supported by buffers. diff --git a/doc/specs/vulkan/chapters/fundamentals.txt b/doc/specs/vulkan/chapters/fundamentals.txt index a8df7c47..80e42953 100644 --- a/doc/specs/vulkan/chapters/fundamentals.txt +++ b/doc/specs/vulkan/chapters/fundamentals.txt @@ -216,7 +216,7 @@ a dispatchable type must: have a unique handle value during its lifetime. _Non-dispatchable_ handle types are a 64-bit integer type whose meaning is implementation-dependent, and may: encode object information directly in the handle rather than pointing to a software structure. Objects of a -non-dispatchable type maynot: have unique handle values within a type or +non-dispatchable type may: not have unique handle values within a type or across types. If handle values are not unique, then destroying one such handle mustnot: cause identical handles of other types to become invalid, and mustnot: cause identical handles of the same type to become invalid if diff --git a/doc/specs/vulkan/chapters/initialization.txt b/doc/specs/vulkan/chapters/initialization.txt index cb7f4965..2f5c96a5 100644 --- a/doc/specs/vulkan/chapters/initialization.txt +++ b/doc/specs/vulkan/chapters/initialization.txt @@ -67,7 +67,7 @@ it. endif::editing-notes[] In order to support systems with multiple {apiname} implementations -comprising heterogenous collections of hardware and software, the function +comprising heterogeneous collections of hardware and software, the function pointers returned by fname:vkGetInstanceProcAddr may: point to dispatch code, which calls a different real implementation for different sname:VkDevice objects (and objects created from them). The overhead of this diff --git a/doc/specs/vulkan/chapters/interfaces.txt b/doc/specs/vulkan/chapters/interfaces.txt index 2ee4e4b8..8ef13a05 100644 --- a/doc/specs/vulkan/chapters/interfaces.txt +++ b/doc/specs/vulkan/chapters/interfaces.txt @@ -636,8 +636,8 @@ out according to the following rules. ** a column-major matrix has a base alignment equal to the base alignment of the matrix column type + - * Any code:ArrayStride or code:MatrixStride decoration must equal the base - alignment of the array or matrix from above. + * Any code:ArrayStride or code:MatrixStride decoration must: be an integer + multiple of the base alignment of the array or matrix from above. [NOTE] .Note @@ -754,8 +754,7 @@ code:FragDepth, a shader must: declare the code:DepthReplacing execution mode. If a shader declares the code:DepthReplacing execution mode and there is an execution path through the shader that does not set code:FragDepth, then the fragment's depth value is undefined for executions of the shader -that take that path. That is, if the fragment shader enables depth -replacing, then it must: always write it. +that take that path. + The code:FragDepth decoration is only supported in fragment shaders. + diff --git a/doc/specs/vulkan/chapters/introduction.txt b/doc/specs/vulkan/chapters/introduction.txt index 95ab5d94..3b62b4d6 100644 --- a/doc/specs/vulkan/chapters/introduction.txt +++ b/doc/specs/vulkan/chapters/introduction.txt @@ -183,7 +183,7 @@ August, 2008. [[Khronos Data Format Specification]]:: A. Garrard, _Khronos Data Format Specification, version 1.1_, https://www.khronos.org/registry/dataformat/specs/1.1/dataformat.1.1.html, -February 16, 2015. +February 26, 2016. [[Khronos SPIR-V Extended Instructions for GLSL Specification]]:: J. Kessenich, _SPIR-V Extended Instructions for GLSL, Version 1.00_, diff --git a/doc/specs/vulkan/chapters/memory.txt b/doc/specs/vulkan/chapters/memory.txt index 13ddda7c..24b7238b 100644 --- a/doc/specs/vulkan/chapters/memory.txt +++ b/doc/specs/vulkan/chapters/memory.txt @@ -262,6 +262,8 @@ If pname:pfnAllocation or pname:pfnReallocation fail, the implementation may: fail object creation and/or generate an ename:VK_ERROR_OUT_OF_HOST_MEMORY error, as appropriate. +Allocation callbacks mustnot: call any {apiname} commands. + The following sets of rules define when an implementation is permitted to call the allocator callbacks. @@ -559,7 +561,7 @@ buffers queued for execution. The memory can: remain bound to images or buffers at the time the memory object is freed, but any further use of them (on host or device) for anything other than destroying those objects will result in undefined behavior. If there are still any bound images or -buffers, the memory maynot: be immediately released by the implementation, +buffers, the memory may: not be immediately released by the implementation, but must: be released by the time all bound images and buffers have been destroyed. Once memory is released, it is returned to the heap from which it was allocated. @@ -567,6 +569,8 @@ was allocated. How memory objects are bound to Images and Buffers is described in detail in the <> section. +If a memory object is mapped at the time it is freed, it is implicitly +unmapped. [[memory-device-hostaccess]] === Host Access to Device Memory Objects @@ -614,14 +618,14 @@ endif::editing-notes[] fname:vkMapMemory does not check whether the device memory is currently in use before returning the host-accessible pointer. The application must: guarantee that any previously submitted command that writes to this -sub-range has completed before the host reads from or writes to that -sub-range, and that any previously submitted command that reads from that -sub-range has completed before the host writes to that region (see +range has completed before the host reads from or writes to that +range, and that any previously submitted command that reads from that +range has completed before the host writes to that region (see <> for details on fulfilling such a guarantee). If the device memory was allocated without the ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT set, -these guarantees must: be made for an extended sub-range: the application -must: round down the start of the sub-range to the previous multiple of +these guarantees must: be made for an extended range: the application +must: round down the start of the range to the nearest multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize, and round the end of the range up to the nearest multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize. diff --git a/doc/specs/vulkan/chapters/pipelines.txt b/doc/specs/vulkan/chapters/pipelines.txt index 995a268a..8a6ad750 100644 --- a/doc/specs/vulkan/chapters/pipelines.txt +++ b/doc/specs/vulkan/chapters/pipelines.txt @@ -493,7 +493,7 @@ pipelines is achieved by passing the same pipeline cache object when creating multiple related pipelines. Reuse across runs of an application is achieved by retrieving pipeline cache contents in one run of an application, saving the contents, and using them to preinitialize a pipeline cache on a -subsequent run. The contents and size of the pipeline cache objects is +subsequent run. The contents and size of the pipeline cache objects are managed by the implementation. Applications can: control the amount of data retrieved from a pipeline cache object. @@ -565,8 +565,8 @@ include::../validity/protos/vkMergePipelineCaches.txt[] .Note ==== The details of the merge operation are implementation dependent, but -implementations are recommended: to merge the contents of the specified -pipelines and prune duplicate entries. +implementations should: merge the contents of the specified pipelines and +prune duplicate entries. ==== Data can: be retrieved from a pipeline cache object using the command: @@ -631,10 +631,14 @@ The first four bytes encode the length of the entire pipeline header, in bytes. This value includes all fields in the header including the pipeline cache version field and the size of the length field. -The next four bytes encode the pipeline cache version. -This field is a elink:VkPipelineCacheHeaderVersion value. -A consumer of the pipeline cache should use this value to interpret the -remainder of the cache header. +The next four bytes encode the pipeline cache version. This field is +interpreted as an elink:VkPipelineCacheHeaderVersion value, and must: +have one of the following values: + +include::../enums/VkPipelineCacheHeaderVersion.txt[] + +A consumer of the pipeline cache should use the cache version to interpret +the remainder of the cache header. If the value of pname:dataSize is less than what is necessary to store this header, nothing will be written to pname:pData and zero will be written to @@ -787,8 +791,6 @@ Now to specialize the above via the specialization constants mechanism: [source,{basebackend@docbook:c++:cpp}] --------------------------------------------------- -VkSpecializationMapEntry entries[2]; - const VkSpecializationMapEntry entries[] = { { diff --git a/doc/specs/vulkan/chapters/primsrast.txt b/doc/specs/vulkan/chapters/primsrast.txt index 84fa8c36..d4f030d9 100644 --- a/doc/specs/vulkan/chapters/primsrast.txt +++ b/doc/specs/vulkan/chapters/primsrast.txt @@ -87,9 +87,9 @@ as follows: is generated based on the value of the alpha component of the fragment's first color output as specified in the <> section. - * pname:alphaToOneEnable controls whether the value of the alpha component of - the fragment's first color output is replaced with one as described in - <>. + * pname:alphaToOneEnable controls whether the value of the alpha component + of the fragment's first color output is replaced with one as described + in <>. include::../validity/structs/VkPipelineMultisampleStateCreateInfo.txt[] diff --git a/doc/specs/vulkan/chapters/queries.txt b/doc/specs/vulkan/chapters/queries.txt index c6fbdae2..05339160 100644 --- a/doc/specs/vulkan/chapters/queries.txt +++ b/doc/specs/vulkan/chapters/queries.txt @@ -270,7 +270,7 @@ results for that query. In this case, fname:vkGetQueryPoolResults is guaranteed to succeed and return ename:VK_SUCCESS if the queries become available in a finite time (i.e. if they have been issued and not reset). If queries will never finish (e.g. due to being reset but not -issued), then fname:vkGetQueryPoolResults maynot: return in finite time. +issued), then fname:vkGetQueryPoolResults may: not return in finite time. [[queries-wait-bit-not-set]] If ename:VK_QUERY_RESULT_WAIT_BIT and ename:VK_QUERY_RESULT_PARTIAL_BIT @@ -410,9 +410,9 @@ include::../validity/protos/vkCmdCopyQueryPoolResults.txt[] [[queries-operation-undefined]] Rendering operations such as clears, MSAA resolves, attachment load/store -operations, and blits may: or maynot: count towards the results of queries. -This behavior is implementation-dependent and may: vary depending on the -path used within an implementation. For example, some implementations have +operations, and blits may: count towards the results of queries. This +behavior is implementation-dependent and may: vary depending on the path +used within an implementation. For example, some implementations have several types of clears, some of which may: include vertices and some not. @@ -490,14 +490,13 @@ These bits have the following meanings: * If ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT is set, queries managed by the pool will count the number of vertices processed - by the <> stage. Vertices - corresponding to incomplete primitives may: or maynot: contribute to the - count. + by the <> stage. Vertices corresponding to + incomplete primitives may: contribute to the count. * If ename:VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT is set, queries managed by the pool will count the number of primitives - processed by the <> stage. If - primitive restart is enabled, restarting the primitive topology has no - effect on the count. Incomplete primitives may: or maynot: be counted. + processed by the <> stage. If primitive restart + is enabled, restarting the primitive topology has no effect on the + count. Incomplete primitives may: be counted. * If ename:VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT is set, queries managed by the pool will count the number of vertex shader invocations. This counter's value is incremented each time a vertex @@ -571,7 +570,7 @@ multiple times, affecting some of the counts. If a pipeline has pname:rasterizerDiscardEnable enabled, implementations may: discard primitives after the final vertex processing stage. As a result, if pname:rasterizerDiscardEnable is enabled, the clipping input and -output primitives counters maynot: be incremented. +output primitives counters may: not be incremented. When a pipeline statistics query finishes, the result for that query is marked as available. The application can: copy the result to a diff --git a/doc/specs/vulkan/chapters/renderpass.txt b/doc/specs/vulkan/chapters/renderpass.txt index 5d6a90eb..f3a84871 100644 --- a/doc/specs/vulkan/chapters/renderpass.txt +++ b/doc/specs/vulkan/chapters/renderpass.txt @@ -196,7 +196,7 @@ pname:storeOp apply only to the depth data, while pname:stencilLoadOp and pname:stencilStoreOp define how the stencil data is handled. [[renderpass-precision]] -During a renderpass instance, input/color attachments with color formats +During a render pass instance, input/color attachments with color formats that have a component size of 8, 16, or 32 bits must: be represented in the attachment's format throughout the instance. Attachments with other floating- or fixed-point color formats, or with depth components may: be @@ -357,7 +357,7 @@ The sname:VkSubpassDependency structure is defined as: include::../structs/VkSubpassDependency.txt[] - * pname:srcSubpass and pname:dstSubpass are the subpass indexes of the + * pname:srcSubpass and pname:dstSubpass are the subpass indices of the producer and consumer subpasses, respectively. pname:srcSubpass and pname:dstSubpass can: also have the special value ename:VK_SUBPASS_EXTERNAL. The source subpass must: always be a lower @@ -770,9 +770,9 @@ restricted to the pixels whose x and y coordinates fall within the render area on all attachments. The render area extends to all layers of pname:framebuffer. The application must: ensure (using scissor if necessary) that all rendering is contained within the render area, otherwise the pixels -outside of the render area become undefined and shader side effects may: or -maynot: occur for fragments outside the render area. The render area must: -be contained within the framebuffer dimensions. +outside of the render area become undefined and shader side effects may: +occur for fragments outside the render area. The render area must: be +contained within the framebuffer dimensions. [NOTE] .Note @@ -823,7 +823,7 @@ include::../protos/vkCmdNextSubpass.txt[] include::../validity/protos/vkCmdNextSubpass.txt[] -The subpasses indices for a render pass begin at zero when +The subpass index for a render pass begins at zero when fname:vkCmdBeginRenderPass is recorded, and increments each time fname:vkCmdNextSubpass is recorded. diff --git a/doc/specs/vulkan/chapters/resources.txt b/doc/specs/vulkan/chapters/resources.txt index 98d2a688..417cf88b 100644 --- a/doc/specs/vulkan/chapters/resources.txt +++ b/doc/specs/vulkan/chapters/resources.txt @@ -286,7 +286,7 @@ flink:vkGetPhysicalDeviceImageFormatProperties command. Images created with pname:tiling equal to ename:VK_IMAGE_TILING_LINEAR have further restrictions on their limits and capabilities compared to images created with pname:tiling equal to ename:VK_IMAGE_TILING_OPTIMAL. Creation -of images with tiling ename:VK_IMAGE_TILING_LINEAR maynot: be supported +of images with tiling ename:VK_IMAGE_TILING_LINEAR may: not be supported unless other parameters meet all of the constraints: * pname:imageType is ename:VK_IMAGE_TYPE_2D @@ -1016,14 +1016,14 @@ optimal image resources must be placed in adjacent memory locations for simultaneous usage. Two resources which do not satisfy this granularity requirement are said to <>. Linear image resource are images created with ename:VK_IMAGE_TILING_LINEAR and optimal -linear resources are those created with ename:VK_IMAGE_TILING_OPTIMAL. +image resources are those created with ename:VK_IMAGE_TILING_OPTIMAL. pname:bufferImageGranularity is specified in bytes, and must: be a power of two. Implementations which do not require such an additional granularity may: report a value of one. Given resourceA at the lower memory offset and resourceB at the higher -memory offset, where one of the resources is a buffer and the other is an -image, and the following: +memory offset, where one of the resources is a buffer or a linear image +and the other is an optimal image, and the following: resourceA.end = resourceA.memoryOffset + resourceA.size - 1 resourceA.endPage = resourceA.end & ~(bufferImageGranularity-1) @@ -1038,8 +1038,9 @@ That is, the end of the first resource (A) and the beginning of the second resource (B) must: be on separate ``pages'' of size pname:bufferImageGranularity. pname:bufferImageGranularity may: be different than the physical page size of the memory heap. This -restriction is only needed for adjacent image and buffer memory locations -which will be used simultaneously. Adjacent buffers' or adjacent images' +restriction is only needed when a buffer or a linear image is at adjacent +memory location with an optimal image and both will be used simultaneously. +Adjacent buffers' or adjacent images' memory ranges can: be closer than pname:bufferImageGranularity, provided they meet the pname:alignment requirement for the objects in question. diff --git a/doc/specs/vulkan/chapters/shaders.txt b/doc/specs/vulkan/chapters/shaders.txt index 3e68d969..eec485ca 100644 --- a/doc/specs/vulkan/chapters/shaders.txt +++ b/doc/specs/vulkan/chapters/shaders.txt @@ -147,18 +147,21 @@ will complete its writes in finite time. ==== Stores issued to different memory locations within a single shader -invocation maynot: be visible to other invocations in the order they were -performed. The OpMemoryBarrier instruction can: be used to provide stronger -ordering of reads and writes performed by a single invocation. -OpMemoryBarrier guarantees that any memory transactions issued by the shader -invocation prior to the instruction complete prior to the memory +invocation may: not be visible to other invocations in the order they were +performed. The code:OpMemoryBarrier instruction can: be used to provide +stronger ordering of reads and writes performed by a single invocation. +code:OpMemoryBarrier guarantees that any memory transactions issued by the +shader invocation prior to the instruction complete prior to the memory transactions issued after the instruction. Memory barriers are needed for algorithms that require multiple invocations to access the same memory and require the operations to be performed in a partially-defined relative order. For example, if one shader invocation does a series of writes, -followed by an OpMemoryBarrier instruction, followed by another write, then -another invocation that sees the results of the final write will also see -the previous writes. Without the memory barrier, the final write may: be +followed by an code:OpMemoryBarrier instruction, followed by another write, +then the results of the series of writes before the barrier become visible to +other shader invocations at a time earlier or equal to when the results of +the final write become visible to those invocations. In practice it means +that another invocation that sees the results of the final write would also +see the previous writes. Without the memory barrier, the final write may: be visible before the previous writes. The built-in atomic memory transaction instructions can: be used to read and @@ -308,7 +311,7 @@ executed. Fragment shaders are invoked as the result of rasterization in a graphics pipeline. Each fragment shader invocation operates on a single fragment and its associated data. With few exceptions, fragment shaders do not have -access to any data associated with other fragments and is considered to +access to any data associated with other fragments and are considered to execute in isolation of fragment shader invocations associated with other fragments. @@ -316,15 +319,15 @@ fragments. [[shaders-fragment-execution]] === Fragment Shader Execution -For each fragment generated by rasterization, a fragment shader may: or -maynot: be invoked. A fragment shader mustnot: be invoked if the -<> cause it to have no coverage. +For each fragment generated by rasterization, a fragment shader may: be +invoked. A fragment shader mustnot: be invoked if the <> cause it to have no coverage. Furthermore, if it is determined that a fragment generated as the result of rasterizing a first primitive will have its outputs entirely overwritten by a fragment generated as the result of rasterizing a second primitive in the same subpass, and the fragment shader used for the fragment has no other -side effects, then the fragment shader maynot: be executed for the fragment +side effects, then the fragment shader may: not be executed for the fragment from the first primitive. Relative ordering of execution of different fragment shader invocations is diff --git a/doc/specs/vulkan/chapters/sparsemem.txt b/doc/specs/vulkan/chapters/sparsemem.txt index d1439403..27b3481b 100644 --- a/doc/specs/vulkan/chapters/sparsemem.txt +++ b/doc/specs/vulkan/chapters/sparsemem.txt @@ -493,7 +493,7 @@ Not faulting on access to unbound pages is not enough to support pname:sparseResidencyNonResidentStrict. An implementation must: also guarantee that reads after writes to unbound regions of the resource always return data for the read as if the memory contains zeros. Depending on the -cache implementation of the hardware this maynot: always be possible. +cache implementation of the hardware this may: not always be possible. Hardware that does not fault, but does not guarantee correct read values will not require dummy pages, but also mustnot: support diff --git a/doc/specs/vulkan/chapters/synchronization.txt b/doc/specs/vulkan/chapters/synchronization.txt index f19d88db..66902909 100644 --- a/doc/specs/vulkan/chapters/synchronization.txt +++ b/doc/specs/vulkan/chapters/synchronization.txt @@ -107,8 +107,8 @@ which is one of: * ename:VK_SUCCESS indicates that the fence is signaled. * ename:VK_NOT_READY indicates that the fence is unsignaled. -To reset the status of one or more fences to the unsignaled state, so that -they can: be reused after a queue submission completes, use the command: +To reset the status of one or more fences to the unsignaled state, use the +command: include::../protos/vkResetFences.txt[] @@ -119,6 +119,9 @@ include::../protos/vkResetFences.txt[] include::../validity/protos/vkResetFences.txt[] +If a fence is already in the unsignaled state, then resetting it has no +effect. + To cause the host to wait until any one or all of a group of fences is signaled, use the command: @@ -299,7 +302,7 @@ When a queue signals or waits upon a semaphore, certain <> are provided. -Semaphore operations maynot: make the side effects of commands visible to +Semaphore operations may: not make the side effects of commands visible to the host. @@ -372,7 +375,8 @@ with the following return codes: The state of an event can: be updated by the host. The state of the event is immediately changed, and subsequent calls to fname:vkGetEventStatus will -return the new state. +return the new state. If an event is already in the requested state, then +updating it to the same state has no effect. To set the state of an event to signaled from the host, call: @@ -463,10 +467,10 @@ fname:vkCmdSetEvent to become signaled. Logically, it has three phases: <>). . Resume execution of pipeline stages specified by pname:dstStageMask -Implementations maynot: execute commands in a pipelined manner, -so fname:vkCmdWaitEvents maynot: observe the results of a subsequent -fname:vkCmdSetEvent or fname:vkCmdResetEvent command, even if the stages -in pname:dstStageMask occur after the stages in pname:srcStageMask. +Implementations may: not execute commands in a pipelined manner, so +fname:vkCmdWaitEvents may: not observe the results of a subsequent +fname:vkCmdSetEvent or fname:vkCmdResetEvent command, even if the stages in +pname:dstStageMask occur after the stages in pname:srcStageMask. Commands that update the state of events in different pipeline stages may: execute out of order, unless the ordering is enforced by execution @@ -480,9 +484,9 @@ events. For example, an event should: only be reset if no fname:vkCmdWaitEvents command is executing that waits upon that event. ==== -An act of setting or resetting an event in one queue maynot: affect or be -visible to other queues. For cross-queue synchronization, semaphores -can: be used. +An act of setting or resetting an event in one queue may: not affect or be +visible to other queues. For cross-queue synchronization, semaphores can: be +used. [[synchronization-execution-and-memory-dependencies]] diff --git a/doc/specs/vulkan/chapters/textures.txt b/doc/specs/vulkan/chapters/textures.txt index b6e3a9ea..11d9dc70 100644 --- a/doc/specs/vulkan/chapters/textures.txt +++ b/doc/specs/vulkan/chapters/textures.txt @@ -224,10 +224,13 @@ A preliminary shared exponent latexmath:[$exp'$] is computed: [latexmath] +++++++++++++++++++ \begin{align*} -exp' = \max(-B-1, -\left \lfloor -\log_2(max_{clamped}+1+B) -\right \rfloor) +exp' = + \begin{cases} + \left \lfloor \log_2(max_{clamped}) \right \rfloor + (B+1) + & \textrm{for } max_{clamped} > 2^{-(B+1)} \\ + 0 + & \textrm{for } max_{clamped} \leq 2^{-(B+1)} + \end{cases} \end{align*} +++++++++++++++++++ @@ -1251,7 +1254,7 @@ follows: shaderOp.Lod & \textrm{(from optional SPIR-V operand)} \\ \log_2 \left ( \frac{\rho_{max}}{N} \right ) & \textrm{otherwise} \end{cases} \\ -\lambda'(x,y) & = \lambda_{base} + \operatorname{clamp}(sampler.bias + shaderOp.bias) \\ +\lambda'(x,y) & = \lambda_{base} + \operatorname{clamp}(sampler.bias + shaderOp.bias,-maxSamplerLodBias,maxSamplerLodBias) \\ \lambda & = \begin{cases} lod_{max}, & \lambda' > lod_{max} \\ @@ -1285,6 +1288,10 @@ lod_{max} & = maxLod & \textrm{(from sampler descriptor)} \end{align*} ++++++++++++++++++++++++ +and latexmath:[$maxSamplerLodBias$] is the value of the +slink:VkPhysicalDeviceLimits feature +<>. + ==== Image Level(s) Selection diff --git a/doc/specs/vulkan/enums/VkShaderStageFlagBits.txt b/doc/specs/vulkan/enums/VkShaderStageFlagBits.txt index 59582dce..5554b626 100644 --- a/doc/specs/vulkan/enums/VkShaderStageFlagBits.txt +++ b/doc/specs/vulkan/enums/VkShaderStageFlagBits.txt @@ -14,7 +14,7 @@ typedef enum VkShaderStageFlagBits { VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, - VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F, + VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, VK_SHADER_STAGE_ALL = 0x7FFFFFFF, } VkShaderStageFlagBits; ------------------------------------------------------------------------------ diff --git a/doc/specs/vulkan/images/Makefile b/doc/specs/vulkan/images/Makefile index 3035cd0c..ee554f3e 100644 --- a/doc/specs/vulkan/images/Makefile +++ b/doc/specs/vulkan/images/Makefile @@ -21,18 +21,23 @@ INKSCAPE ?= inkscape # PDFs to regenerate from SVGs - everything except pipeline.pdf -SVGEXCLUDES = pipeline.svg vulkantexture0.svg +SVGEXCLUDES = pipeline.svg tstripadj.svg vulkantexture0.svg SVGSRC = $(filter-out $(SVGEXCLUDES),$(wildcard [A-Za-z]*.svg)) -PDFDST = $(SVGSRC:%.svg=%.pdf) -SVGDST = pipeline.svg +PDFDST = $(SVGSRC:%.svg=%.pdf) tstripadj.pdf +SVGDST = pipeline.svg tstripadj.svg all: $(PDFDST) $(SVGDST) $(PDFDST): %.pdf: %.svg $(INKSCAPE) -f $< -A $@ +# This came from PowerPoint originally (I think) pipeline.svg: pipeline.pdf $(INKSCAPE) -f $< -l $@ +# This doesn't render properly in Firefox/IE 11 due to Inkscape markup. +tstripadj.svg: Source/tstripadj.svg + $(INKSCAPE) -f $< -l $@ + clean: -rm -f $(PDFDST) $(SVGDST) diff --git a/doc/specs/vulkan/images/innerquad.dia b/doc/specs/vulkan/images/Source/innerquad.dia similarity index 100% rename from doc/specs/vulkan/images/innerquad.dia rename to doc/specs/vulkan/images/Source/innerquad.dia diff --git a/doc/specs/vulkan/images/innertri.dia b/doc/specs/vulkan/images/Source/innertri.dia similarity index 100% rename from doc/specs/vulkan/images/innertri.dia rename to doc/specs/vulkan/images/Source/innertri.dia diff --git a/doc/specs/vulkan/images/lineadj.dia b/doc/specs/vulkan/images/Source/lineadj.dia similarity index 100% rename from doc/specs/vulkan/images/lineadj.dia rename to doc/specs/vulkan/images/Source/lineadj.dia diff --git a/doc/specs/vulkan/images/Source/tstripadj.svg b/doc/specs/vulkan/images/Source/tstripadj.svg new file mode 100644 index 00000000..31330b8c --- /dev/null +++ b/doc/specs/vulkan/images/Source/tstripadj.svg @@ -0,0 +1,1078 @@ + + + + + + + + image/svg+xml + + + + + + + + + 0 + + 2 + + 1 + + 5 + + 3 + + 7 + + 4 + + 6 + + 9 + + 8 + + 10 + + 11 + + + + + + + + + + + + + + + + + + + + + + + 0 + + 2 + + 1 + + 5 + + 3 + + 7 + + 4 + + 6 + + 8 + + 9 + + + + + + + + + + + + + + + + + + + 0 + + 2 + + 1 + + 5 + + 3 + + 4 + + 6 + + 7 + + + + + + + + + + + + + + + 0 + + 2 + + 1 + + 3 + + 4 + + 5 + + + + + + + + + + diff --git a/doc/specs/vulkan/images/tstripadj.pdf b/doc/specs/vulkan/images/tstripadj.pdf index 3ebb7076ea144a488673e2867efd0ce91966edc2..4f2778f875431dde2e32f52ce3eae8bb696285d1 100644 GIT binary patch delta 3854 zcmai%c{J1y_s26?Cu%U3Cd(lEGGj19G0JZ2+gK7IMs`y6K9qeeV@nZY?1XF)ld-Fa zY{}P}HT&3lEWhXZK7ahq`F;QR-E;0e_q^WseeOB;zni4_^cJJAv4)nktc*epBY_z} zqL5%L7W~lP&)LBf9Qb;}GR)k}vSDU=&#SU;%Ih77wotl2 zO(A-IS3|A9ET|Pg1hp_q4`0=%Ov=^?7FwlnB693$kxdEI%fllX&`N8OYQRLAAy)o{ zmwkidr`nn|?-g0U>lf@9*`Sx+*nYl}+UOR$zp^-$_uAVm_HjsT(nM@7uCsA1xlvR2j37WF=g}9?YH67y95m!#S-_ zDNexqMiizOnO*H0J}uBNkHwjEG}P65@J<=#)AENaM}@xYup1<2O(^o*Q}DUU{CZ%r zA4|Cu++M0h-%g8*>=djx5>%w z-7tVFC^th+(x`H~di2Dd^PNQWne}np=Y=O4xnBt7<9+K#WljCu^~`>WJd!=W>o}{T z;2RCsy^892Bpmyl1{V4&_l@}pV&R}n%I{uox|a*q-M#k-1-Km9+@coeI^7~X&6MEB zX}R?9A}$qbT|B?NZ5>c0y#K0S1HN>#}9_?6O;bWS)|vSU26bl_X`T zPBIzKomz9UmUpu1z9ICU*pcYlN%l|s@bCxV?RdrW#Lk@Lkp~ z{f}&(y?6DaK)|e72D3W)d|3`c&fh=IhCP)HIHBxD(^;pwvSXHVt&glm%&ObZ&(`G* ze(fI6?}VBIX-#LpF!LGHf1w07G(0!r3K!p<*DnH0JI)ZPJ!Xc7{u)st`5k;4nDx`_ z9EtLowh`;MWhj1bj~cCu*^U)`kGtYYv`KD0v1nEJx5%sNn*op55V3MNg0`hLw^~yq z5}DHNE{PMX4dF#Wk=Nv2EuPaliwzvnjLa}bsFndra4ckesjX4$@Mmh{Ums4p`q{SjrY+EQzczJWx36d8V21a!Zw~S`c)m-` zMwH|8A@eLfldyd6dr`$oR=@kGi|ID2%|jlH$GLw3Y()hOBlDI{<5Qo-(3?HW9)h8? zmqQYPAT~1xslj>T5j%HyIL=^^)a7WnRMJDbnTbI8ism#9Ue4Ibhx+xi+wJ~>9}7nC z^(*h_rv%^nPPphc`sC|7eTqNpJ&S$fqZj=>N;J}R*8G=iWuS`!T z;@u}Kj+L8(vF`<9TpbwopN0mq;VF3II}^r$j*Gf4^i?Aq=!Ed?8El0*+?%xgse3um^h_i zAI16l?$tI4Rn@IZd98Wzgt(ozjT9els0vql>f<ONgIT7vFD3_=rQ(8b)L)3Ub zQ|Weik3u-!EwA5OZ|9o3hsDJ!g)BqDEH&B03KLlH&2N$t{j8ZJs(ip>g@9e;H9iP^yk z&9~`k=?_;7%O=g+9ukg8uvK9CZhCslV@vbRY){n>I};52JX3++a|0XxymcSPmSG3t z@fn%b*O{cDp4iBtJ~f6~`J_!W?iJ&UcQnD1QuxlXcZ7+(Ve3_=kXn^5*zU7zp_)bv z^(%wwt3GgP8`UmMew1)pdB$&_xO9}Y;aKm1;5h&2m(j2Ec=OG{?{y%h6Je;U9{nT@ z5WKZFv$B6ae!ks>%3~Gd|1>ppq5e1ILDzjdL(X=8D4H^IUx{L~;+m?~pzgyiV>*Cy z{X~Ct0;(e_N!GS~DwA=k=Ru;Bi=(w0M@|f>ujkiGzqcoZW)9RZwq^^NG(D>uo6B{_ z0;y7=mZ**(op7xK@ic%eegYcVF$j9f!}P{c5>4jF)+FuR$%9?)2;S}L%;=zh@KK&9 zwY7tv&~z3bZDi9!qy`jEh`7dNnq-K4vKupOvYEX(5!pOUkGs5TDtmm+mo$ny4Y(c0 z+?t~q{yaK0skOLyDe8PdHmWgZz~G1Tx&YVZGMI%(J<)|p^EUvwNx5Nh^V1cs9bemI z;QlM;Vq1jK)3p{>vRVnLCLrohN&KWu2cN{c`dhv7Uut6)?0ciug5(cc1T^HAeIJMj zNJL|F@#WAC`3%o)>BR>nXg-@!vqkeYBcT#KCIzzT=WtExd%k3{iOy|)^AR0~)-wGw z-u;Sn1nZJp!(HIdWgA}*bF|~}jV{;TF$~RV*7@8EqtDewI{%WPBNFa)s2VUk9uKawdIQLfx`z6um zo_Ic$Xn7PdY(CQGuIuoHfN$P@4rDBlA68yFs^n5$druz#N6O_&^=` zYt&{IW)$Xj>X{mtYSnJoyhAF28+CJf%>Y%FC5&kkE{T za+=Z?rvQ*Z;l&(}3@QK2Yeh-9e@%g&iJX*QY7cN~ywaY~c?Z-&d)5^-qcxAgwyt(u zyR)^7p|v}l8^``;p0~VxVmiy^v~7bvv!1oU*sW%DRUf^327COuV-QiiJNPV6i37oO zqCZ>gbwXrP-I?nFox66brp;>?@66CW(fOh()dd_hFa(8&H>kvN0sK7(@JSfYnc*x0 z2$0;yfbN6^=67`?7(Hs{{^g~N*#7NuQPsUGKzc%IJCPhf+a~=^cea|YO?cZ9Gy@H^ znH9g-W->SL&FG;Vl#Kx^2Ni_BQBD%Y^ou@Ooficwe+=vpIvZd&c06Q#=C^}r7jAK){}`S7OfK{rPDq5*rk(~WOdMbVxaMC#OaHZ@N0+K^H{{6 z(zuzJYVgk%?VdyM&$pBx)3U8&2`vHQp#jXBrrYU^q1Ll{SQS7w&nN|9TFe!8)bUm4 ztONe@YTO`0jZ4o1J0TzKM>I3OumF!Vp#06loi$L!LGNI*PYb!slM<9p_N4eqe)<`# z>J@|^Xw2HSmd2;%4<~RyOTk=T=vgB=FA2=H0ce25O2p?anFXZsaWE}omq445F>ln` zgdP7p-r|!(t_O{4%)9Yc#gmKas+b*hA(phhL6A%)TZwIZI+@3_W+1MswZ}k#^-&=? zs_2MTybHv|NCm$}_~eocWUaV6n{P-#6t!oaKzn&cwN}T zKzEjKMf8u)Q!+y#^z0U-4lr6cRa#*^5{g*ZlH1)8Y4x^+whzWGbgvyN8hJyLM;Evw ztU=m@?4uR9OR{MoiAmep^;nEf?!Dr0^lGqw%8*|pnbk&LZ**5)h2-WN7$1Gb5~=x& z@>9`2HsQ+t{PRy**v_bDNs6v{30FSwGkic!7X9ioSs8Xry;V%^1jPIyhB2%gcKVD3 zN$`nQ?rLpG%^?Y-Ol-|0w>mD7Ok?-k=*1dhNG(T7)|Jzhjazz1hb0lj5;^)j2`8=< zBx{;yN0`4kp$T4Jpl;l^IpDrQ!s&x{nZHZexyo6?@@--h(UUIy$v zMpMr_=+37upNvQ{oT*+gXM=-@K0Lg%a`Grt-3y*#8tL1*>bK3bB{iJg9Pp3K9K0Ta z;cz%Y%iGIe%fa)3M-W`>zY_dE8qtoApI!Ffj~rZDURD7vi&jL!Wo6N5VhSHzR0*Z{ zw^zgYp_8+hKU^9mr|>sWckt11en4>b|L^QLpFitAwi2!Ry4U(7$ zNB>=UiL-DgT8x4sil{AMKpYZaCl(8c0cf-w29Eqsz`fw$zZ)bPjYj@ohCw3b|H)AQ s@M6&N|6~}9!vA{x{Tv>6IQxN>mEj08qM@MtC5+;~FCr|gX`}`IA4`P{bN~PV delta 4498 zcmajaWmFVyvjA}E1px&?x=V7Ggn+^7zrHb z0}Qgk0c<^OTRjlqt(TUt;!to(VF&W;XHaK}aehO8GSwHBZL=Bd<#Cg}$;?du?m=sQu95Nr}kr-?a>Pw)IPIq)by)}f5H zS*9uoEW!DE1RI6YGsSXKr_Tt*+V7nNz!t=sF#8PV%)>lpHR?vyoxQ^cAE|EZwnjfj)RY_xa&M4m#C(A_Mvgi%ATovOqDdB(|-E-T<(SE1@T6i>psVF24Lw ziKjC*4*78Sxqg@KyKt0^@)Xwq>oW@_&JLmPa{xDdJ<+_8QSKbDmbW2>0((&;oXz@B zv5HK|G`OW!x?A7TuHV(9}BWs1Zx2D~uNl#kJk{D!ZGFoF$^S5;)2 zn#Q3sIrA0yOlp02stsjx`WyfZ1CHD}>O*q0?fuQ3(_nYXBAl{<$1;VFztK~1Ng?$Y zg;Vum8dNO=nnA(Mk`jBJ7h-=BZ@y+Rz(Nb4c=EF{9e8F5}UDy2O&AVzC4kxTeU zkLvZXY<;qE0w-4fTQZ$`is{%Xh`cnKLLA>H%a&zD+@>toe%sH@XI)b|f6#-Npcw@x zupFfSMK-=+R2;FgPN{nD{Lm{p)2-9O647AM5Q4;8XI*Mkgy6?yvs4w!R%HSKNZ|b6pKvUFgS@~mMCGEDrcrzrX z%t-%H7A9M$QXn3|*JU(KT?_4r`-+NVux_DPf?I#gI(dHp75ujHSjV@G-)u>Un%a%= z9bnp98_O>l`;#I1*m>Unn-v*h!un`W|GJ2BGLTuEWXNJI7N72na&LtuO~1x_qkCd6lOCg-PLBF> zcyBzv>uhC3FQeH41r9|#PK|&&k1>(9u-N<m`)hbHxJ>P%rYG+$gX%T+t*(<)61 zMx%s2lSH!5$ia}*Qqlaeid!YP#8o&YYhA27yJjE8?9rWcs2?z;tufDsl8ie)9pFE- zHB~J@+Wj$LsYNAt{hMK5$YhuKD|h#ohKS3x?w9&zrf3oF?xv9VdMM&~$wm-<2IkjxX9t~SYs3_9MtY~J&aX7yae&0qNr4Z2|s|l~Uf9^ur zK8|-3j*H;G2M>S6IE;Fgv<4dTBWLYn&1v7_`rS7H@D9KIl<03bM9M=a^kyXd=!G!2 z2+=gaC={g`KCJ7!E$VS)8`qB2#S>MW8gwGhG=WevmG;HBJgbx!g|o~Wg+Dmz>P?q~ z-S3f6o+6WeId<$rFX#**uFLu4&+Vr&r?=W`CQZ1#t905`e1a-7mmjts_r|B&pcl!7 z6DK|S#dVo{V{^M~P>x+{^Ut{d1_94-l!v&bf)(EqV=Ce^0~R zzDTW!!|U(>m`Y-@2&Zi*JJRq7CwPIGD#=11b{a49z1wjlyR9x1$P=fTdbw9Y``8kL z`F#WmqJy<}ii|A=d(Q6zu=uqkqIEVcD3-3wIrL|vZ zdByf=xUol|x_Zdz5MnCtd}ES6u(3tLSS>H$l{Mw^cI&|3OjyYkV_8vWDqFRx9<)6J z?>rv@{x*_#Fkd0VK$EA{oV9zz-619`CVTK@;F6(CY;+kCi!dkjNCHAjy-O=mCH`L2(`rt)Y2S>oa&za}PE zwA0pwEW7HMv!-6yzqCGVmdl(di}T|}E!mf>XOuHgY94zHPK$N37Oo;52zc-O#Xm+L zFF&p1E(9t_buz@&8Ysz8-yV&!m1I4To$thZ9(p2E(~TO#4iCRP=)AjJ?5Keaj?s~| z zim|!LR(pr>z?L9~4N@KiSRB9wvnDkc(US(_^Rc?Aikc@cc>;UbWB zH5rW=++Ja2`Q+P9v4N7{(YY6ZdwWw)M}BxgBbS(rD?O5dp2?7WJh`}8&69$$d6DS% z{UL~-P4RA4JNcM>cDH%g?(qwir{b&S`+8+43LS50_~iVsaclWY+6 zxnkNBx35U@`Wk#Y+HE*jlJ6)NNX(+dX1zpnDAb5kr|6Ln^uj~-UhAR+yh`+&$=&4t zltwGmpZIee#f2FYET6rngOM%kom#X$k9b=I+JUbs@mUSXkRf?Jm~{C(_>oODO3$a= zFY08Hu!P;MVfG}yYIlI64`P+Mo2f!5#a2H>f0mk`@oWyqgwe6Llj2pmn)E#$6yc)T zPq?Le+9LB=VuQ%*VLm%*#j!YVejfLSw*9wP{(|Wno<3LbwxN(`92IXhd5LL|@kf(6 zp7SNdl7@GFaYuR67jbpxN#D3$5n8TxEur`fr4F_Y(b&*jL&ST zV*qd;lgUdVX&|6)YRuGpuAhCDA8hHOk>jUf<3uGUJI2YYYKxa((y*z)`1R%6F8z15 zs5@;@ubS3h+Lg*nKY#w*K=$dn1ChIjz_$3!TesVNuErk9PRHgyh2)V}L8FTUfGVdr zOI+b%`eXjpC1z1ntM8grgI!1R?~ZcI9NRaB+_49*reYGL!(vXqLAAbc?x-=zH;v6O zbGSVNLxt5{-=+09jnw{f^CQ|#bpP)*nC9(d;gav{Y%dBE{yT?;_Mtq%{5ahVSVKu78EwMO@MF zSA%E*F9C2e9oWPt$4dZugP|gT(0`9x$H>3A*B-F3Akz}1;j5}P@=PETB(xvWlL@@x z(l8KoKVG~olR6Ffi<=s9mz6!vJ`nY#OJVf?Wcxb6*`k^9OWvc6U7uur!4*>YZ&9n!}Iux@@Pbsfvg6w1V*5DzDL8K{R_*mQkH z!T0pE5Jmo6vPa@A{y$*0ShPb*3krkra$DIV1g$Ktp4u8eeav(D{0S;DYB=f(wy0vA@|gUfIw zQ`(-?`LaHa(iPQ@F62s#Scwd?K6l1o|A(_3P|5cR?IOd(5Oj|Mf~Ygd7=H=VQIU0| z8u|*A@p;P3Aow?xOO8$`m^4s_yX=w`o63Il;8^A&FK<|fJwm|c z&7w_TlU-^HdTqb)6?w(#Rb}YuZ0^;X1pIX9Ye+?`?4pFm#TpLf zadvcW^_I;~;gzt@D(m0jwfP3K>SIhG!Rz_4hi|AV_137EKT&xDA{pbjNa+jC2KgXF zNxJVab^gO#$@82#VOuI!t`l6&^aP%~Z~j13XN#{YMf4AHnV|0TxQiret5HsKQ{$ir zOqP3*vMkRJj>W+&75~Mp{W41C#tdH$6`|?tconE7-Eb8D+D3c^amZaKR^4|2Q2Xgv z4tuRen!d!qLMRTB6vNywRN(O{o2sd(DGD0ddD&XITamG|vjgEscOSTwo0Dq*`;-6i z^l2tGGYCYAU04hx#x5!@4rLbwK|t&l{|u=6Sh+gcD7ZVg+OdQF5e07>J9nRd^?)G% z{FUwg8-&3iseeGp%0tc0$-(j8JrGd3I_NI}5qP+|Z8 diff --git a/doc/specs/vulkan/images/tstripadj.svg b/doc/specs/vulkan/images/tstripadj.svg index 31330b8c..2fe1a4dd 100644 --- a/doc/specs/vulkan/images/tstripadj.svg +++ b/doc/specs/vulkan/images/tstripadj.svg @@ -1,5 +1,5 @@ - + + id="svg2"> @@ -24,55 +19,23 @@ image/svg+xml - + - + style="fill:none;stroke:#000000;stroke-width:0.1" /> 0 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 2 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 1 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 5 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 3 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 7 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 4 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 6 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 9 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 8 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 10 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 11 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 0 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 2 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 1 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 5 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 3 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 7 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 4 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 6 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 8 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 9 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 0 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 2 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 1 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 5 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 3 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 4 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 6 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 7 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 0 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 2 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 1 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 3 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 4 + style="fill:none;stroke:#000000;stroke-width:0.1" /> 5 >:: endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt b/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt index 6bb11e95..05fead65 100644 --- a/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt +++ b/doc/specs/vulkan/validity/protos/vkFlushMappedMemoryRanges.txt @@ -10,7 +10,6 @@ endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pMemoryRanges must: be a pointer to an array of pname:memoryRangeCount valid sname:VkMappedMemoryRange structures * The value of pname:memoryRangeCount must: be greater than `0` -* The memory ranges specified by pname:pMemoryRanges must: all currently be mapped ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkGetDeviceQueue.txt b/doc/specs/vulkan/validity/protos/vkGetDeviceQueue.txt index 61022584..03b5aad3 100644 --- a/doc/specs/vulkan/validity/protos/vkGetDeviceQueue.txt +++ b/doc/specs/vulkan/validity/protos/vkGetDeviceQueue.txt @@ -9,7 +9,7 @@ Valid Usage endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pQueue must: be a pointer to a sname:VkQueue handle -* pname:queueFamilyIndex must: be one of the queue family indexes specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure +* pname:queueFamilyIndex must: be one of the queue family indices specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure * pname:queueIndex must: be less than the number of queues created for the specified queue family index when pname:device was created, via the pname:queueCount member of the sname:VkDeviceQueueCreateInfo structure ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt b/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt index 6bb11e95..05fead65 100644 --- a/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt +++ b/doc/specs/vulkan/validity/protos/vkInvalidateMappedMemoryRanges.txt @@ -10,7 +10,6 @@ endif::doctype-manpage[] * pname:device must: be a valid sname:VkDevice handle * pname:pMemoryRanges must: be a pointer to an array of pname:memoryRangeCount valid sname:VkMappedMemoryRange structures * The value of pname:memoryRangeCount must: be greater than `0` -* The memory ranges specified by pname:pMemoryRanges must: all currently be mapped ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/protos/vkMapMemory.txt b/doc/specs/vulkan/validity/protos/vkMapMemory.txt index 974e4304..4f72dd0f 100644 --- a/doc/specs/vulkan/validity/protos/vkMapMemory.txt +++ b/doc/specs/vulkan/validity/protos/vkMapMemory.txt @@ -15,7 +15,8 @@ endif::doctype-manpage[] * Each of pname:device and pname:memory must: have been created, allocated or retrieved from the same sname:VkPhysicalDevice * pname:memory mustnot: currently be mapped * pname:offset must: be less than the size of pname:memory -* If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the pname:size of the pname:memory +* pname:size must: be greater than `0` +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of the pname:memory minus pname:offset * pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt b/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt index 1b5764b0..bbdfd76a 100644 --- a/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt +++ b/doc/specs/vulkan/validity/structs/VkBufferMemoryBarrier.txt @@ -13,7 +13,8 @@ endif::doctype-manpage[] * pname:dstAccessMask must: be a valid combination of elink:VkAccessFlagBits values * pname:buffer must: be a valid sname:VkBuffer handle * The value of pname:offset must: be less than the size of pname:buffer -* The sum of pname:offset and pname:size must: be less than or equal to than the size of pname:buffer +* The value of pname:size must: be greater than `0` +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to than the size of pname:buffer minus pname:offset * If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED * If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <>) * If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex are valid queue families, at least one of them must: be the same as the family of the queue that will execute this barrier diff --git a/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt index 999a36de..0517ef27 100644 --- a/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkBufferViewCreateInfo.txt @@ -12,9 +12,10 @@ endif::doctype-manpage[] * pname:flags must: be `0` * pname:buffer must: be a valid sname:VkBuffer handle * pname:format must: be a valid elink:VkFormat value +* The value of pname:offset must: be less than the size of pname:buffer * The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment * The value of pname:range must: be greater than `0` -* If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer +* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset * If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format * The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements * pname:buffer must: have been created with a pname:usage value containing at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT diff --git a/doc/specs/vulkan/validity/structs/VkCopyDescriptorSet.txt b/doc/specs/vulkan/validity/structs/VkCopyDescriptorSet.txt index 986bb0a0..08f224b3 100644 --- a/doc/specs/vulkan/validity/structs/VkCopyDescriptorSet.txt +++ b/doc/specs/vulkan/validity/structs/VkCopyDescriptorSet.txt @@ -16,6 +16,7 @@ endif::doctype-manpage[] * The sum of pname:srcArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:srcBinding, and all applicable consecutive bindings, as described by <> * pname:dstBinding must: be a valid binding within pname:dstSet * The sum of pname:dstArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:dstBinding, and all applicable consecutive bindings, as described by <> +* If pname:srcSet is equal to pname:dstSet, then the source and destination ranges of descriptors mustnot: overlap, where the ranges may: include array elements from consecutive bindings as described by <> ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt b/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt index e2c37da1..9103cbcb 100644 --- a/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDescriptorBufferInfo.txt @@ -8,7 +8,9 @@ Valid Usage ----------- endif::doctype-manpage[] * pname:buffer must: be a valid sname:VkBuffer handle -* If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer +* pname:offset must: be less than the size of pname:buffer +* The value of pname:range must: be greater than `0` +* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt b/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt index eb5ab663..cdf8810f 100644 --- a/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkDescriptorSetAllocateInfo.txt @@ -14,6 +14,7 @@ endif::doctype-manpage[] * The value of pname:descriptorSetCount must: be greater than `0` * Each of pname:descriptorPool and the elements of pname:pSetLayouts must: have been created, allocated or retrieved from the same sname:VkDevice * The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool +* pname:descriptorPool must: have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt index f1289383..595953a7 100644 --- a/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt +++ b/doc/specs/vulkan/validity/structs/VkGraphicsPipelineCreateInfo.txt @@ -24,7 +24,6 @@ endif::doctype-manpage[] * If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineIndex must: be `-1` * If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineHandle must: be a valid sname:VkPipeline handle * If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, it must: be a valid handle to a graphics sname:VkPipeline -* pname:stageCount must: be greater than or equal to `1` * The pname:stage member of each element of pname:pStages must: be unique * The pname:stage member of one element of pname:pStages must: be ename:VK_SHADER_STAGE_VERTEX_BIT * The pname:stage member of any given element of pname:pStages mustnot: be ename:VK_SHADER_STAGE_COMPUTE_BIT diff --git a/doc/specs/vulkan/validity/structs/VkMappedMemoryRange.txt b/doc/specs/vulkan/validity/structs/VkMappedMemoryRange.txt index 63362491..4384fe95 100644 --- a/doc/specs/vulkan/validity/structs/VkMappedMemoryRange.txt +++ b/doc/specs/vulkan/validity/structs/VkMappedMemoryRange.txt @@ -11,9 +11,10 @@ endif::doctype-manpage[] * pname:pNext must: be `NULL` * pname:memory must: be a valid sname:VkDeviceMemory handle * pname:memory must: currently be mapped -* pname:offset must: be less than the size of the currently mapped range of pname:memory -* If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the size of the currently mapped range of pname:memory -* pname:offset and pname:size must: each be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and pname:size must: specify a range contained within the currently mapped range of pname:memory +* If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be within the currently mapped range of pname:memory +* pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize +* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt b/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt index ec896f35..a39f72fa 100644 --- a/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt +++ b/doc/specs/vulkan/validity/structs/VkPushConstantRange.txt @@ -9,9 +9,10 @@ Valid Usage endif::doctype-manpage[] * pname:stageFlags must: be a valid combination of elink:VkShaderStageFlagBits values * pname:stageFlags mustnot: be `0` -* The sum of pname:offset and pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize +* The value of pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize * The value of pname:size must: be greater than `0` * The value of pname:size must: be a multiple of `4` +* The value of pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/doc/specs/vulkan/validity/structs/VkSparseMemoryBind.txt b/doc/specs/vulkan/validity/structs/VkSparseMemoryBind.txt index 1325b89d..9f3b142d 100644 --- a/doc/specs/vulkan/validity/structs/VkSparseMemoryBind.txt +++ b/doc/specs/vulkan/validity/structs/VkSparseMemoryBind.txt @@ -11,10 +11,11 @@ endif::doctype-manpage[] * pname:flags must: be a valid combination of elink:VkSparseMemoryBindFlagBits values * If pname:memory is not sname:VK_NULL_HANDLE, pname:memory and pname:memoryOffset must: match the memory requirements of the resource, as described in section <> * If pname:memory is not sname:VK_NULL_HANDLE, pname:memory mustnot: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set +* pname:size must: be greater than `0` * pname:resourceOffset must: be less than the size of the resource -* The sum of pname:resourceOffset and pname:size must: be less than or equal to the size of the resource +* pname:size must: be less than or equal to the size of the resource minus pname:resourceOffset * pname:memoryOffset must: be less than the size of pname:memory -* The sum of pname:memoryOffset and pname:size must: be less than or equal to the size of pname:memory +* pname:size must: be less than or equal to the size of pname:memory minus pname:memoryOffset 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 c6e845e6..7053c7f8 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 -* The sum of the pname:offset and pname:size members of any given element of pname:pMapEntries must: be less than or equal to pname:dataSize +* 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/VkVertexInputAttributeDescription.txt b/doc/specs/vulkan/validity/structs/VkVertexInputAttributeDescription.txt index d0424de6..df255704 100644 --- a/doc/specs/vulkan/validity/structs/VkVertexInputAttributeDescription.txt +++ b/doc/specs/vulkan/validity/structs/VkVertexInputAttributeDescription.txt @@ -8,6 +8,7 @@ Valid Usage ----------- endif::doctype-manpage[] * pname:format must: be a valid elink:VkFormat value +* pname:location must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes * pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings * pname:offset must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset * pname:format must: be allowed as a vertex buffer format, as specified by the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties diff --git a/doc/specs/vulkan/validity/structs/VkVertexInputBindingDescription.txt b/doc/specs/vulkan/validity/structs/VkVertexInputBindingDescription.txt index ba6ae5cf..8d778af3 100644 --- a/doc/specs/vulkan/validity/structs/VkVertexInputBindingDescription.txt +++ b/doc/specs/vulkan/validity/structs/VkVertexInputBindingDescription.txt @@ -8,7 +8,7 @@ Valid Usage ----------- endif::doctype-manpage[] * pname:inputRate must: be a valid elink:VkVertexInputRate value -* pname:binding must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings +* pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings * pname:stride must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/vkapi.py b/doc/specs/vulkan/vkapi.py index 1ad67501..425fdfc2 100644 --- a/doc/specs/vulkan/vkapi.py +++ b/doc/specs/vulkan/vkapi.py @@ -47,9 +47,9 @@ consts['VK_SUBOPTIMAL_KHR'] = 'VkResult' consts['VK_ERROR_OUT_OF_DATE_KHR'] = 'VkResult' consts['VK_ERROR_INCOMPATIBLE_DISPLAY_KHR'] = 'VkResult' consts['VK_ERROR_VALIDATION_FAILED_EXT'] = 'VkResult' -consts['VK_NV_EXTENSION_0_ERROR'] = 'VkResult' +consts['VK_ERROR_INVALID_SHADER_NV'] = 'VkResult' consts['VK_NV_EXTENSION_1_ERROR'] = 'VkResult' -enums['VkResult'] = ['VK_SUCCESS', 'VK_NOT_READY', 'VK_TIMEOUT', 'VK_EVENT_SET', 'VK_EVENT_RESET', 'VK_INCOMPLETE', 'VK_ERROR_OUT_OF_HOST_MEMORY', 'VK_ERROR_OUT_OF_DEVICE_MEMORY', 'VK_ERROR_INITIALIZATION_FAILED', 'VK_ERROR_DEVICE_LOST', 'VK_ERROR_MEMORY_MAP_FAILED', 'VK_ERROR_LAYER_NOT_PRESENT', 'VK_ERROR_EXTENSION_NOT_PRESENT', 'VK_ERROR_FEATURE_NOT_PRESENT', 'VK_ERROR_INCOMPATIBLE_DRIVER', 'VK_ERROR_TOO_MANY_OBJECTS', 'VK_ERROR_FORMAT_NOT_SUPPORTED', 'VK_ERROR_SURFACE_LOST_KHR', 'VK_ERROR_NATIVE_WINDOW_IN_USE_KHR', 'VK_SUBOPTIMAL_KHR', 'VK_ERROR_OUT_OF_DATE_KHR', 'VK_ERROR_INCOMPATIBLE_DISPLAY_KHR', 'VK_ERROR_VALIDATION_FAILED_EXT', 'VK_NV_EXTENSION_0_ERROR', 'VK_NV_EXTENSION_1_ERROR'] +enums['VkResult'] = ['VK_SUCCESS', 'VK_NOT_READY', 'VK_TIMEOUT', 'VK_EVENT_SET', 'VK_EVENT_RESET', 'VK_INCOMPLETE', 'VK_ERROR_OUT_OF_HOST_MEMORY', 'VK_ERROR_OUT_OF_DEVICE_MEMORY', 'VK_ERROR_INITIALIZATION_FAILED', 'VK_ERROR_DEVICE_LOST', 'VK_ERROR_MEMORY_MAP_FAILED', 'VK_ERROR_LAYER_NOT_PRESENT', 'VK_ERROR_EXTENSION_NOT_PRESENT', 'VK_ERROR_FEATURE_NOT_PRESENT', 'VK_ERROR_INCOMPATIBLE_DRIVER', 'VK_ERROR_TOO_MANY_OBJECTS', 'VK_ERROR_FORMAT_NOT_SUPPORTED', 'VK_ERROR_SURFACE_LOST_KHR', 'VK_ERROR_NATIVE_WINDOW_IN_USE_KHR', 'VK_SUBOPTIMAL_KHR', 'VK_ERROR_OUT_OF_DATE_KHR', 'VK_ERROR_INCOMPATIBLE_DISPLAY_KHR', 'VK_ERROR_VALIDATION_FAILED_EXT', 'VK_ERROR_INVALID_SHADER_NV', 'VK_NV_EXTENSION_1_ERROR'] consts['VK_STRUCTURE_TYPE_APPLICATION_INFO'] = 'VkStructureType' consts['VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO'] = 'VkStructureType' consts['VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO'] = 'VkStructureType' diff --git a/out/index.html b/out/index.html index 1684a933..cfc7ba88 100644 --- a/out/index.html +++ b/out/index.html @@ -9,21 +9,21 @@ related documents. It is updated by hand periodically by Jon Leech.

diff --git a/src/spec/vk.xml b/src/spec/vk.xml index 3e259602..9c4d9a53 100644 --- a/src/spec/vk.xml +++ b/src/spec/vk.xml @@ -97,7 +97,7 @@ maintained in the master branch of the Khronos Vulkan Github project. #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 4) +#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 5) @@ -573,13 +573,14 @@ maintained in the master branch of the Khronos Vulkan Github project. VkStructureType sType const void* pNext VkDeviceMemory memory - VkDeviceSize offset - VkDeviceSize size + VkDeviceSize offset + VkDeviceSize size pname:memory must: currently be mapped - pname:offset must: be less than the size of the currently mapped range of pname:memory - If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the size of the currently mapped range of pname:memory - pname:offset and pname:size must: each be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and pname:size must: specify a range contained within the currently mapped range of pname:memory + If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be within the currently mapped range of pname:memory + pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize @@ -599,7 +600,9 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize offset VkDeviceSize range - If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer + pname:offset must: be less than the size of pname:buffer + The value of pname:range must: be greater than `0` + If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset @@ -653,6 +656,7 @@ maintained in the master branch of the Khronos Vulkan Github project. The sum of pname:srcArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:srcBinding, and all applicable consecutive bindings, as described by <<descriptorsets-updates-consecutive>> pname:dstBinding must: be a valid binding within pname:dstSet The sum of pname:dstArrayElement and pname:descriptorCount must: be less than or equal to the number of array elements in the descriptor set binding specified by pname:dstBinding, and all applicable consecutive bindings, as described by <<descriptorsets-updates-consecutive>> + If pname:srcSet is equal to pname:dstSet, then the source and destination ranges of descriptors mustnot: overlap, where the ranges may: include array elements from consecutive bindings as described by <<descriptorsets-updates-consecutive>> @@ -683,9 +687,10 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize offset VkDeviceSize range + The value of pname:offset must: be less than the size of pname:buffer The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment The value of pname:range must: be greater than `0` - If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer + If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be less than or equal to the size of pname:buffer minus pname:offset If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements pname:buffer must: have been created with a pname:usage value containing at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT @@ -743,7 +748,8 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize size The value of pname:offset must: be less than the size of pname:buffer - The sum of pname:offset and pname:size must: be less than or equal to than the size of pname:buffer + The value of pname:size must: be greater than `0` + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to than the size of pname:buffer minus pname:offset If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <<devsandqueues-queueprops>>) If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex are valid queue families, at least one of them must: be the same as the family of the queue that will execute this barrier @@ -839,7 +845,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain at least one of ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT - + VkDeviceSize offset VkDeviceSize size VkDeviceSize rowPitch @@ -889,10 +895,11 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:memory is not sname:VK_NULL_HANDLE, pname:memory and pname:memoryOffset must: match the memory requirements of the resource, as described in section <<resources-association>> If pname:memory is not sname:VK_NULL_HANDLE, pname:memory mustnot: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set + pname:size must: be greater than `0` pname:resourceOffset must: be less than the size of the resource - The sum of pname:resourceOffset and pname:size must: be less than or equal to the size of the resource + pname:size must: be less than or equal to the size of the resource minus pname:resourceOffset pname:memoryOffset must: be less than the size of pname:memory - The sum of pname:memoryOffset and pname:size must: be less than or equal to the size of pname:memory + pname:size must: be less than or equal to the size of pname:memory minus pname:memoryOffset @@ -1095,6 +1102,7 @@ maintained in the master branch of the Khronos Vulkan Github project. const VkDescriptorSetLayout* pSetLayouts The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool + pname:descriptorPool must: have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts @@ -1109,7 +1117,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 - The sum of the pname:offset and pname:size members of any given element of pname:pMapEntries must: be less than or equal to pname:dataSize + For any given element of pname:pMapEntries, pname:size must be less than or equal to pname:dataSize minus pname:offset @@ -1163,7 +1171,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t stride VkVertexInputRate inputRate - pname:binding must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings + pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings pname:stride must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride @@ -1173,6 +1181,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkFormat format uint32_t offset + pname:location must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings pname:offset must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset pname:format must: be allowed as a vertex buffer format, as specified by the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties @@ -1357,7 +1366,6 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineIndex must: be `-1` If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineHandle must: be a valid sname:VkPipeline handle If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, it must: be a valid handle to a graphics sname:VkPipeline - pname:stageCount must: be greater than or equal to `1` The pname:stage member of each element of pname:pStages must: be unique The pname:stage member of one element of pname:pStages must: be ename:VK_SHADER_STAGE_VERTEX_BIT The pname:stage member of any given element of pname:pStages mustnot: be ename:VK_SHADER_STAGE_COMPUTE_BIT @@ -1409,9 +1417,10 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t offset uint32_t size - The sum of pname:offset and pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize + The value of pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize The value of pname:size must: be greater than `0` The value of pname:size must: be a multiple of `4` + The value of pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset @@ -2698,7 +2707,7 @@ maintained in the master branch of the Khronos Vulkan Github project. - + @@ -2934,7 +2943,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If no sname:VkAllocationCallbacks were provided when pname:instance was created, pname:pAllocator must: be `NULL` - + VkResult vkEnumeratePhysicalDevices VkInstance instance uint32_t* pPhysicalDeviceCount @@ -3048,7 +3057,7 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t queueIndex VkQueue* pQueue - pname:queueFamilyIndex must: be one of the queue family indexes specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure + pname:queueFamilyIndex must: be one of the queue family indices specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure pname:queueIndex must: be less than the number of queues created for the specified queue family index when pname:device was created, via the pname:queueCount member of the sname:VkDeviceQueueCreateInfo structure @@ -3104,7 +3113,8 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:memory mustnot: currently be mapped pname:offset must: be less than the size of pname:memory - If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the pname:size of the pname:memory + pname:size must: be greater than `0` + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of the pname:memory minus pname:offset pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT @@ -3121,18 +3131,12 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDevice device uint32_t memoryRangeCount const VkMappedMemoryRange* pMemoryRanges - - The memory ranges specified by pname:pMemoryRanges must: all currently be mapped - VkResult vkInvalidateMappedMemoryRanges VkDevice device uint32_t memoryRangeCount const VkMappedMemoryRange* pMemoryRanges - - The memory ranges specified by pname:pMemoryRanges must: all currently be mapped - void vkGetDeviceMemoryCommitment @@ -3163,7 +3167,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If pname:buffer was created with the ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment If pname:buffer was created with the ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer - The sum of pname:memoryOffset and the size of pname:buffer must: be less than or equal to the size of pname:memory + The size of pname:buffer must: be less than or equal to the size of pname:memory minus pname:memoryOffset pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetBufferMemoryRequirements with pname:buffer @@ -3185,7 +3189,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:memoryOffset must: be less than the size of pname:memory pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image pname:memoryOffset must: be an integer multiple of the pname:alignment member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image - pname:memory must: have storage from pname:memoryOffset onwards equal to or greater than the pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image + The pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image must: be less than or equal to the size of pname:memory minus pname:memoryOffset @@ -4047,8 +4051,11 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t regionCount const VkBufferCopy* pRegions - The sum of the pname:srcOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer - The sum of the pname:dstOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer + The pname:copySize member of a given element of pname:pRegions must: be greater than `0` + The pname:srcOffset member of a given element of pname:pRegions must: be less than the size of pname:srcBuffer + The pname:dstOffset member of a given element of pname:pRegions must: be less than the size of pname:dstBuffer + The pname:copySize member of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer minus pname:srcOffset + The pname:copySize member of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset The union of the source regions, and the union of the destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag @@ -4152,10 +4159,11 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize dataSize const uint32_t* pData - The sum of pname:dstOffset and pname:dataSize must: be less than or equal to the size of pname:dstBuffer + The value of pname:dataSize must: be greater than `0` + The value of pname:dstOffset must: be less than the size of pname:dstBuffer + The value of pname:dataSize must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag The value of pname:dstOffset must: be a multiple of `4` - The value of pname:dataSize must: be greater than `0` The value of pname:dataSize must: be less than or equal to `65536` The value of pname:dataSize must: be a multiple of `4` @@ -4168,10 +4176,12 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize size uint32_t data - If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:dstOffset and pname:size must: be less than or equal to the size of pname:dstBuffer - pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag + pname:size must: be greater than `0` + pname:dstOffset must: be less than the size of pname:dstBuffer pname:dstOffset must: be a multiple of `4` + If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be less than or equal to the size of pname:dstBuffer minus pname:dstOffset If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of `4` + pname:dstBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag @@ -4363,6 +4373,7 @@ maintained in the master branch of the Khronos Vulkan Github project. VkDeviceSize stride VkQueryResultFlags flags + 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` @@ -4383,6 +4394,8 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:stageFlags must: match exactly the shader stages used in pname:layout for the range specified by pname:offset and pname:size pname:offset must: be a multiple of `4` pname:size must: be a multiple of `4` + pname:offset must: be less than the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize + pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus pname:offset @@ -4670,7 +4683,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice - + VkResult vkCreateDebugReportCallbackEXT VkInstance instance const VkDebugReportCallbackCreateInfoEXT* pCreateInfo @@ -5088,11 +5101,11 @@ maintained in the master branch of the Khronos Vulkan Github project. - + - - - + + + diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index d7abf682..f57c4d93 100644 --- a/src/vulkan/vulkan.h +++ b/src/vulkan/vulkan.h @@ -41,7 +41,7 @@ extern "C" { (((major) << 22) | ((minor) << 12) | (patch)) // Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 4) +#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 5) #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) @@ -142,6 +142,7 @@ typedef enum VkResult { VK_ERROR_OUT_OF_DATE_KHR = -1000001004, VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, + VK_ERROR_INVALID_SHADER_NV = -1000012000, VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED, VK_RESULT_END_RANGE = VK_INCOMPLETE, VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1), @@ -979,7 +980,7 @@ typedef enum VkShaderStageFlagBits { VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, - VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F, + VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, VK_SHADER_STAGE_ALL = 0x7FFFFFFF, } VkShaderStageFlagBits; typedef VkFlags VkPipelineVertexInputStateCreateFlags; @@ -3774,6 +3775,11 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( const char* pMessage); #endif +#define VK_NV_glsl_shader 1 +#define VK_NV_GLSL_SHADER_SPEC_VERSION 1 +#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" + + #ifdef __cplusplus } #endif