diff --git a/ChangeLog.txt b/ChangeLog.txt index bfec7903..c6d7094b 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -8,6 +8,58 @@ public issues. ----------------------------------------------------- +Change log for August 14, 2017 Vulkan 1.0.58 spec update: + + * Bump API patch number and header version number to 58 for this update. + +Github Issues: + + * Update the <> + section to allow multiple variables with the same descriptor set/binding + decorations, and require that all variables that are statically used + must be consistent with the pipeline layout. Allow + ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be used with texture + and sampler variables (public issues 522, 524). + +Internal Issues: + + * Replace networkx package used for extension dependency generation with a + homegrown network dependency traverser (internal issue 713). + * Specify in the <> + section that if a fragment shader writes integers that cannot be + represented in the format of the colour attachment, then the result is + undefined (internal issue 893). + * Separate malformed valid usage statement for + slink:VkPipelineRasterizationStateCreateInfo into two (internal issue + 918). + * Fix cases where the term 'pNext chain' is incorrectly used in reference + to functions, rather than their parameters. Replace 'pNext list' with + 'pNext chain'. Fixed typo in the example code of + +VK_KHR_dedicated_allocation+ (internal issue 944). + * Fix typo in elink:VkExternalSemaphoreHandleTypeFlagBitsKHR enum + descriptions, replacing + etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR with + ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR, and make the + description more consistent with + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR (internal issue 950). + +Other Issues: + + * Clarify how pipeline stage masks affect + <>. + * Clarify that dedicated allocations do not allow aliasing in the + flink:vkBindBufferMemory and flink:vkBindImageMemory valid usage + statements. + * Correct specification of pname:dynamicCount for push_constant token in + slink:VkIndirectCommandsLayoutNVX. + +New Extensions: + + * `VK_EXT_shader_viewport_index_layer` + +----------------------------------------------------- + Change log for August 1, 2017 Vulkan 1.0.57 spec update: * Bump API patch number and header version number to 57 for this update. diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile index 3332d50d..37dde175 100644 --- a/doc/specs/vulkan/Makefile +++ b/doc/specs/vulkan/Makefile @@ -87,7 +87,7 @@ VERBOSE = # $(EXTENSIONS)) # ADOCOPTS options for asciidoc->HTML5 output NOTEOPTS = -a editing-notes -a implementation-guide -SPECREVISION = 1.0.57 +SPECREVISION = 1.0.58 # Spell out RFC2822 format as not all date commands support -R SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`) @@ -395,8 +395,7 @@ validity/timeMarker: $(VKXML) $(GENVK) # Debugging aid - generate all files from registry XML # This leaves out config/extDependency.sh intentionally as it only -# needs to be updated when the extension dependencies in vk.xml change, -# and requires networkx, a non-standard Python package. +# needs to be updated when the extension dependencies in vk.xml change. generated: vkapi.py api/timeMarker hostsynctable/timeMarker validity/timeMarker diff --git a/doc/specs/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt b/doc/specs/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt new file mode 100644 index 00000000..6fbcdc02 --- /dev/null +++ b/doc/specs/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt @@ -0,0 +1,107 @@ +[[VK_EXT_shader_viewport_index_layer]] +== VK_EXT_shader_viewport_index_layer + +*Name String*:: + +VK_EXT_shader_viewport_index_layer+ +*Extension Type*:: + Device extension +*Registered Extension Number*:: + 163 +*Status*:: + Complete +*Last Modified Data*:: + 2017-08-08 +*Revision*:: + 1 +*Dependencies*:: + - This extension is written against version 1.0 of the Vulkan API. + - This extension requires Vulkan 1.0. + - This extension requires the + https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_shader_viewport_index_layer.html[+SPV_EXT_shader_viewport_index_layer+] + SPIR-V extension. + - This extension requires the + https://www.opengl.org/registry/specs/ARB/shader_viewport_layer_array.txt[+GL_ARB_shader_viewport_layer_array+], + https://www.opengl.org/registry/specs/AMD/vertex_shader_layer.txt[+GL_AMD_vertex_shader_layer+], + https://www.opengl.org/registry/specs/AMD/vertex_shader_viewport_index.txt[+GL_AMD_vertex_shader_viewport_index+], + or + https://www.opengl.org/registry/specs/NV/viewport_array2.txt[+GL_NV_viewport_array2+] + extensions for GLSL source languages. + - This extension requires the pname:geometryShader and pname:multiViewport + features. + - This extension interacts with the pname:tessellationShader feature. +*Contributors*:: + - Piers Daniell, NVIDIA + - Jeff Bolz, NVIDIA + - Jan-Harald Fredriksen, ARM + - Daniel Rakos, AMD + - Slawomir Grajeswki, Intel +*Contact*:: + - Daniel Koch (dkoch 'at' nvidia.com) + +This extension adds support for the code:ShaderViewportIndexLayerEXT +capability from the SPV_EXT_shader_viewport_index_layer extension in Vulkan. + +This extension allows variables decorated with the code:Layer and +code:ViewportIndex built-ins to be exported from vertex or tessellation +shaders, using the code:ShaderViewportIndexLayerEXT capability. + +When using GLSL source-based shading languages, the code:gl_ViewportIndex +and code:gl_Layer built-in variables map to the SPIR-V code:ViewportIndex +and code:Layer built-in decorations, respectively. +Behaviour of these variables is extended as described in the +GL_ARB_shader_viewport_layer_array (or the precursor +GL_AMD_vertex_shader_layer, AMD_vertex_shader_viewport_index, and +GL_NV_viewport_array2 extensions). + +ifdef::VK_NV_viewport_array2[] +[NOTE] +.Note +==== +The code:ShaderViewportIndexLayerEXT capability is equivalent to the + code:ShaderViewportIndexLayerNV capability added by + <>. +==== +endif::VK_NV_viewport_array2[] + +=== New Object Types + +None. + +=== New Enum Constants + +None. + +=== New Enums + +None. + +=== New Structures + +None. + +=== New Functions + +None. + +=== New or Modified Built-In Variables + + * (modified) <> + * (modified) + <> + +=== New Variable Decoration + +None. + +=== New SPIR-V Capabilities + + * <> + +=== Issues + +None yet! + +=== Version History + + * Revision 1, 2017-08-08 (Daniel Koch) + - Internal drafts diff --git a/doc/specs/vulkan/appendices/VK_EXT_validation_flags.txt b/doc/specs/vulkan/appendices/VK_EXT_validation_flags.txt index 1a73d75c..b6ff3d6c 100644 --- a/doc/specs/vulkan/appendices/VK_EXT_validation_flags.txt +++ b/doc/specs/vulkan/appendices/VK_EXT_validation_flags.txt @@ -22,7 +22,9 @@ - Tobin Ehlis, Google (tobine@google.com) This extension provides the slink:VkValidationFlagsEXT struct that can be -included in the pname:pNext chain at flink:vkCreateInstance time. +included in the pname:pNext chain of the slink:VkInstanceCreateInfo +structure passed as the pname:pCreateInfo parameter of +flink:vkCreateInstance. The new struct contains an array of elink:VkValidationCheckEXT values that will be disabled by the validation layers. diff --git a/doc/specs/vulkan/appendices/VK_KHR_dedicated_allocation.txt b/doc/specs/vulkan/appendices/VK_KHR_dedicated_allocation.txt index b1a70aef..a0dbe8a4 100644 --- a/doc/specs/vulkan/appendices/VK_KHR_dedicated_allocation.txt +++ b/doc/specs/vulkan/appendices/VK_KHR_dedicated_allocation.txt @@ -14,9 +14,9 @@ *Status*:: Draft. *Last Modified Date*:: - 2017-02-27 + 2017-08-07 *Revision*:: - 1 + 3 *IP Status*:: No known IP claims. *Dependencies*:: @@ -38,7 +38,10 @@ allocation, memory aliasing and sparse binding, which could interfere with some optimizations. Applications should query the implementation for when a dedicated allocation may: be beneficial by adding sname:VkMemoryDedicatedRequirementsKHR to the -pname:pNext chain of its call to fname:vkGetImageMemoryRequirements2KHR. +pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed as +the pname:pMemoryRequirements parameter to a call to +fname:vkGetBufferMemoryRequirements2KHR or +fname:vkGetImageMemoryRequirements2KHR. Certain external handle types and external images or buffers may: also depend on dedicated allocations on implementations that associate image or buffer metadata with OS-level memory objects. @@ -104,7 +107,7 @@ None. VkMemoryRequirements2KHR memoryRequirements = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR, - &dedicatedAllocationRequirements, // pNext + &dedicatedRequirements, // pNext }; const VkImageMemoryRequirementsInfo2KHR imageRequirementsInfo = @@ -167,3 +170,8 @@ None. * Revision 2, 2017-03-27 (Jason Ekstrand) - Rework the extension to be query-based + + * Revision 3, 2017-07-31 (Jason Ekstrand) + - Clarify that memory objects created with + VkMemoryDedicatedAllocateInfoKHR can only have the specified resource + bound and no others. diff --git a/doc/specs/vulkan/appendices/VK_NVX_device_generated_commands.txt b/doc/specs/vulkan/appendices/VK_NVX_device_generated_commands.txt index 8e530a5e..3b5c2b85 100644 --- a/doc/specs/vulkan/appendices/VK_NVX_device_generated_commands.txt +++ b/doc/specs/vulkan/appendices/VK_NVX_device_generated_commands.txt @@ -8,9 +8,9 @@ *Registered Extension Number*:: 87 *Last Modified Date*:: - 2016-10-31 + 2017-07-25 *Revision*:: - 1 + 3 *Dependencies*:: - This extension is written against version 1.0 of the Vulkan API. *Contributors*:: @@ -21,6 +21,7 @@ - Eric Werness, NVIDIA - Detlef Roettger, NVIDIA - Daniel Koch, NVIDIA + - Chris Hebert, NVIDIA *Contacts*:: - Pierre Boudier, NVIDIA (pboudier@nvidia.com) - Christoph Kubisch, NVIDIA (ckubisch@nvidia.com) @@ -434,6 +435,11 @@ https://github.com/NVIDIAGameWorks/GraphicsSamples/tree/master/samples/vk10-kepl === Version History + * Revision 3, 2017-07-25 (Chris Hebert) + - Correction to specification of dynamicCount for push_constant token in + VkIndirectCommandsLayoutNVX. + Stride was incorrectly computed as dynamicCount was not treated as byte + size. * Revision 2, 2017-06-01 (Christoph Kubisch) - header compatibility break: add missing _TYPE to VkIndirectCommandsTokenTypeNVX and VkObjectEntryTypeNVX enums to follow diff --git a/doc/specs/vulkan/appendices/VK_NV_viewport_array2.txt b/doc/specs/vulkan/appendices/VK_NV_viewport_array2.txt index 1b3e22d3..99ea1bd5 100644 --- a/doc/specs/vulkan/appendices/VK_NV_viewport_array2.txt +++ b/doc/specs/vulkan/appendices/VK_NV_viewport_array2.txt @@ -62,6 +62,17 @@ code:ViewportRelativeNV decorations, respectively. Behaviour is described in the GL_NV_viewport_array2 extension specificiation. +ifdef::VK_EXT_shader_viewport_index_layer[] +[NOTE] +.Note +==== +The code:ShaderViewportIndexLayerNV capability is equivalent to the + code:ShaderViewportIndexLayerEXT capability added by + <>. +==== +endif::VK_EXT_shader_viewport_index_layer[] + + === New Object Types None. diff --git a/doc/specs/vulkan/appendices/extensions.txt b/doc/specs/vulkan/appendices/extensions.txt index a5e64c3b..5759aaa2 100644 --- a/doc/specs/vulkan/appendices/extensions.txt +++ b/doc/specs/vulkan/appendices/extensions.txt @@ -288,6 +288,10 @@ ifdef::VK_EXT_shader_subgroup_vote[] include::VK_EXT_shader_subgroup_vote.txt[] endif::VK_EXT_shader_subgroup_vote[] +ifdef::VK_EXT_shader_viewport_index_layer[] +include::VK_EXT_shader_viewport_index_layer.txt[] +endif::VK_EXT_shader_viewport_index_layer[] + ifdef::VK_EXT_swapchain_colorspace[] include::VK_EXT_swapchain_colorspace.txt[] endif::VK_EXT_swapchain_colorspace[] diff --git a/doc/specs/vulkan/appendices/spirvenv.txt b/doc/specs/vulkan/appendices/spirvenv.txt index 938bd681..30393c2e 100644 --- a/doc/specs/vulkan/appendices/spirvenv.txt +++ b/doc/specs/vulkan/appendices/spirvenv.txt @@ -114,6 +114,10 @@ ifdef::VK_NV_geometry_shader_passthrough[] [[spirvenv-capabilities-table-geometryshaderpassthrough]] | code:GeometryShaderPassthroughNV | <> endif::VK_NV_geometry_shader_passthrough[] +ifdef::VK_EXT_shader_viewport_index_layer[] +[[spirvenv-capabilities-table-shader-viewport-index-layer]] +| code:ShaderViewportIndexLayerEXT | <> +endif::VK_EXT_shader_viewport_index_layer[] ifdef::VK_NV_viewport_array2[] [[spirvenv-capabilities-table-viewportarray2]] | code:ShaderViewportIndexLayerNV | <> @@ -225,6 +229,11 @@ The application can: pass a SPIR-V module to flink:vkCreateShaderModule that uses the +SPV_NV_viewport_array2+ SPIR-V extension. endif::VK_NV_viewport_array2[] +ifdef::VK_EXT_shader_viewport_index_layer[] +The application can: pass a SPIR-V module to flink:vkCreateShaderModule that +uses the +SPV_EXT_shader_viewport_index_layer+ SPIR-V extension. +endif::VK_EXT_shader_viewport_index_layer[] + ifdef::VK_NVX_multiview_per_view_attributes[] The application can: pass a SPIR-V module to flink:vkCreateShaderModule that uses the +SPV_NVX_multiview_per_view_attributes+ SPIR-V extension. diff --git a/doc/specs/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt b/doc/specs/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt index d885d872..2c24a139 100644 --- a/doc/specs/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt +++ b/doc/specs/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt @@ -12,7 +12,7 @@ Operations>>. [open,refpage='VkPipelineColorBlendAdvancedStateCreateInfoEXT',desc='Structure specifying parameters that affect advanced blend operations',type='structs'] -- -If the pname:pNext list of slink:VkPipelineColorBlendStateCreateInfo +If the pname:pNext chain of slink:VkPipelineColorBlendStateCreateInfo includes a sname:VkPipelineColorBlendAdvancedStateCreateInfoEXT structure, then that structure includes parameters that affect advanced blend operations. diff --git a/doc/specs/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt b/doc/specs/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt index 2b60f8d7..a9acc6b4 100644 --- a/doc/specs/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt +++ b/doc/specs/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt @@ -16,8 +16,8 @@ include::../../api/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[] fname:vkGetPhysicalDeviceSurfaceCapabilities2EXT behaves similarly to flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to return -extended information by adding extension structures to its pname:pNext -chain. +extended information by adding extension structures to the pname:pNext chain +of its pname:pSurfaceCapabilities parameter. include::../../validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[] -- diff --git a/doc/specs/vulkan/chapters/VK_KHR_16bit_storage/16bit_storage_feature_struct.txt b/doc/specs/vulkan/chapters/VK_KHR_16bit_storage/16bit_storage_feature_struct.txt index 4e42808d..03748f12 100644 --- a/doc/specs/vulkan/chapters/VK_KHR_16bit_storage/16bit_storage_feature_struct.txt +++ b/doc/specs/vulkan/chapters/VK_KHR_16bit_storage/16bit_storage_feature_struct.txt @@ -3,8 +3,8 @@ To query features additionally supported by the +VK_KHR_16bit_storage+ extension, call flink:vkGetPhysicalDeviceFeatures2KHR with a -sname:VkPhysicalDevice16BitStorageFeaturesKHR structure in the pname:pNext -chain. +sname:VkPhysicalDevice16BitStorageFeaturesKHR structure included in the +pname:pNext chain of its pname:pFeatures parameter. The sname:VkPhysicalDevice16BitStorageFeaturesKHR structure can: also be in the pname:pNext chain of a slink:VkDeviceCreateInfo structure, in which case it controls which additional features are enabled in the device. diff --git a/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt b/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt index 51433851..892aed1c 100644 --- a/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt +++ b/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt @@ -335,7 +335,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkDeviceGroupSwapchainCreateInfoKHX',desc='Structure specifying parameters of a newly created swapchain object',type='structs'] -- -If the pname:pNext list of slink:VkSwapchainCreateInfoKHR includes a +If the pname:pNext chain of slink:VkSwapchainCreateInfoKHR includes a sname:VkDeviceGroupSwapchainCreateInfoKHX structure, then that structure includes a set of device group present modes that the swapchain can: be used with. @@ -999,7 +999,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkDeviceGroupPresentInfoKHX',desc='Mode and mask controlling which physical devices\' images are presented',type='structs'] -- -If the pname:pNext list of slink:VkPresentInfoKHR includes a +If the pname:pNext chain of slink:VkPresentInfoKHR includes a sname:VkDeviceGroupPresentInfoKHX structure, then that structure includes an array of device masks and a device group present mode. diff --git a/doc/specs/vulkan/chapters/VK_NVX_device_generated_commands/indirectcommands.txt b/doc/specs/vulkan/chapters/VK_NVX_device_generated_commands/indirectcommands.txt index 7a9e120d..a3b04138 100644 --- a/doc/specs/vulkan/chapters/VK_NVX_device_generated_commands/indirectcommands.txt +++ b/doc/specs/vulkan/chapters/VK_NVX_device_generated_commands/indirectcommands.txt @@ -167,7 +167,7 @@ void cmdProcessSequence(cmd, objectTable, indirectCommandsLayout, pIndirectComma break; VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX: - size_t stride = sizeof(uint32_t) + sizeof(uint32_t) * indirectCommandsLayout.pTokens[c].dynamicCount; + size_t stride = sizeof(uint32_t) + indirectCommandsLayout.pTokens[c].dynamicCount; uint32_t* data = input.buffer.pointer( input.offset + stride * i ); uint32_t object = data[0]; diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt index 2a2e7a83..94e4fcce 100644 --- a/doc/specs/vulkan/chapters/cmdbuffers.txt +++ b/doc/specs/vulkan/chapters/cmdbuffers.txt @@ -1084,7 +1084,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkDeviceGroupSubmitInfoKHX',desc='Structure indicating which physical devices execute semaphore operations and command buffers',type='structs'] -- -If the pname:pNext list of slink:VkSubmitInfo includes a +If the pname:pNext chain of slink:VkSubmitInfo includes a sname:VkDeviceGroupSubmitInfoKHX structure, then that structure includes device indices and masks specifying which physical devices execute semaphore operations and command buffers. @@ -1314,7 +1314,7 @@ both device masks. [open,refpage='VkDeviceGroupCommandBufferBeginInfoKHX',desc='Set the initial device mask for a command buffer',type='structs'] -- -If the pname:pNext list of slink:VkCommandBufferBeginInfo includes a +If the pname:pNext chain of slink:VkCommandBufferBeginInfo includes a sname:VkDeviceGroupCommandBufferBeginInfoKHX structure, then that structure includes an initial device mask for the command buffer. diff --git a/doc/specs/vulkan/chapters/features.txt b/doc/specs/vulkan/chapters/features.txt index ce80d1e6..ba65732c 100644 --- a/doc/specs/vulkan/chapters/features.txt +++ b/doc/specs/vulkan/chapters/features.txt @@ -771,10 +771,10 @@ structure describe the following features: +VariablePointers+ capability. If the sname:VkPhysicalDeviceVariablePointerFeaturesKHR structure is -included in the pname:pNext chain of flink:vkGetPhysicalDeviceFeatures2KHR, -it is filled with values indicating whether each feature is supported. +included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it +is filled with values indicating whether each feature is supported. sname:VkPhysicalDeviceVariablePointerFeaturesKHR can: also be used in the -pname:pNext chain of flink:vkCreateDevice to enable the features. +pname:pNext chain of slink:VkDeviceCreateInfo to enable the features. .Valid Usage **** @@ -818,10 +818,10 @@ describe the following features: shaders. If the sname:VkPhysicalDeviceMultiviewFeaturesKHX structure is included in -the pname:pNext chain of flink:vkGetPhysicalDeviceFeatures2KHR, it is filled +the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it is filled with values indicating whether each feature is supported. sname:VkPhysicalDeviceMultiviewFeaturesKHX can: also be used in the -pname:pNext chain of flink:vkCreateDevice to enable features. +pname:pNext chain of slink:VkDeviceCreateInfo to enable the features. .Valid Usage **** @@ -869,10 +869,10 @@ structure describe the following features: the same sample. If the sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT structure is -included in the pname:pNext chain of flink:vkGetPhysicalDeviceFeatures2KHR, -it is filled with values indicating whether each feature is supported. +included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it +is filled with values indicating whether each feature is supported. sname:VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT can: also be used in -the pname:pNext chain of flink:vkCreateDevice to enable features. +pname:pNext chain of slink:VkDeviceCreateInfo to enable the features. include::../validity/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.txt[] -- @@ -1666,7 +1666,7 @@ describe the following implementation-dependent limits: include::../validity/structs/VkPhysicalDeviceMultiviewPropertiesKHX.txt[] If the sname:VkPhysicalDeviceMultiviewPropertiesKHX structure is included in -the pname:pNext chain of flink:VkPhysicalDeviceProperties2KHR, it is filled +the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR, it is filled with the implementation-dependent limits. -- @@ -1692,7 +1692,7 @@ structure describe the following implementation-dependent limits: include::../validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[] If the sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is -included in the pname:pNext chain of flink:VkPhysicalDeviceProperties2KHR, +included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR, it is filled with the implementation-dependent limits. -- @@ -1722,7 +1722,7 @@ include::../validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertie If the sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure is included in the pname:pNext chain of -flink:VkPhysicalDeviceProperties2KHR, it is filled with the +slink:VkPhysicalDeviceProperties2KHR, it is filled with the implementation-dependent limits. -- @@ -1776,7 +1776,7 @@ include::../validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT If the sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is included in the pname:pNext chain of -flink:VkPhysicalDeviceProperties2KHR, it is filled with the +slink:VkPhysicalDeviceProperties2KHR, it is filled with the implementation-dependent limits. -- @@ -1803,7 +1803,7 @@ structure describe the following implementation-dependent limits: the image when doing min/max filtering. If the sname:VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT structure is -included in the pname:pNext chain of flink:VkPhysicalDeviceProperties2KHR, +included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR, it is filled with the implementation-dependent limits. If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following @@ -4693,14 +4693,16 @@ include::../api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHR.txt[] referring to a Direct3D 12 fence. It owns a reference to the underlying synchronization primitive associated with the Direct3D fence. - * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR specifies a - POSIX file descriptor handle to a Linux or Android Fence object. - It can be used with any native API accepting a valid fence object file - descriptor as input. + * ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR specifies a + POSIX file descriptor handle to a Linux Sync File or Android Fence + object. + It can be used with any native API accepting a valid sync file or fence + as input. It owns a reference to the underlying synchronization primitive associated with the file descriptor. Implementations which support importing this handle type must: accept - any type of fence FD supported by the native system they are running on. + any type of sync or fence FD supported by the native system they are + running on. [NOTE] .Note diff --git a/doc/specs/vulkan/chapters/interfaces.txt b/doc/specs/vulkan/chapters/interfaces.txt index 4e4e04c1..c9c6011e 100644 --- a/doc/specs/vulkan/chapters/interfaces.txt +++ b/doc/specs/vulkan/chapters/interfaces.txt @@ -380,8 +380,12 @@ endif::VK_KHR_16bit_storage[] Composites of these types are also permitted. If the color attachment has a signed or unsigned normalized fixed-point format, color values are assumed to be floating-point and are converted to -fixed-point as described in <>; otherwise no -type conversion is applied. +fixed-point as described in <>; If the color +attachment has an integer format, color values are assumed to be integers +and converted to the bit-depth of the target. +Any value that cannot be represented in the attachment's format is +undefined. +For any other attachment format no conversion is performed. If the type of the values written by the fragment shader do not match the format of the corresponding color attachment, the result is undefined for those components. @@ -591,10 +595,13 @@ Variables identified with a storage class of code:UniformConstant and a decoration of code:InputAttachmentIndex must: be declared as described in <>. -Each shader variable declaration must: refer to the same type of resource as -is indicated by the pname:descriptorType. +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 declarations and +Type Correspondence>> for the relationship between shader types and descriptor types. [[interfaces-resources-correspondence]] @@ -602,15 +609,17 @@ descriptor types. [width="90%",cols="<1,<2",options="header"] |==== | Resource type | Descriptor Type -| sampler | ename:VK_DESCRIPTOR_TYPE_SAMPLER -| sampled image | ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE +| sampler | ename:VK_DESCRIPTOR_TYPE_SAMPLER or + ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER +| sampled image | ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or + ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER | storage image | ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE | combined image sampler | ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER | uniform texel buffer | ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER | storage texel buffer | ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER -| uniform buffer | ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER + +| uniform buffer | ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC -| storage buffer | ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER + +| storage buffer | ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC | input attachment | ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT |==== @@ -655,21 +664,20 @@ endif::VK_KHR_storage_buffer_storage_class[] [[interfaces-resources-setandbinding]] === DescriptorSet and Binding Assignment -A variable identified with a code:DescriptorSet decoration of [eq]#s# and a +A variable decorated with a code:DescriptorSet decoration of [eq]#s# and a code:Binding decoration of [eq]#b# indicates that this variable is associated with the slink:VkDescriptorSetLayoutBinding that has a pname:binding equal to [eq]#b# in pname:pSetLayouts[_s_] that was specified in slink:VkPipelineLayoutCreateInfo. -The range of descriptor sets is between zero and -pname:maxBoundDescriptorSets minus one. -If a descriptor set value is statically used by an entry point there must: -be an associated pname:pSetLayout in the corresponding pipeline layout as -described in <>. +code:DescriptorSet decoration values must: be between zero and +pname:maxBoundDescriptorSets minus one, inclusive. +code:Binding decoration values can: be any 32-bit unsigned integer value, as +described in <>. +Each descriptor set has its own binding name space. If the code:Binding decoration is used with an array, the entire array is -identified with that binding value. +assigned that binding value. The size of the array declaration must: be no larger than the pname:descriptorCount of that sname:VkDescriptorSetLayoutBinding. The index of each element of the array is referred to as the _arrayElement_. @@ -677,10 +685,6 @@ For the purposes of interface matching and descriptor set <>, if a resource variable is not an array, it is treated as if it has an arrayElement of zero. -The binding can: be any 32-bit unsigned integer value, as described in -<>. -Each descriptor set has its own binding name space. - There is a limit on the number of resources of each type that can: be accessed by a pipeline stage as shown in <>. @@ -691,18 +695,21 @@ The "`Resource Types`" column lists which resource types are counted against the limit. Some resource types count against multiple limits. -If multiple entry points in the same pipeline refer to the same set and -binding, all variable definitions with that code:DescriptorSet and -code:Binding must: have the same basic type. - Not all descriptor sets and bindings specified in a pipeline layout need to -be used in a particular shader stage or pipeline, but if a -code:DescriptorSet and code:Binding decoration is specified for a variable -that is statically used in that shader there must: be a pipeline layout -entry identified with that descriptor set and pname:binding and the -corresponding pname:stageFlags must: specify the appropriate -elink:VkShaderStageFlagBits for that stage. +be used in a particular shader stage or pipeline. +If a variable assigned to a given code:DescriptorSet and code:Binding pair +is statically used in the entry point being compiled, the 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 descriptor set layout binding must: be of a corresponding descriptor +type, as defined in <>. +It is valid for multiple shader variables to be assigned the same descriptor +set and binding values, as long as all those that are statically used by the +entry point being compiled are compatible with the descriptor type in the +descriptor set layout binding. [[interfaces-resources-limits]] .Shader Resource Limits @@ -1240,19 +1247,19 @@ Decorating a variable with the code:Layer built-in decoration will make that variable contain the select layer of a multi-layer framebuffer attachment. + In a -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] vertex, tessellation evaluation, or -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] geometry shader, any variable decorated with code:Layer can be written with the framebuffer layer index to which the primitive produced by that shader will be directed. -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] + The last active _vertex processing stage_ (in pipeline order) controls the code:Layer that is used. Outputs in previous shader stages are not used, even if the last stage fails to write the code:Layer. -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] + If the last active vertex processing stage shader entry point's interface does not include a variable decorated with code:Layer, then the first layer @@ -1262,15 +1269,15 @@ variable decorated with code:Layer, it must: write the same value to code:Layer for all output vertices of a given primitive. + The code:Layer decoration must: be used only within -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] vertex, tessellation evaluation, -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] geometry, and fragment shaders. + In a -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] vertex, tessellation evaluation, or -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] geometry shader, any variable decorated with code:Layer must: be declared using the code:Output storage class. ifdef::VK_NV_viewport_array2[] @@ -1888,22 +1895,22 @@ Decorating a variable with the code:ViewportIndex built-in decoration will make that variable contain the index of the viewport. + In a -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] vertex, tessellation evaluation, or -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] geometry shader, the variable decorated with code:ViewportIndex can be written to with the viewport index to which the primitive produced by that shader will be directed. + The selected viewport index is used to select the viewport transform and scissor rectangle. -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] + The last active _vertex processing stage_ (in pipeline order) controls the code:ViewportIndex that is used. Outputs in previous shader stages are not used, even if the last stage fails to write the code:ViewportIndex. -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] + If the last active vertex processing stage shader entry point's interface does not include a variable decorated with code:ViewportIndex, then the @@ -1913,15 +1920,15 @@ variable decorated with code:ViewportIndex, it must: write the same value to code:ViewportIndex for all output vertices of a given primitive. + The code:ViewportIndex decoration must: be used only within -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] vertex, tessellation evaluation, -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] geometry, and fragment shaders. + In a -ifdef::VK_NV_viewport_array2[] +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] vertex, tessellation evaluation, or -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] geometry shader, any variable decorated with code:ViewportIndex must: be declared using the code:Output storage class. + diff --git a/doc/specs/vulkan/chapters/memory.txt b/doc/specs/vulkan/chapters/memory.txt index d75382af..958d2552 100644 --- a/doc/specs/vulkan/chapters/memory.txt +++ b/doc/specs/vulkan/chapters/memory.txt @@ -943,7 +943,7 @@ ifdef::VK_KHR_dedicated_allocation[] [open,refpage='VkMemoryDedicatedAllocateInfoKHR',desc='Specify a dedicated memory allocation resource',type='structs'] -- -If the pname:pNext list includes a sname:VkMemoryDedicatedAllocateInfoKHR +If the pname:pNext chain includes a sname:VkMemoryDedicatedAllocateInfoKHR structure, then that structure includes a handle of the sole buffer or image resource that the memory can: be bound to. @@ -1005,7 +1005,7 @@ ifdef::VK_NV_dedicated_allocation[] [open,refpage='VkDedicatedAllocationMemoryAllocateInfoNV',desc='Specify a dedicated memory allocation resource',type='structs'] -- -If the pname:pNext list includes a +If the pname:pNext chain includes a sname:VkDedicatedAllocationMemoryAllocateInfoNV structure, then that structure includes a handle of the sole buffer or image resource that the memory can: be bound to. @@ -1502,7 +1502,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkMemoryAllocateFlagsInfoKHX',desc='Structure controlling how many instances of memory will be allocated',type='structs'] -- -If the pname:pNext list of slink:VkMemoryAllocateInfo includes a +If the pname:pNext chain of slink:VkMemoryAllocateInfo includes a sname:VkMemoryAllocateFlagsInfoKHX structure, then that structure includes flags and a device mask controlling how many instances of the memory will be allocated. diff --git a/doc/specs/vulkan/chapters/primsrast.txt b/doc/specs/vulkan/chapters/primsrast.txt index 6f1ca17f..186a4a6d 100644 --- a/doc/specs/vulkan/chapters/primsrast.txt +++ b/doc/specs/vulkan/chapters/primsrast.txt @@ -85,12 +85,17 @@ endif::VK_AMD_rasterization_order[] * [[VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782]] If the <> feature is not enabled, pname:depthClampEnable must: be ename:VK_FALSE +ifndef::VK_NV_fill_rectangle[] * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01413]] If the <> feature is not enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL +endif::VK_NV_fill_rectangle[] ifdef::VK_NV_fill_rectangle[] - or ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV + * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507]] + If the <> + feature is not enabled, pname:polygonMode must: be + ename:VK_POLYGON_MODE_FILL or ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414]] If the +VK_NV_fill_rectangle+ extension is not enabled, pname:polygonMode must: not be ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV diff --git a/doc/specs/vulkan/chapters/renderpass.txt b/doc/specs/vulkan/chapters/renderpass.txt index b95be9ed..636221fd 100644 --- a/doc/specs/vulkan/chapters/renderpass.txt +++ b/doc/specs/vulkan/chapters/renderpass.txt @@ -214,7 +214,7 @@ ifdef::VK_KHX_multiview[] [open,refpage='VkRenderPassMultiviewCreateInfoKHX',desc='Structure containing multiview info for all subpasses',type='structs'] -- -If the sname:VkRenderPassCreateInfo::pname:pNext list includes a +If the sname:VkRenderPassCreateInfo::pname:pNext chain includes a sname:VkRenderPassMultiviewCreateInfoKHX structure, then that structure includes an array of view masks, view offsets, and correlation masks for the render pass. @@ -1599,7 +1599,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkDeviceGroupRenderPassBeginInfoKHX',desc='Set the initial device mask and render areas for a render pass instance',type='structs'] -- -If the pname:pNext list of slink:VkRenderPassBeginInfo includes a +If the pname:pNext chain of slink:VkRenderPassBeginInfo includes a sname:VkDeviceGroupRenderPassBeginInfoKHX structure, then that structure includes a device mask and set of render areas for the render pass instance. diff --git a/doc/specs/vulkan/chapters/resources.txt b/doc/specs/vulkan/chapters/resources.txt index 42af8dbe..cd442387 100644 --- a/doc/specs/vulkan/chapters/resources.txt +++ b/doc/specs/vulkan/chapters/resources.txt @@ -231,7 +231,7 @@ ifdef::VK_NV_dedicated_allocation[] [open,refpage='VkDedicatedAllocationBufferCreateInfoNV',desc='Specify that a buffer is bound to a dedicated memory resource',type='structs'] -- -If the pname:pNext list includes a +If the pname:pNext chain includes a sname:VkDedicatedAllocationBufferCreateInfoNV structure, then that structure includes an enable controlling whether the buffer will have a dedicated memory allocation bound to it. @@ -916,7 +916,7 @@ ifdef::VK_NV_dedicated_allocation[] [open,refpage='VkDedicatedAllocationImageCreateInfoNV',desc='Specify that an image is bound to a dedicated memory resource',type='structs'] -- -If the pname:pNext list includes a +If the pname:pNext chain includes a sname:VkDedicatedAllocationImageCreateInfoNV structure, then that structure includes an enable controlling whether the image will have a dedicated memory allocation bound to it. @@ -980,7 +980,7 @@ ifdef::VK_NV_external_memory[] [open,refpage='VkExternalMemoryImageCreateInfoNV',desc='Specify that an image may be backed by external memory',type='structs'] -- -If the pname:pNext list includes a sname:VkExternalMemoryImageCreateInfoNV +If the pname:pNext chain includes a sname:VkExternalMemoryImageCreateInfoNV structure, then that structure defines a set of external memory handle types that may: be used as backing store for the image. @@ -1004,7 +1004,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkImageSwapchainCreateInfoKHX',desc='Specify that an image will be bound to swapchain memory',type='structs'] -- -If the pname:pNext list of slink:VkImageCreateInfo includes a +If the pname:pNext chain of slink:VkImageCreateInfo includes a sname:VkImageSwapchainCreateInfoKHX structure, then that structure includes a swapchain handle indicating that the image will be bound to memory from that swapchain. @@ -2385,7 +2385,9 @@ ifdef::VK_KHR_dedicated_allocation[] To determine the dedicated allocation requirements of a buffer or image resource, add a slink:VkMemoryDedicatedRequirementsKHR structure to the -pname:pNext chain of fname:vkGetBufferMemoryRequirements2KHR or +pname:pNext chain of the slink:VkMemoryRequirements2KHR structure passed as +the pname:pMemoryRequirements parameter of +fname:vkGetBufferMemoryRequirements2KHR or fname:vkGetImageMemoryRequirements2KHR. The sname:VkMemoryDedicatedRequirementsKHR structure is defined as: @@ -2402,7 +2404,9 @@ include::../api/structs/VkMemoryDedicatedRequirementsKHR.txt[] is required for this resource. If the sname:VkMemoryDedicatedRequirementsKHR structure is included in the -pname:pNext chain of a fname:vkGetBufferMemoryRequirements2KHR call, +pname:pNext chain of the slink:VkMemoryRequirements2KHR structure passed as +the pname:pMemoryRequirements parameter of a +fname:vkGetBufferMemoryRequirements2KHR call, pname:requiresDedicatedAllocation may: be ename:VK_TRUE under one of the following conditions: @@ -2410,10 +2414,10 @@ ifndef::VK_KHR_external_memory[] * none endif::VK_KHR_external_memory[] ifdef::VK_KHR_external_memory[] - * The pname:pNext chain for the call to fname:vkCreateBuffer used to - create the buffer being queried contained an instance of - sname:VkExternalMemoryBufferCreateInfoKHR and any of the handle types - specified in + * The pname:pNext chain of sname:VkBufferCreateInfo for the call to + fname:vkCreateBuffer used to create the buffer being queried contained + an instance of sname:VkExternalMemoryBufferCreateInfoKHR, and any of the + handle types specified in sname:VkExternalMemoryBufferCreateInfoKHR::pname:handleTypes requires dedicated allocation, as reported by flink:vkGetPhysicalDeviceExternalBufferPropertiesKHR in @@ -2425,17 +2429,22 @@ endif::VK_KHR_external_memory[] In all other cases, pname:requiresDedicatedAllocation must: be set to ename:VK_FALSE by the implementation whenever a sname:VkMemoryDedicatedRequirementsKHR structure is included in the -pname:pNext chain of a call to fname:vkGetBufferMemoryRequirements2KHR. +pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed to +a call to fname:vkGetBufferMemoryRequirements2KHR. If the sname:VkMemoryDedicatedRequirementsKHR structure is included in the -pname:pNext chain of a fname:vkGetBufferMemoryRequirements2KHR call and +pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed as +the pname:pMemoryRequirements parameter of a +fname:vkGetBufferMemoryRequirements2KHR call and ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT was set in sname:VkBufferCreateInfo::pname:flags when pname:buffer was created then the implementation must: set both pname:prefersDedicatedAllocation and pname:requiresDedicatedAllocation to ename:VK_FALSE. If the sname:VkMemoryDedicatedRequirementsKHR structure is included in the -pname:pNext chain of a fname:vkGetImageMemoryRequirements2KHR call, +pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed as +the pname:pMemoryRequirements parameter of a +fname:vkGetImageMemoryRequirements2KHR call, pname:requiresDedicatedAllocation may: be ename:VK_TRUE under one of the following conditions: @@ -2443,11 +2452,12 @@ ifndef::VK_KHR_external_memory[] * none endif::VK_KHR_external_memory[] ifdef::VK_KHR_external_memory[] - * The pname:pNext chain for the call to fname:vkCreateImage used to create - the image being queried contained an instance of - sname:VkExternalMemoryImageCreateInfoKHR and any of the handle types - specified in sname:VkExternalMemoryImageCreateInfoKHR::pname:handleTypes - require a dedicated allocation, as reported by + * The pname:pNext chain of sname:VkImageCreateInfo for the call to + fname:vkCreateImage used to create the image being queried contained an + instance of sname:VkExternalMemoryImageCreateInfoKHR, and any of the + handle types specified in + sname:VkExternalMemoryImageCreateInfoKHR::pname:handleTypes requires + dedicated allocation, as reported by flink:vkGetPhysicalDeviceImageFormatProperties2KHR in sname:VkExternalImageFormatPropertiesKHR::pname:externalMemoryProperties::pname:externalMemoryFeatures, the pname:requiresDedicatedAllocation field will be set to @@ -2457,10 +2467,13 @@ endif::VK_KHR_external_memory[] In all other cases, pname:requiresDedicatedAllocation must: be set to ename:VK_FALSE by the implementation whenever a sname:VkMemoryDedicatedRequirementsKHR structure is included in the -pname:pNext chain of a call to fname:vkGetImageMemoryRequirements2KHR. +pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed to +a call to fname:vkGetImageMemoryRequirements2KHR. If the sname:VkMemoryDedicatedRequirementsKHR structure is included in the -pname:pNext chain of a fname:vkGetImageMemoryRequirements2KHR call and +pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed as +the pname:pMemoryRequirements parameter of a +fname:vkGetImageMemoryRequirements2KHR call and ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT was set in sname:VkImageCreateInfo::pname:flags when pname:image was created then the implementation must: set both pname:prefersDedicatedAllocation and @@ -2543,7 +2556,15 @@ ifdef::VK_KHR_dedicated_allocation[] slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for pname:image), pname:memory must: have been created with slink:VkMemoryDedicatedAllocateInfoKHR::pname:buffer equal to - pname:buffer and pname:memoryOffset must: be zero + pname:buffer + * [[VUID-vkBindBufferMemory-memory-01508]] + If the sname:VkmemoryAllocateInfo provided when pname:memory was + allocated included an instance of slink:VkMemoryDedicatedAllocateInfo in + its pname:pNext chain, and + slink:VkMemoryDedicatedAllocateInfo::pname:buffer was not + ename:VK_NULL_HANDLE, then pname:buffer must: equal + slink:VkMemoryDedicatedAllocateInfo::pname:buffer and pname:memoryOffset + must: be zero. endif::VK_KHR_dedicated_allocation[] ifdef::VK_NV_dedicated_allocation[] * [[VUID-vkBindBufferMemory-buffer-01038]] @@ -2701,7 +2722,14 @@ ifdef::VK_KHR_dedicated_allocation[] slink:VkMemoryDedicatedRequirementsKHR::requiresDedicatedAllocation for pname:image), pname:memory must: have been created with slink:VkMemoryDedicatedAllocateInfoKHR::pname:image equal to pname:image - and pname:memoryOffset must: be zero + * [[VUID-vkBindImageMemory-memory-01509]] + If the sname:VkmemoryAllocateInfo provided when pname:memory was + allocated included an instance of slink:VkMemoryDedicatedAllocateInfo in + its pname:pNext chain, and + slink:VkMemoryDedicatedAllocateInfo::pname:image was not + ename:VK_NULL_HANDLE, then pname:image must: equal + slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset + must: be zero. endif::VK_KHR_dedicated_allocation[] ifdef::VK_NV_dedicated_allocation[] * [[VUID-vkBindImageMemory-image-01050]] @@ -2863,7 +2891,7 @@ include::../validity/structs/VkBindImageMemoryInfoKHX.txt[] [open,refpage='VkBindImageMemorySwapchainInfoKHX',desc='Structure specifying swapchain image memory to bind to',type='structs'] -- -If the pname:pNext list of slink:VkBindImageMemoryInfoKHX includes a +If the pname:pNext chain of slink:VkBindImageMemoryInfoKHX includes a sname:VkBindImageMemorySwapchainInfoKHX structure, then that structure includes a swapchain handle and image index indicating that the image will be bound to memory from that swapchain. diff --git a/doc/specs/vulkan/chapters/samplers.txt b/doc/specs/vulkan/chapters/samplers.txt index 44594da4..29ae255b 100644 --- a/doc/specs/vulkan/chapters/samplers.txt +++ b/doc/specs/vulkan/chapters/samplers.txt @@ -223,7 +223,7 @@ ifdef::VK_EXT_sampler_filter_minmax[] [open,refpage='VkSamplerReductionModeCreateInfoEXT',desc='Structure specifying sampler reduction mode',type='structs'] -- -If the pname:pNext list of slink:VkSamplerCreateInfo includes a +If the pname:pNext chain of slink:VkSamplerCreateInfo includes a sname:VkSamplerReductionModeCreateInfoEXT structure, then that structure includes a mode that controls how texture filtering combines texel values. diff --git a/doc/specs/vulkan/chapters/sparsemem.txt b/doc/specs/vulkan/chapters/sparsemem.txt index ddd13ad0..cdd55932 100644 --- a/doc/specs/vulkan/chapters/sparsemem.txt +++ b/doc/specs/vulkan/chapters/sparsemem.txt @@ -902,8 +902,8 @@ include::../api/protos/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.txt[] fname:vkGetPhysicalDeviceSparseImageFormatProperties2KHR behaves identically to flink:vkGetPhysicalDeviceSparseImageFormatProperties, with the ability to -return extended information by adding extension structures to its -pname:pNext chain. +return extended information by adding extension structures to the +pname:pNext chain of its pname:pProperties parameter. include::../validity/protos/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.txt[] -- @@ -1572,7 +1572,7 @@ ifdef::VK_KHX_device_group[] [open,refpage='VkDeviceGroupBindSparseInfoKHX',desc='Structure indicating which instances are bound',type='structs'] -- -If the pname:pNext list of slink:VkBindSparseInfo includes a +If the pname:pNext chain of slink:VkBindSparseInfo includes a sname:VkDeviceGroupBindSparseInfoKHX structure, then that structure includes device indices specifying which instance of the resources and memory are bound. diff --git a/doc/specs/vulkan/chapters/synchronization.txt b/doc/specs/vulkan/chapters/synchronization.txt index 892849ae..80435ec7 100644 --- a/doc/specs/vulkan/chapters/synchronization.txt +++ b/doc/specs/vulkan/chapters/synchronization.txt @@ -368,41 +368,29 @@ between queues. [[synchronization-pipeline-stages-masks]] If a synchronization command includes a source stage mask, its first <> only includes -execution of the pipeline stages specified in that mask, as well as any -<> stages. -If a synchronization command includes a destination stage mask, its second -<> only includes -execution of the pipeline stages specified in that mask, as well as any -<> stages. - -<> are affected -in a similar way. -If a synchronization command includes a source stage mask, its first +execution of the pipeline stages specified in that mask, and its first <> only includes memory access performed by pipeline stages specified in that mask. If a synchronization command includes a destination stage mask, its second +<> only includes +execution of the pipeline stages specified in that mask, and its second <> only includes memory access performed by pipeline stages specified in that mask. [NOTE] .Note ==== -Implementations may: not support synchronization at every pipeline stage for -every synchronization operation. -If a pipeline stage that an implementation does not support synchronization -for appears in a source stage mask, then it may: substitute that stage for -any logically later stage. -If a pipeline stage that an implementation does not support synchronization -for appears in a destination stage mask, then it may: substitute that stage -for any logically earlier stage. +Including a particular pipeline stage in the first +<> of a command +implicitly includes <> pipeline stages in the synchronization scope. +Similarly, the second <> includes <> +pipeline stages. -For example, if an implementation is unable to signal an event immediately -after vertex shader execution is complete, it may: instead signal the event -after color attachment output has completed. - -If an implementation makes such a substitution, it must: not affect the -semantics of execution or memory dependencies or image and buffer memory -barriers. +However, note that <> are not affected in this way - only the precise stages specified +are considered part of each access scope. ==== Certain pipeline stages are only available on queues that support a @@ -458,12 +446,25 @@ Including any given stage in the destination stage mask for a particular synchronization command also implies that any logically later stages are included in *B~S~* for that command. -.Note [NOTE] +.Note ==== -Logically earlier/later stages are not included when defining the -<> of a -<>. +Implementations may: not support synchronization at every pipeline stage for +every synchronization operation. +If a pipeline stage that an implementation does not support synchronization +for appears in a source stage mask, it may: substitute any logically later +stage in its place for the first synchronization scope. +If a pipeline stage that an implementation does not support synchronization +for appears in a destination stage mask, it may: substitute any logically +earlier stage in its place for the second synchronization scope. + +For example, if an implementation is unable to signal an event immediately +after vertex shader execution is complete, it may: instead signal the event +after color attachment output has completed. + +If an implementation makes such a substitution, it must: not affect the +semantics of execution or memory dependencies or image and buffer memory +barriers. ==== [[synchronization-pipeline-stages-types]] diff --git a/doc/specs/vulkan/chapters/vertexpostproc.txt b/doc/specs/vulkan/chapters/vertexpostproc.txt index 49179801..e7c6300d 100644 --- a/doc/specs/vulkan/chapters/vertexpostproc.txt +++ b/doc/specs/vulkan/chapters/vertexpostproc.txt @@ -474,7 +474,7 @@ include::../api/structs/VkPipelineViewportStateCreateInfo.txt[] include::../validity/structs/VkPipelineViewportStateCreateInfo.txt[] -- -ifndef::VK_NV_viewport_array2[] +ifndef::VK_NV_viewport_array2+VK_EXT_shader_viewport_index_layer[] If a geometry shader is active and has an output variable decorated with code:ViewportIndex, the viewport transformation uses the viewport corresponding to the value assigned to code:ViewportIndex taken from an @@ -487,7 +487,9 @@ are undefined. If no geometry shader is active, or if the geometry shader does not have an output decorated with code:ViewportIndex, the viewport numbered zero is used by the viewport transformation. -endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2+VK_EXT_shader_viewport_index_layer[] + +ifdef::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] ifdef::VK_NV_viewport_array2[] A _vertex processing stage_ may direct each primitive to zero or more viewports. @@ -506,9 +508,30 @@ code:ViewportIndex or code:ViewportMaskNV for all vertices of a primitive due to flow control, the results of the viewport transformation of the vertices of such primitives are undefined. If the last vertex processing stage does not have an output decorated with -code:ViewportIndex or code:ViewportMask, the viewport numbered zero is used -by the viewport transformation. +code:ViewportIndex or code:ViewportMaskNV, the viewport numbered zero is +used by the viewport transformation. endif::VK_NV_viewport_array2[] +ifndef::VK_NV_viewport_array2[] +ifdef::VK_EXT_shader_viewport_index_layer[] +A _vertex processing stage_ can: direct each primitive to one of several +viewports. +The destination viewport for a primitive is selected by the last active +vertex processing stage that has an output variable decorated with +code:ViewportIndex. +The viewport transform uses the viewport corresponding to the value assigned +to code:ViewportIndex taken from an implementation-dependent vertex of each +primitive. +If code:ViewportIndex is outside the range zero to pname:viewportCount minus +one for a primitive, or if the last active vertex processing stage did not +assign a value to code:ViewportIndex for all vertices of a primitive due to +flow control, the results of the viewport transformation of the vertices of +such primitives are undefined. +If the last vertex processing stage does not have an output decorated with +code:ViewportIndex, the viewport numbered zero is used by the viewport +transformation. +endif::VK_EXT_shader_viewport_index_layer[] +endif::VK_NV_viewport_array2[] +endif::VK_NV_viewport_array2,VK_EXT_shader_viewport_index_layer[] A single vertex can: be used in more than one individual primitive, in primitives such as ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP. diff --git a/doc/specs/vulkan/config/extDependency.py b/doc/specs/vulkan/config/extDependency.py index 86dcf05c..bd4bb602 100644 --- a/doc/specs/vulkan/config/extDependency.py +++ b/doc/specs/vulkan/config/extDependency.py @@ -51,6 +51,6 @@ extensions['VK_NV_external_memory_win32'] = [ 'VK_NV_external_memory', 'VK_NV_ex extensions['VK_NV_win32_keyed_mutex'] = [ 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32' ] # Define lists of all / KHR / KHX extensions -allExts = [ 'VK_AMD_draw_indirect_count', 'VK_AMD_gcn_shader', 'VK_AMD_gpu_shader_half_float', 'VK_AMD_gpu_shader_int16', 'VK_AMD_mixed_attachment_samples', 'VK_AMD_negative_viewport_height', 'VK_AMD_rasterization_order', 'VK_AMD_shader_ballot', 'VK_AMD_shader_explicit_vertex_parameter', 'VK_AMD_shader_trinary_minmax', 'VK_AMD_texture_gather_bias_lod', 'VK_EXT_acquire_xlib_display', 'VK_EXT_blend_operation_advanced', 'VK_EXT_debug_marker', 'VK_EXT_debug_report', 'VK_EXT_depth_range_unrestricted', 'VK_EXT_direct_mode_display', 'VK_EXT_discard_rectangles', 'VK_EXT_display_control', 'VK_EXT_display_surface_counter', 'VK_EXT_hdr_metadata', 'VK_EXT_post_depth_coverage', 'VK_EXT_sampler_filter_minmax', 'VK_EXT_shader_subgroup_ballot', 'VK_EXT_shader_subgroup_vote', 'VK_EXT_swapchain_colorspace', 'VK_EXT_validation_flags', 'VK_GOOGLE_display_timing', 'VK_IMG_filter_cubic', 'VK_IMG_format_pvrtc', 'VK_KHR_16bit_storage', 'VK_KHR_android_surface', 'VK_KHR_dedicated_allocation', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_external_fence', 'VK_KHR_external_fence_capabilities', 'VK_KHR_external_fence_fd', 'VK_KHR_external_fence_win32', 'VK_KHR_external_memory', 'VK_KHR_external_memory_capabilities', 'VK_KHR_external_memory_fd', 'VK_KHR_external_memory_win32', 'VK_KHR_external_semaphore', 'VK_KHR_external_semaphore_capabilities', 'VK_KHR_external_semaphore_fd', 'VK_KHR_external_semaphore_win32', 'VK_KHR_get_memory_requirements2', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_relaxed_block_layout', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_shared_presentable_image', 'VK_KHR_storage_buffer_storage_class', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_variable_pointers', 'VK_KHR_wayland_surface', 'VK_KHR_win32_keyed_mutex', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface', 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_multiview', 'VK_MVK_ios_surface', 'VK_MVK_macos_surface', 'VK_NN_vi_surface', 'VK_NVX_device_generated_commands', 'VK_NVX_multiview_per_view_attributes', 'VK_NV_clip_space_w_scaling', 'VK_NV_dedicated_allocation', 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32', 'VK_NV_fill_rectangle', 'VK_NV_fragment_coverage_to_color', 'VK_NV_framebuffer_mixed_samples', 'VK_NV_geometry_shader_passthrough', 'VK_NV_glsl_shader', 'VK_NV_sample_mask_override_coverage', 'VK_NV_viewport_array2', 'VK_NV_viewport_swizzle', 'VK_NV_win32_keyed_mutex' ] +allExts = [ 'VK_AMD_draw_indirect_count', 'VK_AMD_gcn_shader', 'VK_AMD_gpu_shader_half_float', 'VK_AMD_gpu_shader_int16', 'VK_AMD_mixed_attachment_samples', 'VK_AMD_negative_viewport_height', 'VK_AMD_rasterization_order', 'VK_AMD_shader_ballot', 'VK_AMD_shader_explicit_vertex_parameter', 'VK_AMD_shader_trinary_minmax', 'VK_AMD_texture_gather_bias_lod', 'VK_EXT_acquire_xlib_display', 'VK_EXT_blend_operation_advanced', 'VK_EXT_debug_marker', 'VK_EXT_debug_report', 'VK_EXT_depth_range_unrestricted', 'VK_EXT_direct_mode_display', 'VK_EXT_discard_rectangles', 'VK_EXT_display_control', 'VK_EXT_display_surface_counter', 'VK_EXT_hdr_metadata', 'VK_EXT_post_depth_coverage', 'VK_EXT_sampler_filter_minmax', 'VK_EXT_shader_subgroup_ballot', 'VK_EXT_shader_subgroup_vote', 'VK_EXT_shader_viewport_index_layer', 'VK_EXT_swapchain_colorspace', 'VK_EXT_validation_flags', 'VK_GOOGLE_display_timing', 'VK_IMG_filter_cubic', 'VK_IMG_format_pvrtc', 'VK_KHR_16bit_storage', 'VK_KHR_android_surface', 'VK_KHR_dedicated_allocation', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_external_fence', 'VK_KHR_external_fence_capabilities', 'VK_KHR_external_fence_fd', 'VK_KHR_external_fence_win32', 'VK_KHR_external_memory', 'VK_KHR_external_memory_capabilities', 'VK_KHR_external_memory_fd', 'VK_KHR_external_memory_win32', 'VK_KHR_external_semaphore', 'VK_KHR_external_semaphore_capabilities', 'VK_KHR_external_semaphore_fd', 'VK_KHR_external_semaphore_win32', 'VK_KHR_get_memory_requirements2', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_relaxed_block_layout', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_shared_presentable_image', 'VK_KHR_storage_buffer_storage_class', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_variable_pointers', 'VK_KHR_wayland_surface', 'VK_KHR_win32_keyed_mutex', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface', 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_multiview', 'VK_MVK_ios_surface', 'VK_MVK_macos_surface', 'VK_NN_vi_surface', 'VK_NVX_device_generated_commands', 'VK_NVX_multiview_per_view_attributes', 'VK_NV_clip_space_w_scaling', 'VK_NV_dedicated_allocation', 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32', 'VK_NV_fill_rectangle', 'VK_NV_fragment_coverage_to_color', 'VK_NV_framebuffer_mixed_samples', 'VK_NV_geometry_shader_passthrough', 'VK_NV_glsl_shader', 'VK_NV_sample_mask_override_coverage', 'VK_NV_viewport_array2', 'VK_NV_viewport_swizzle', 'VK_NV_win32_keyed_mutex' ] khrExts = [ 'VK_KHR_16bit_storage', 'VK_KHR_android_surface', 'VK_KHR_dedicated_allocation', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_external_fence', 'VK_KHR_external_fence_capabilities', 'VK_KHR_external_fence_fd', 'VK_KHR_external_fence_win32', 'VK_KHR_external_memory', 'VK_KHR_external_memory_capabilities', 'VK_KHR_external_memory_fd', 'VK_KHR_external_memory_win32', 'VK_KHR_external_semaphore', 'VK_KHR_external_semaphore_capabilities', 'VK_KHR_external_semaphore_fd', 'VK_KHR_external_semaphore_win32', 'VK_KHR_get_memory_requirements2', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_relaxed_block_layout', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_shared_presentable_image', 'VK_KHR_storage_buffer_storage_class', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_variable_pointers', 'VK_KHR_wayland_surface', 'VK_KHR_win32_keyed_mutex', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface' ] khxExts = [ 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_multiview' ] diff --git a/doc/specs/vulkan/config/extDependency.sh b/doc/specs/vulkan/config/extDependency.sh index d21b5504..4ae39ae4 100644 --- a/doc/specs/vulkan/config/extDependency.sh +++ b/doc/specs/vulkan/config/extDependency.sh @@ -51,6 +51,6 @@ extensions[VK_NV_external_memory_win32]="VK_NV_external_memory VK_NV_external_me extensions[VK_NV_win32_keyed_mutex]="VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32" # Define lists of all / KHR / KHX extensions -allExts="VK_AMD_draw_indirect_count VK_AMD_gcn_shader VK_AMD_gpu_shader_half_float VK_AMD_gpu_shader_int16 VK_AMD_mixed_attachment_samples VK_AMD_negative_viewport_height VK_AMD_rasterization_order VK_AMD_shader_ballot VK_AMD_shader_explicit_vertex_parameter VK_AMD_shader_trinary_minmax VK_AMD_texture_gather_bias_lod VK_EXT_acquire_xlib_display VK_EXT_blend_operation_advanced VK_EXT_debug_marker VK_EXT_debug_report VK_EXT_depth_range_unrestricted VK_EXT_direct_mode_display VK_EXT_discard_rectangles VK_EXT_display_control VK_EXT_display_surface_counter VK_EXT_hdr_metadata VK_EXT_post_depth_coverage VK_EXT_sampler_filter_minmax VK_EXT_shader_subgroup_ballot VK_EXT_shader_subgroup_vote VK_EXT_swapchain_colorspace VK_EXT_validation_flags VK_GOOGLE_display_timing VK_IMG_filter_cubic VK_IMG_format_pvrtc VK_KHR_16bit_storage VK_KHR_android_surface VK_KHR_dedicated_allocation VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_external_fence VK_KHR_external_fence_capabilities VK_KHR_external_fence_fd VK_KHR_external_fence_win32 VK_KHR_external_memory VK_KHR_external_memory_capabilities VK_KHR_external_memory_fd VK_KHR_external_memory_win32 VK_KHR_external_semaphore VK_KHR_external_semaphore_capabilities VK_KHR_external_semaphore_fd VK_KHR_external_semaphore_win32 VK_KHR_get_memory_requirements2 VK_KHR_get_physical_device_properties2 VK_KHR_get_surface_capabilities2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_relaxed_block_layout VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_shared_presentable_image VK_KHR_storage_buffer_storage_class VK_KHR_surface VK_KHR_swapchain VK_KHR_variable_pointers VK_KHR_wayland_surface VK_KHR_win32_keyed_mutex VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_multiview VK_MVK_ios_surface VK_MVK_macos_surface VK_NN_vi_surface VK_NVX_device_generated_commands VK_NVX_multiview_per_view_attributes VK_NV_clip_space_w_scaling VK_NV_dedicated_allocation VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32 VK_NV_fill_rectangle VK_NV_fragment_coverage_to_color VK_NV_framebuffer_mixed_samples VK_NV_geometry_shader_passthrough VK_NV_glsl_shader VK_NV_sample_mask_override_coverage VK_NV_viewport_array2 VK_NV_viewport_swizzle VK_NV_win32_keyed_mutex" +allExts="VK_AMD_draw_indirect_count VK_AMD_gcn_shader VK_AMD_gpu_shader_half_float VK_AMD_gpu_shader_int16 VK_AMD_mixed_attachment_samples VK_AMD_negative_viewport_height VK_AMD_rasterization_order VK_AMD_shader_ballot VK_AMD_shader_explicit_vertex_parameter VK_AMD_shader_trinary_minmax VK_AMD_texture_gather_bias_lod VK_EXT_acquire_xlib_display VK_EXT_blend_operation_advanced VK_EXT_debug_marker VK_EXT_debug_report VK_EXT_depth_range_unrestricted VK_EXT_direct_mode_display VK_EXT_discard_rectangles VK_EXT_display_control VK_EXT_display_surface_counter VK_EXT_hdr_metadata VK_EXT_post_depth_coverage VK_EXT_sampler_filter_minmax VK_EXT_shader_subgroup_ballot VK_EXT_shader_subgroup_vote VK_EXT_shader_viewport_index_layer VK_EXT_swapchain_colorspace VK_EXT_validation_flags VK_GOOGLE_display_timing VK_IMG_filter_cubic VK_IMG_format_pvrtc VK_KHR_16bit_storage VK_KHR_android_surface VK_KHR_dedicated_allocation VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_external_fence VK_KHR_external_fence_capabilities VK_KHR_external_fence_fd VK_KHR_external_fence_win32 VK_KHR_external_memory VK_KHR_external_memory_capabilities VK_KHR_external_memory_fd VK_KHR_external_memory_win32 VK_KHR_external_semaphore VK_KHR_external_semaphore_capabilities VK_KHR_external_semaphore_fd VK_KHR_external_semaphore_win32 VK_KHR_get_memory_requirements2 VK_KHR_get_physical_device_properties2 VK_KHR_get_surface_capabilities2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_relaxed_block_layout VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_shared_presentable_image VK_KHR_storage_buffer_storage_class VK_KHR_surface VK_KHR_swapchain VK_KHR_variable_pointers VK_KHR_wayland_surface VK_KHR_win32_keyed_mutex VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_multiview VK_MVK_ios_surface VK_MVK_macos_surface VK_NN_vi_surface VK_NVX_device_generated_commands VK_NVX_multiview_per_view_attributes VK_NV_clip_space_w_scaling VK_NV_dedicated_allocation VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32 VK_NV_fill_rectangle VK_NV_fragment_coverage_to_color VK_NV_framebuffer_mixed_samples VK_NV_geometry_shader_passthrough VK_NV_glsl_shader VK_NV_sample_mask_override_coverage VK_NV_viewport_array2 VK_NV_viewport_swizzle VK_NV_win32_keyed_mutex" khrExts="VK_KHR_16bit_storage VK_KHR_android_surface VK_KHR_dedicated_allocation VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_external_fence VK_KHR_external_fence_capabilities VK_KHR_external_fence_fd VK_KHR_external_fence_win32 VK_KHR_external_memory VK_KHR_external_memory_capabilities VK_KHR_external_memory_fd VK_KHR_external_memory_win32 VK_KHR_external_semaphore VK_KHR_external_semaphore_capabilities VK_KHR_external_semaphore_fd VK_KHR_external_semaphore_win32 VK_KHR_get_memory_requirements2 VK_KHR_get_physical_device_properties2 VK_KHR_get_surface_capabilities2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_relaxed_block_layout VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_shared_presentable_image VK_KHR_storage_buffer_storage_class VK_KHR_surface VK_KHR_swapchain VK_KHR_variable_pointers VK_KHR_wayland_surface VK_KHR_win32_keyed_mutex VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface" khxExts="VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_multiview" diff --git a/doc/specs/vulkan/reflow.py b/doc/specs/vulkan/reflow.py index 7d00f42a..0bde9c72 100755 --- a/doc/specs/vulkan/reflow.py +++ b/doc/specs/vulkan/reflow.py @@ -580,7 +580,7 @@ global vuPat vuPat = re.compile('^(?P [*]+)( *)(?P.*)', re.DOTALL) # The value to start tagging VU statements at, unless overridden by -nextvu -startVUID = 1507 +startVUID = 1510 if __name__ == '__main__': parser = argparse.ArgumentParser() diff --git a/src/spec/cgenerator.py b/src/spec/cgenerator.py index 836de52d..534e024f 100644 --- a/src/spec/cgenerator.py +++ b/src/spec/cgenerator.py @@ -305,6 +305,13 @@ class COutputGenerator(OutputGenerator): (numVal,strVal) = self.enumToValue(elem, True) name = elem.get('name') + # Check for duplicate enum values and raise an error if found. + for elem2 in groupElem.findall('enum'): + if (elem != elem2): + (numVal2,strVal2) = self.enumToValue(elem2, True) + if (numVal2 == numVal): + raise UserWarning('Duplicate enum ' + name + ' = ' + elem2.get('name') + ' = ' + strVal) + # Extension enumerants are only included if they are required if (self.isEnumRequired(elem)): body += " " + name + " = " + strVal + ",\n" diff --git a/src/spec/extDependency.py b/src/spec/extDependency.py index 4fa8bb94..3bf43c0b 100755 --- a/src/spec/extDependency.py +++ b/src/spec/extDependency.py @@ -24,7 +24,6 @@ import argparse import xml.etree.ElementTree as etree -import networkx as nx def enQuote(key): return "'" + str(key) + "'" @@ -44,6 +43,78 @@ def pyList(names): ' ]') return s +class DiGraph: + """A directed graph. + + The implementation and API mimic that of networkx.DiGraph in networkx-1.11. + networkx implements graphs as nested dicts; it's dicts all the way down, no + lists. + + Some major differences between this implementation and that of + networkx-1.11 are: + + * This omits edge and node attribute data, because we never use them + yet they add additional code complexity. + + * This returns iterator objects when possible instead of collection + objects, because it simplifies the implementation and should provide + better performance. + """ + + def __init__(self): + self.__nodes = {} + + def add_node(self, node): + if node not in self.__nodes: + self.__nodes[node] = DiGraphNode() + + def add_edge(self, src, dest): + self.add_node(src) + self.add_node(dest) + self.__nodes[src].adj.add(dest) + + def nodes(self): + """Iterate over the nodes in the graph.""" + return self.__nodes.keys() + + def descendants(self, node): + """ + Iterate over the nodes reachable from the given start node, excluding + the start node itself. Each node in the graph is yielded at most once. + """ + + # Implementation detail: Do a breadth-first traversal because it's + # easier than depth-first. + + # All nodes seen during traversal. + seen = set() + + # The stack of nodes that need visiting. + visit_me = [] + + # Boostrap the traversal. + seen.add(node) + for x in self.__nodes[node].adj: + if x not in seen: + seen.add(x) + visit_me.append(x) + + while visit_me: + x = visit_me.pop() + assert x in seen + yield x + + for y in self.__nodes[x].adj: + if y not in seen: + seen.add(y) + visit_me.append(y) + +class DiGraphNode: + + def __init__(self): + # Set of adjacent of nodes. + self.adj = set() + # -extension name - may be a single extension name, a space-separated list # of names, or a regular expression. if __name__ == '__main__': @@ -76,7 +147,7 @@ if __name__ == '__main__': allExts = set() khrExts = set() khxExts = set() - g = nx.DiGraph() + g = DiGraph() for elem in tree.findall('extensions/extension'): name = elem.get('name') @@ -95,7 +166,7 @@ if __name__ == '__main__': deps = elem.get('requires').split(',') for dep in deps: - g.add_path([name, dep]) + g.add_edge(name, dep) else: g.add_node(name) else: @@ -115,7 +186,7 @@ if __name__ == '__main__': # remains as stable as possible as extensions are added to vk.xml. for ext in sorted(g.nodes()): - children = nx.descendants(g, ext) + children = list(g.descendants(ext)) # Only emit an ifdef block if an extension has dependencies if len(children) > 0: @@ -142,7 +213,7 @@ if __name__ == '__main__': # remains as stable as possible as extensions are added to vk.xml. for ext in sorted(g.nodes()): - children = nx.descendants(g, ext) + children = list(g.descendants(ext)) # Only emit an ifdef block if an extension has dependencies if len(children) > 0: diff --git a/src/spec/vk.xml b/src/spec/vk.xml index 85a49afb..7c5f258a 100644 --- a/src/spec/vk.xml +++ b/src/spec/vk.xml @@ -106,7 +106,7 @@ private version is maintained in the 1.0 branch of the member gitlab server. // Vulkan 1.0 version number #define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 57 +#define VK_HEADER_VERSION 58 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -6218,7 +6218,7 @@ private version is maintained in the 1.0 branch of the member gitlab server. - + @@ -6629,7 +6629,7 @@ private version is maintained in the 1.0 branch of the member gitlab server. - + @@ -6922,5 +6922,41 @@ private version is maintained in the 1.0 branch of the member gitlab server. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h index 3a74f5e3..23a92889 100644 --- a/src/vulkan/vulkan.h +++ b/src/vulkan/vulkan.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 57 +#define VK_HEADER_VERSION 58 #define VK_NULL_HANDLE 0 @@ -4827,7 +4827,7 @@ typedef struct VkPhysicalDeviceVariablePointerFeaturesKHR { #define VK_KHR_dedicated_allocation 1 -#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 1 +#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 #define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" typedef struct VkMemoryDedicatedRequirementsKHR { @@ -5648,7 +5648,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHX( VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX) -#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1 +#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 #define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands" @@ -6440,6 +6440,11 @@ typedef struct VkPipelineCoverageModulationStateCreateInfoNV { #define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage" +#define VK_EXT_shader_viewport_index_layer 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" + + #ifdef __cplusplus } #endif