From 5d10fc3089ba0ec6a4c7d757a4b18a9ef215d2fb Mon Sep 17 00:00:00 2001 From: Jon Leech Date: Thu, 7 Apr 2016 03:53:04 -0700 Subject: [PATCH] Change log for April 8, 2016 Vulkan 1.0.9 spec update: * Bump API patch number and header version number to 9 for this update. Github Issues: * Fix memory type preorder definition and clarify example list and source code for slink:VkMemoryRequirements and slink:VkMemoryHeap (public issue 26). * Ensure slink:VkAllocationCallbacks are properly defined (public issue 73). * Clarify the WSI extension language by switching from the fuzzier "ownership" language to more-consistent "acquire" language (public issue 117). * Add language allowing allocation and freeing of memory scoped to the duration of any API command in the <> section (public issue 136). * Clarify the explicit location assignment always overrides the inherited location in the <> section, even for the first member of a block (public issue 141). * Fixed references to slink:VkCommandBufferInheritanceInfo::pname:pipelineStatistics (public issue 158). * Fix name of slink:VkBufferCopy::pname:size field in validity language for flink:vkCmdCopyBuffer (public issue 162). Internal Issues: * Update GL_KHR_vulkan_glsl specification to clarify disallowance of spec-const arrays in initializers (internal issue 248). * Clarify <> section to state that user-defined variable interface must match too (internal issue 250). --- ChangeLog.txt | 39 ++++++++++ doc/specs/misc/GL_KHR_vulkan_glsl.txt | 12 ++-- doc/specs/vulkan/Makefile | 2 +- doc/specs/vulkan/chapters/interfaces.txt | 12 ++-- doc/specs/vulkan/chapters/memory.txt | 71 ++++++++++++------- doc/specs/vulkan/chapters/queries.txt | 4 +- doc/specs/vulkan/chapters/resources.txt | 3 + .../validity/protos/vkCmdCopyBuffer.txt | 6 +- .../validity/protos/vkCmdExecuteCommands.txt | 2 +- .../structs/VkAllocationCallbacks.txt | 2 +- src/spec/vk.xml | 12 ++-- src/vulkan/vulkan.h | 2 +- 12 files changed, 119 insertions(+), 48 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 8dee0b3c..b59bed5a 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -414,3 +414,42 @@ Other Commits: * Add missing language about ename:VK_INCOMPLETE being returned from array queries when the passed array is too short, in the VK_KHR_display, VK_KHR_swapchain, and VK_KHR_surface extensions. + +----------------------------------------------------- + +Change log for April 8, 2016 Vulkan 1.0.9 spec update: + + * Bump API patch number and header version number to 9 for this + update. + +Github Issues: + + * Fix memory type preorder definition and clarify example list and source + code for slink:VkMemoryRequirements and slink:VkMemoryHeap (public issue + 26). + * Ensure slink:VkAllocationCallbacks are properly defined (public issue + 73). + * Clarify the WSI extension language by switching from the fuzzier + "ownership" language to more-consistent "acquire" language (public issue + 117). + * Add language allowing allocation and freeing of memory scoped to the + duration of any API command in the <> section (public issue 136). + * Clarify the explicit location assignment always overrides the inherited + location in the <> section, even for the first member of a block (public issue + 141). + * Fixed references to + slink:VkCommandBufferInheritanceInfo::pname:pipelineStatistics (public + issue 158). + * Fix name of slink:VkBufferCopy::pname:size field in validity language + for flink:vkCmdCopyBuffer (public issue 162). + +Internal Issues: + + * Update GL_KHR_vulkan_glsl specification to clarify disallowance of + spec-const arrays in initializers (internal issue 248). + * Clarify <> section + to state that user-defined variable interface must match too (internal + issue 250). + diff --git a/doc/specs/misc/GL_KHR_vulkan_glsl.txt b/doc/specs/misc/GL_KHR_vulkan_glsl.txt index 1e2e0c2a..fac0c038 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: 7-Mar-2016 - Revision: 28 + Last Modified Date: 5-Apr-2016 + Revision: 29 Number @@ -823,9 +823,9 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification 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. + compared, assigned as aggregates, declared with an initializer, or used + as an initializer. 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 @@ -1154,6 +1154,8 @@ Revision History Rev. Date Author Changes ---- ----------- ------- -------------------------------------------- + 29 5-Apr-2016 JohnK Clarify disallowance of spec-const arrays in + initializers 28 7-Mar-2016 JohnK Make push_constants not have sets 27 28-Feb-2016 JohnK Make the default by origin_upper_left 26 17-Feb-2016 JohnK Expand specialized array semantics diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile index a632045d..2a453b34 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 generated included file with the spec version, date, and git commit SPECVERSION = specversion.txt -SPECREVISION = 1.0.8 +SPECREVISION = 1.0.9 SPECREMARK = # Spec targets diff --git a/doc/specs/vulkan/chapters/interfaces.txt b/doc/specs/vulkan/chapters/interfaces.txt index bb72955c..db39452f 100644 --- a/doc/specs/vulkan/chapters/interfaces.txt +++ b/doc/specs/vulkan/chapters/interfaces.txt @@ -96,6 +96,9 @@ interface block must: match exactly, as described above. At an interface involving the fragment shader inputs, the presence or absence of any built-in output does not affect the interface matching. +At an interface between two shader stages, the user-defined variable +interface must: match exactly, as described above. + Any input value to a shader stage is well-defined as long as the preceding stages writes to a matching output, as described above. @@ -157,10 +160,11 @@ types, mustnot: themselves have code:Location decorations. If the structure type is a code:Block but without a code:Location, then each of its members must: have a code:Location decoration. If it is a -code:Block with a code:Location decoration, then its first member is -assigned to the location specified for the code:Block, any member with -its own code:Location decoration is assigned that location, and each -remaining member is assigned the location after the +code:Block with a code:Location decoration, then its members are +assigned consecutive locations in declaration order, starting from the +first member which is initially assigned the location specified for the +code:Block. Any member with its own code:Location decoration is assigned +that location. Each remaining member is assigned the location after the immediately preceding member in declaration order. The locations consumed by block and structure members are determined diff --git a/doc/specs/vulkan/chapters/memory.txt b/doc/specs/vulkan/chapters/memory.txt index 3c51f45e..08fe2423 100644 --- a/doc/specs/vulkan/chapters/memory.txt +++ b/doc/specs/vulkan/chapters/memory.txt @@ -272,6 +272,8 @@ situations: * Host memory scoped to the lifetime of a sname:VkDevice or sname:VkInstance may: be allocated from any API command. + * Host memory scoped to the duration of a command may: be allocated from + any API command. * Host memory scoped to the lifetime of a sname:VkPipelineCache may: only be allocated from: ** fname:vkCreatePipelineCache @@ -299,6 +301,8 @@ pname:pfnFree may: be called in the following situations: * Host memory scoped to the lifetime of a sname:VkDevice or sname:VkInstance may: be freed from any API command. + * Host memory scoped to the duration of a command must: be freed by any + API command which allocates such memory. * Host memory scoped to the lifetime of a sname:VkPipelineCache may: be freed from fname:vkDestroyPipelineCache. * Host memory scoped to the lifetime of a sname:VkDescriptorPool may: be @@ -386,13 +390,12 @@ include::../enums/VkMemoryHeapFlagBits.txt[] include::../validity/structs/VkMemoryHeap.txt[] +At least one heap must: include ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT in +pname:flags. If there are multiple heaps that all have similar performance +characteristics, they may: all include ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT. In a unified memory architecture (UMA) system, there is often only a single -memory heap which is considered to be equally ``local'' to the host and to -the device. If there is only one heap, that heap must: be marked as -ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT. If there are multiple heaps that all -have similar performance characteristics, they may: all be marked as -ename:VK_MEMORY_HEAP_DEVICE_LOCAL_BIT, but at least one will be device -local. +memory heap which is considered to be equally ``local'' to the host and to the +device, and such an implementation must: advertise the heap as device-local. The definition of sname:VkMemoryType is: @@ -441,22 +444,24 @@ Each memory type returned by flink:vkGetPhysicalDeviceMemoryProperties must: have its pname:propertyFlags set to one of the following values: * 0 + * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT + * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT + * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT - * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT - * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT - * ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | ename:VK_MEMORY_PROPERTY_HOST_CACHED_BIT | ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT * ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT -It is guaranteed that there is at least one memory type that has its -pname:propertyFlags with the ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit -set and the ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit set. +There must: be at least one memory type with both the +ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT and +ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bits set in its pname:propertyFlags. +There must: be at least one memory type with the +ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set in its pname:propertyFlags. -The memory types are sorted according to a partial order which serves to aid +The memory types are sorted according to a preorder which serves to aid in easily selecting an appropriate memory type. Given two memory types X and -Y, the partial order defines latexmath:[$X \leq Y$] if: +Y, the preorder defines latexmath:[$X \leq Y$] if: * the memory property bits set for X are a subset of the memory property bits set for Y. Or, @@ -465,26 +470,44 @@ Y, the partial order defines latexmath:[$X \leq Y$] if: performance (as determined in an implementation-specific manner). Memory types are ordered in the list such that X is assigned a lesser -pname:memoryTypeIndex than Y if latexmath:[$X \leq Y$] according to the -partial order. Note that the list of all allowed memory property flag -combinations above satisfies this partial order, but other orders would as +pname:memoryTypeIndex than Y if latexmath:[$X \leq Y \land \neg(Y \leq X)$] according to the +preorder. Note that the list of all allowed memory property flag +combinations above satisfies this preorder, but other orders would as well. The goal of this ordering is to enable applications to use a simple search loop in selecting the proper memory type, along the lines of: [source,{basebackend@docbook:c++:cpp}] --------------------------------------------------- -// Searching for the best match for "properties" -for (i = 0; i < memoryTypeCount; ++i) - if ((memoryTypes[i].propertyFlags & properties) == properties) - return i; +// Find a memory type in "memoryTypeBits" that includes all of "properties" +int32_t FindProperties(uint32_t memoryTypeBits, VkMemoryPropertyFlags properties) +{ + for (int32_t i = 0; i < memoryTypeCount; ++i) + { + if ((memoryTypeBits & (1 << i)) && + ((memoryTypes[i].propertyFlags & properties) == properties)) + return i; + } + return -1; +} + +// Try to find an optimal memory type, or if it does not exist +// find any compatible memory type +VkMemoryRequirements memoryRequirements; +vkGetImageMemoryRequirements(device, image, &memoryRequirements); +int32_t memoryType = FindProperties(memoryRequirements.memoryTypeBits, optimalProperties); +if (memoryType == -1) + memoryType = FindProperties(memoryRequirements.memoryTypeBits, requiredProperties); --------------------------------------------------- -This loop will find the first entry that has all bits requested in +The loop will find the first supported memory type that has all bits requested in code:properties set. If there is no exact match, it will find a closest match (i.e. a memory type with the fewest additional bits set), which has some additional bits set but which are not detrimental to the behaviors -requested by code:properties. If there are multiple heaps with the same -properties, it will choose the most performant memory. +requested by code:properties. The application can: first search for the optimal +properties, e.g. a memory type that is device-local or supports coherent cached +accesses, as appropriate for the intended usage, and if such a memory type is +not present can: fallback to searching for a less optimal but guaranteed set of +properties such as "0" or "host-visible and coherent". A {apiname} device operates on data in device memory via memory objects that are represented in the API by a sname:VkDeviceMemory handle. Memory objects diff --git a/doc/specs/vulkan/chapters/queries.txt b/doc/specs/vulkan/chapters/queries.txt index bd1f085b..b99ddfd0 100644 --- a/doc/specs/vulkan/chapters/queries.txt +++ b/doc/specs/vulkan/chapters/queries.txt @@ -137,8 +137,8 @@ primary command buffer, and the enabled, it can: execute secondary command buffers during the query operation. For a secondary command buffer to be executed while a query is active, it must: set the pname:occlusionQueryEnable, pname:queryFlags, -and/or pname:pipelineStatistics members of slink:VkCommandBufferBeginInfo to -conservative values, as described in the <> section. A query must: either begin and end inside the same subpass of a render pass instance, or must: both begin and end outside of a render pass instance (i.e. contain entire render pass instances). diff --git a/doc/specs/vulkan/chapters/resources.txt b/doc/specs/vulkan/chapters/resources.txt index a4fc960f..da610bab 100644 --- a/doc/specs/vulkan/chapters/resources.txt +++ b/doc/specs/vulkan/chapters/resources.txt @@ -951,6 +951,9 @@ flink:vkGetImageMemoryRequirements: ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT bit and the ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT bit set. In other words, mappable coherent memory can: always be attached to these objects. + * The pname:memoryTypeBits member always contains at least one bit set + corresponding to a sname:VkMemoryType with a pname:propertyFlags that has + the ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT bit set. * The pname:memoryTypeBits member is identical for all sname:VkBuffer objects created with the same value for the pname:flags and pname:usage members in the sname:VkBufferCreateInfo structure passed to diff --git a/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt b/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt index 2db7d0f5..163175fb 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdCopyBuffer.txt @@ -16,11 +16,11 @@ endif::doctype-manpage[] * This command must: only be called outside of a render pass instance * pname:regionCount must: be greater than `0` * Each of pname:commandBuffer, pname:srcBuffer and pname:dstBuffer must: have been created, allocated or retrieved from the same sname:VkDevice -* The pname:copySize member of a given element of pname:pRegions must: be greater than `0` +* The pname:size 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 pname:size 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:size 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 diff --git a/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt b/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt index 4cf06b7e..8f68b66a 100644 --- a/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt +++ b/doc/specs/vulkan/validity/protos/vkCmdExecuteCommands.txt @@ -27,7 +27,7 @@ endif::doctype-manpage[] * If the <> feature is not enabled, pname:commandBuffer mustnot: have any queries <> * If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query <>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferBeginInfo::pname:occlusionQueryEnable set to ename:VK_TRUE * If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query <>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferBeginInfo::pname:queryFlags having all bits set that are set for the query -* If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS query <>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferBeginInfo::pname:pipelineStatistics having all bits set that are set in the sname:VkQueryPool the query uses +* If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS query <>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having all bits set that are set in the sname:VkQueryPool the query uses * Any given element of pname:pCommandBuffers mustnot: begin any query types that are <> in pname:commandBuffer ifndef::doctype-manpage[] ******************************************************************************** diff --git a/doc/specs/vulkan/validity/structs/VkAllocationCallbacks.txt b/doc/specs/vulkan/validity/structs/VkAllocationCallbacks.txt index 7e093294..528bbcc7 100644 --- a/doc/specs/vulkan/validity/structs/VkAllocationCallbacks.txt +++ b/doc/specs/vulkan/validity/structs/VkAllocationCallbacks.txt @@ -10,7 +10,7 @@ endif::doctype-manpage[] * pname:pfnAllocation must: be a pointer to a valid user-defined PFN_vkAllocationFunction * pname:pfnReallocation must: be a pointer to a valid user-defined PFN_vkReallocationFunction * pname:pfnFree must: be a pointer to a valid user-defined PFN_vkFreeFunction -* If either of pname:pfnInternalAllocatione or pname:pfnInternalFree is not `NULL`, both must: be valid callbacks +* If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not `NULL`, both must: be valid callbacks ifndef::doctype-manpage[] ******************************************************************************** endif::doctype-manpage[] diff --git a/src/spec/vk.xml b/src/spec/vk.xml index 2d15b631..0117775b 100644 --- a/src/spec/vk.xml +++ b/src/spec/vk.xml @@ -101,7 +101,7 @@ maintained in the master branch of the Khronos Vulkan Github project. // Vulkan 1.0 version number #define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0) // Version of this file -#define VK_HEADER_VERSION 8 +#define VK_HEADER_VERSION 9 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -476,7 +476,7 @@ maintained in the master branch of the Khronos Vulkan Github project. pname:pfnAllocation must: be a pointer to a valid user-defined PFN_vkAllocationFunction pname:pfnReallocation must: be a pointer to a valid user-defined PFN_vkReallocationFunction pname:pfnFree must: be a pointer to a valid user-defined PFN_vkFreeFunction - If either of pname:pfnInternalAllocatione or pname:pfnInternalFree is not `NULL`, both must: be valid callbacks + If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not `NULL`, both must: be valid callbacks @@ -4058,11 +4058,11 @@ maintained in the master branch of the Khronos Vulkan Github project. uint32_t regionCount const VkBufferCopy* pRegions - The pname:copySize member of a given element of pname:pRegions must: be greater than `0` + The pname:size 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 pname:size 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:size 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 @@ -4453,7 +4453,7 @@ maintained in the master branch of the Khronos Vulkan Github project. If the <<features-features-inheritedQueries,inherited queries>> feature is not enabled, pname:commandBuffer mustnot: have any queries <<queries-operation-active,active>> If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query <<queries-operation-active,active>>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferBeginInfo::pname:occlusionQueryEnable set to ename:VK_TRUE If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query <<queries-operation-active,active>>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferBeginInfo::pname:queryFlags having all bits set that are set for the query - If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS query <<queries-operation-active,active>>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferBeginInfo::pname:pipelineStatistics having all bits set that are set in the sname:VkQueryPool the query uses + If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS query <<queries-operation-active,active>>, then each element of pname:pCommandBuffers must: have been recorded with sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having all bits set that are set in the sname:VkQueryPool the query uses Any given element of pname:pCommandBuffers mustnot: begin any query types that are <<queries-operation-active,active>> in pname:commandBuffer diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index dca5e259..9d6d4fa3 100644 --- a/src/vulkan/vulkan.h +++ b/src/vulkan/vulkan.h @@ -50,7 +50,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 8 +#define VK_HEADER_VERSION 9 #define VK_NULL_HANDLE 0