From 0d5f92c7fafa7b61a14fce683f9624ba8c7f9a43 Mon Sep 17 00:00:00 2001 From: Jon Leech Date: Sun, 10 Jun 2018 19:43:40 -0700 Subject: [PATCH] Change log for June 10, 2018 Vulkan 1.1.77 spec update: * Update release number to 77. Public Issues: * Remove redundant asciidoctor ifdef in slink:VkDeviceCreateInfo valid usage statement (public pull request 718). Internal Issues: * Require that the returned slink:VkMemoryRequirements::pname:alignment reflect the minimum alignment requirements for the buffer's usages, and make dynamic offset alignment valid usage more explicit for flink:vkBindBufferMemory and flink:vkCmdBindDescriptorSets (internal issue 1170). * Explicitly state that objects of type code:OpTypeImage, code:OpTypeSampler, and code:OpTypeSampledImage must not be stored to in the <> section (internal issue 1262). * Clarify rules about validating descriptor set/binding against storage class and descriptor type in the <> section, and add an anchor for and references to the <> table (internal issue 1266). * Use correct spelling of SPIR-V decoration code:NonWritable in several places (internal issue 1298). Other Issues: * Update specification links to files in the old KhronosGroup/Vulkan-LoaderAndValidationLayers repository with corresponding links into the new repositories that replace it. * Move validity requirement for slink:VkSamplerCreateInfo into the valid usage block instead of the body text, and give it a VUID. * Use the full name of the "`style guide`" in a reference in the description of slink:vkGetPhysicalDeviceProperties, update the <>, and use the the full name in the registry index page. --- Makefile | 2 +- appendices/VK_GOOGLE_display_timing.txt | 3 +- appendices/VK_KHR_display.txt | 2 +- appendices/VK_KHR_display_swapchain.txt | 2 +- appendices/VK_KHR_surface.txt | 2 +- appendices/VK_KHR_swapchain.txt | 2 +- appendices/spirvenv.txt | 11 ++++-- chapters/descriptorsets.txt | 18 +++++++--- chapters/devsandqueues.txt | 6 ++-- chapters/extensions.txt | 4 +-- chapters/features.txt | 4 +-- chapters/initialization.txt | 2 +- chapters/interfaces.txt | 14 +++----- chapters/introduction.txt | 6 ++-- chapters/resources.txt | 45 +++++++------------------ chapters/samplers.txt | 3 +- include/vulkan/vulkan_core.h | 2 +- reflow_count.py | 2 +- xml/vk.xml | 2 +- 19 files changed, 62 insertions(+), 70 deletions(-) mode change 100644 => 100755 appendices/spirvenv.txt mode change 100644 => 100755 chapters/features.txt diff --git a/Makefile b/Makefile index 1c19f236..2a9ab224 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ VERBOSE = # $(EXTENSIONS)) # ADOCOPTS options for asciidoc->HTML5 output NOTEOPTS = -a editing-notes -a implementation-guide -PATCHVERSION = 76 +PATCHVERSION = 77 ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS))) SPECREVISION = 1.1.$(PATCHVERSION) else diff --git a/appendices/VK_GOOGLE_display_timing.txt b/appendices/VK_GOOGLE_display_timing.txt index a23bbb61..611d3232 100644 --- a/appendices/VK_GOOGLE_display_timing.txt +++ b/appendices/VK_GOOGLE_display_timing.txt @@ -72,8 +72,7 @@ The example code for the this extension (like the `<>` and `VK_GOOGLE_display_timing` extensions) is contained in the cube demo that is shipped with the official Khronos SDK, and is being kept up-to-date in that location (see: -https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/demos/cube.c -). +https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c ). ==== === Version History diff --git a/appendices/VK_KHR_display.txt b/appendices/VK_KHR_display.txt index 551e9105..1007684b 100644 --- a/appendices/VK_KHR_display.txt +++ b/appendices/VK_KHR_display.txt @@ -237,7 +237,7 @@ extensions was removed from the appendix after revision 1.0.43. The display enumeration example code was ported to the cube demo that is shipped with the official Khronos SDK, and is being kept up-to-date in that location (see: -https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/demos/cube.c). +https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c). ==== === Version History diff --git a/appendices/VK_KHR_display_swapchain.txt b/appendices/VK_KHR_display_swapchain.txt index 06b66286..540c8a9e 100644 --- a/appendices/VK_KHR_display_swapchain.txt +++ b/appendices/VK_KHR_display_swapchain.txt @@ -96,7 +96,7 @@ extensions was removed from the appendix after revision 1.0.43. The display swapchain creation example code was ported to the cube demo that is shipped with the official Khronos SDK, and is being kept up-to-date in that location (see: -https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/demos/cube.c). +https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c). ==== === Version History diff --git a/appendices/VK_KHR_surface.txt b/appendices/VK_KHR_surface.txt index e4f0e6d7..a17e87f6 100644 --- a/appendices/VK_KHR_surface.txt +++ b/appendices/VK_KHR_surface.txt @@ -72,7 +72,7 @@ The example code for the `VK_KHR_surface` and `<>` extensions was removed from the appendix after revision 1.0.29. This WSI example code was ported to the cube demo that is shipped with the official Khronos SDK, and is being kept up-to-date in that location (see: -https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/demos/cube.c). +https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c). ==== === Issues diff --git a/appendices/VK_KHR_swapchain.txt b/appendices/VK_KHR_swapchain.txt index 4a4a63e3..8bc007ab 100644 --- a/appendices/VK_KHR_swapchain.txt +++ b/appendices/VK_KHR_swapchain.txt @@ -466,7 +466,7 @@ The example code for the `<>` and `VK_KHR_swapchain` extensions was removed from the appendix after revision 1.0.29. This WSI example code was ported to the cube demo that is shipped with the official Khronos SDK, and is being kept up-to-date in that location (see: -https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/demos/cube.c). +https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c). ==== === Version History diff --git a/appendices/spirvenv.txt b/appendices/spirvenv.txt old mode 100644 new mode 100755 index 92f35888..5e71e611 --- a/appendices/spirvenv.txt +++ b/appendices/spirvenv.txt @@ -387,7 +387,7 @@ endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[] entry points must: declare code:OriginUpperLeft. * The code:PixelCenterInteger execution mode must: not be used. Pixels are always centered at half-integer coordinates. - * Images + * Images and Samplers ** code:OpTypeImage must: declare a scalar 32-bit float or 32-bit integer type for the "`Sampled Type`". (code:RelaxedPrecision can: be applied to a sampling instruction and to @@ -403,7 +403,7 @@ endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[] <> is not enabled and an code:OpTypeImage has "`Image Format`" operand of code:Unknown, any variables created with the given type must be - decorated with code:NonWriteable. + decorated with code:NonWritable. ** code:OpImageQuerySizeLod, and code:OpImageQueryLevels must: only consume an "`Image`" operand whose type has its "`Sampled`" operand set to 1. @@ -412,6 +412,9 @@ endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[] used, must: be a vector that was formed with constant 0 for the [eq]#u# and [eq]#v# components. ** The "`Depth`" operand of code:OpTypeImage is ignored. + ** Objects of types code:OpTypeImage, code:OpTypeSampler, + code:OpTypeSampledImage, and arrays of these types must: not be stored + to or modified. * Decorations ** The code:GLSLShared and code:GLSLPacked decorations must: not be used. ** The code:Flat, code:NoPerspective, code:Sample, and code:Centroid @@ -441,6 +444,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[] https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`] SPIR-V extension. endif::VK_VERSION_1_1,VK_KHR_16bit_storage[] + ** code:DescriptorSet and code:Binding decorations must: obey the + constraints on storage class, type, and descriptor type described in + <> * code:OpTypeRuntimeArray must: only be used for: ** the last member of an code:OpTypeStruct ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[] diff --git a/chapters/descriptorsets.txt b/chapters/descriptorsets.txt index 71d052c5..21cb166f 100644 --- a/chapters/descriptorsets.txt +++ b/chapters/descriptorsets.txt @@ -32,8 +32,9 @@ corresponding to different resources or usage. The following sections describe the API definitions of each descriptor type. The mapping of each type to SPIR-V is listed in the <> tables -in the <> chapter. +Correspondence>> and <> tables in the +<> chapter. [[descriptorsets-storageimage]] @@ -3258,9 +3259,16 @@ descriptor set. * [[VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361]] pname:pipelineBindPoint must: be supported by the pname:commandBuffer's parent sname:VkCommandPool's queue family - * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-00362]] - Each element of pname:pDynamicOffsets must: satisfy the required - alignment for the corresponding descriptor binding's descriptor type + * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971]] + Each element of pname:pDynamicOffsets which corresponds to a descriptor + binding with type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: + be a multiple of + sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment + * [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972]] + Each element of pname:pDynamicOffsets which corresponds to a descriptor + binding with type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: + be a multiple of + sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment **** include::../validity/protos/vkCmdBindDescriptorSets.txt[] diff --git a/chapters/devsandqueues.txt b/chapters/devsandqueues.txt index 9f3fbc88..f7d3ae64 100644 --- a/chapters/devsandqueues.txt +++ b/chapters/devsandqueues.txt @@ -149,9 +149,9 @@ If the vendor has a https://pcisig.com/membership/member-companies[PCI vendor ID], the low 16 bits of pname:vendorID must: contain that PCI vendor ID, and the remaining bits must: be set to zero. Otherwise, the value returned must: be a valid Khronos vendor ID, obtained -as described in the <> document in the section "`Registering a Vendor ID with -Khronos`". +as described in the <> document in the section "`Registering a Vendor +ID with Khronos`". Khronos vendor IDs are allocated starting at 0x10000, to distinguish them from the PCI vendor ID namespace. diff --git a/chapters/extensions.txt b/chapters/extensions.txt index 38a5ea0b..c1bced1a 100644 --- a/chapters/extensions.txt +++ b/chapters/extensions.txt @@ -53,7 +53,7 @@ This is generally discouraged, as it increases the probability of incompatibilities with new extensions. The validation layers wrap handles in order to track the proper use and destruction of each object. -See the <> document for additional information. [open,refpage='vkEnumerateInstanceLayerProperties',desc='Returns up to requested number of global layer properties',type='protos'] @@ -220,7 +220,7 @@ extension authors should: add support for their extensions to the Khronos validation layers. This is especially important for new commands whose parameters have been wrapped by the validation layers. -See the <> document for additional information. [NOTE] diff --git a/chapters/features.txt b/chapters/features.txt old mode 100644 new mode 100755 index f0e9e971..fe1197a9 --- a/chapters/features.txt +++ b/chapters/features.txt @@ -521,7 +521,7 @@ additional supported properties of individual formats. tessellation, and geometry shader stages. If this feature is not enabled, all storage image, storage texel buffers, and storage buffer variables used by these stages in shader - modules must: be decorated with the code:NonWriteable decoration (or the + modules must: be decorated with the code:NonWritable decoration (or the code:readonly memory qualifier in GLSL). * [[features-features-fragmentStoresAndAtomics]] pname:fragmentStoresAndAtomics specifies whether storage buffers and @@ -529,7 +529,7 @@ additional supported properties of individual formats. stage. If this feature is not enabled, all storage image, storage texel buffers, and storage buffer variables used by the fragment stage in - shader modules must: be decorated with the code:NonWriteable decoration + shader modules must: be decorated with the code:NonWritable decoration (or the code:readonly memory qualifier in GLSL). * [[features-features-shaderTessellationAndGeometryPointSize]] pname:shaderTessellationAndGeometryPointSize specifies whether the diff --git a/chapters/initialization.txt b/chapters/initialization.txt index 3122a052..eb5badc9 100644 --- a/chapters/initialization.txt +++ b/chapters/initialization.txt @@ -337,7 +337,7 @@ determine the version of Vulkan. Implicit layers must: be disabled if they do not support a version at least as high as pname:apiVersion. -See the <> document for additional information. [NOTE] diff --git a/chapters/interfaces.txt b/chapters/interfaces.txt index 53facf9b..b30a89f2 100644 --- a/chapters/interfaces.txt +++ b/chapters/interfaces.txt @@ -564,15 +564,6 @@ Variables identified with a storage class of code:UniformConstant and a decoration of code:InputAttachmentIndex must: be declared as described in <>. -Each shader variable in the descriptor set interface must: be of a type that -corresponds to the pname:descriptorType in the descriptor set layout binding -that the variable is assigned to, as described in -<>. -See <> for the relationship between shader types and -descriptor types. - SPIR-V variables decorated with a descriptor set and binding that identify a <> can: have a type of code:OpTypeImage, code:OpTypeSampler (code:Sampled=1), @@ -669,6 +660,7 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] | input attachment | ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT |==== +[[interfaces-resources-storage-class-correspondence]] .Shader Resource and Storage Class Correspondence [width="100%",cols="<21%,<22%,<27%,<30%",options="header"] |==== @@ -762,6 +754,10 @@ pipeline layout must: contain a descriptor set layout binding in that descriptor set layout and for that binding number, and that binding's pname:stageFlags must: include the appropriate elink:VkShaderStageFlagBits for that stage. +The variable must: be of a valid resource type determined by its SPIR-V type +and storage class, as defined in +<>. The descriptor set layout binding must: be of a corresponding descriptor type, as defined in <>. diff --git a/chapters/introduction.txt b/chapters/introduction.txt index 1c1f18a2..0d1284cb 100644 --- a/chapters/introduction.txt +++ b/chapters/introduction.txt @@ -142,10 +142,10 @@ February 10, 2016. [[vulkan-styleguide]] J. Leech and T. Hector, _Vulkan Documentation and Extensions: Procedures and Conventions_, -https://www.khronos.org/registry/vulkan/, July 11, 2016 +https://www.khronos.org/registry/vulkan/specs/1.1/styleguide.html -[[LoaderAndValidationLayers]] +[[LoaderAndLayerInterface]] _Vulkan Loader Specification and Architecture Overview_, -https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/loader/LoaderAndLayerInterface.md, +https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md, August, 2016. diff --git a/chapters/resources.txt b/chapters/resources.txt index bc167010..ac4fc7ab 100644 --- a/chapters/resources.txt +++ b/chapters/resources.txt @@ -2985,6 +2985,19 @@ endif::VK_VERSION_1_1,VK_KHR_external_memory[] created with the same combination of values for the pname:usage and pname:flags members in the sname:VkBufferCreateInfo structure passed to fname:vkCreateBuffer. + * The pname:alignment member satisfies the buffer descriptor offset + alignment requirements associated with the sname:VkBuffer's pname:usage: + ** If pname:usage included + ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or + ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:alignment must: + be an integer multiple of + sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment. + ** If pname:usage included ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + pname:alignment must: be an integer multiple of + sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment. + ** If pname:usage included ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, + pname:alignment must: be an integer multiple of + sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment. * For images created with a color format, the pname:memoryTypeBits member is identical for all sname:VkImage objects created with the same combination of values for the pname:tiling member, the @@ -3381,22 +3394,6 @@ endif::VK_VERSION_1_1,VK_KHR_bind_memory2[] flags * [[VUID-vkBindBufferMemory-memoryOffset-01031]] pname:memoryOffset must: be less than the size of pname:memory - * [[VUID-vkBindBufferMemory-buffer-01032]] - If pname:buffer was created with the - ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or - ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must: - be a multiple of - sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment - * [[VUID-vkBindBufferMemory-buffer-01033]] - If pname:buffer was created with the - ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a - multiple of - sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment - * [[VUID-vkBindBufferMemory-buffer-01034]] - If pname:buffer was created with the - ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a - multiple of - sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment * [[VUID-vkBindBufferMemory-memory-01035]] pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the @@ -3522,22 +3519,6 @@ endif::VK_KHR_bind_memory2[] flags * [[VUID-VkBindBufferMemoryInfo-memoryOffset-01595]] pname:memoryOffset must: be less than the size of pname:memory - * [[VUID-VkBindBufferMemoryInfo-buffer-01596]] - If pname:buffer was created with the - ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or - ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must: - be a multiple of - sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment - * [[VUID-VkBindBufferMemoryInfo-buffer-01597]] - If pname:buffer was created with the - ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a - multiple of - sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment - * [[VUID-VkBindBufferMemoryInfo-buffer-01598]] - If pname:buffer was created with the - ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a - multiple of - sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment * [[VUID-VkBindBufferMemoryInfo-memory-01599]] pname:memory must: have been allocated using one of the memory types allowed in the pname:memoryTypeBits member of the diff --git a/chapters/samplers.txt b/chapters/samplers.txt index de260d17..a5cdbb0b 100644 --- a/chapters/samplers.txt +++ b/chapters/samplers.txt @@ -82,7 +82,6 @@ include::../api/structs/VkSamplerCreateInfo.txt[] * pname:minLod and pname:maxLod are the values used to clamp the computed LOD value, as described in the <> section. - pname:maxLod must: be greater than or equal to pname:minLod. * pname:borderColor is a elink:VkBorderColor value specifying the predefined border color to use. * [[samplers-unnormalizedCoordinates]] pname:unnormalizedCoordinates @@ -163,6 +162,8 @@ pname:maxSamplerAllocationCount limit. * [[VUID-VkSamplerCreateInfo-mipLodBias-01069]] The absolute value of pname:mipLodBias must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias + * [[VUID-VkSamplerCreateInfo-maxLod-01973]] + pname:maxLod must: be greater than or equal to pname:minLod * [[VUID-VkSamplerCreateInfo-anisotropyEnable-01070]] If the <> feature is not enabled, pname:anisotropyEnable must: be ename:VK_FALSE diff --git a/include/vulkan/vulkan_core.h b/include/vulkan/vulkan_core.h index a28661f4..c27b84d0 100644 --- a/include/vulkan/vulkan_core.h +++ b/include/vulkan/vulkan_core.h @@ -43,7 +43,7 @@ extern "C" { #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Version of this file -#define VK_HEADER_VERSION 76 +#define VK_HEADER_VERSION 77 #define VK_NULL_HANDLE 0 diff --git a/reflow_count.py b/reflow_count.py index 7e531c20..9d225a70 100644 --- a/reflow_count.py +++ b/reflow_count.py @@ -1,2 +1,2 @@ # The value to start tagging VU statements at, unless overridden by -nextvu -startVUID = 1971 +startVUID = 1974 diff --git a/xml/vk.xml b/xml/vk.xml index 7018bbe8..e9381e74 100644 --- a/xml/vk.xml +++ b/xml/vk.xml @@ -153,7 +153,7 @@ server. // Vulkan 1.1 version number #define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 76 +#define VK_HEADER_VERSION 77 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;