summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Leech <oddhack@sonic.net>2017-10-12 19:57:47 -0700
committerJon Leech <oddhack@sonic.net>2017-10-12 19:57:47 -0700
commit52d809dd04be4b063adb715eb5a2114e30a9f6d4 (patch)
tree4a0e9bd390fc3b002b41763996f5fc3d545be566
parent61bb590a50b179d16f6dd9009f934afcf3854eab (diff)
downloadvulkan-spec-52d809dd04be4b063adb715eb5a2114e30a9f6d4.zip
vulkan-spec-52d809dd04be4b063adb715eb5a2114e30a9f6d4.tar.xz
Change log for October 13, 2017 Vulkan 1.0.63 spec update:
* Bump API patch number and header version number to 63 for this update. Github Issues: * Add missing valid usage statements for ptext:maxDescriptorSets*, ptext:maxPerStageDescriptorInputAttachments, and ptext:maxPerStageResources to slink:VkPipelineLayoutCreateInfo.txt, flink:VkComputePipelineCreateInfo, and flink:VkGraphicsPipelineCreateInfo (public issue 546). * Fix typos in ftext:vkCmdDraw*AMD descriptions (public pull request 549). * Fixed flink:vkCmdWriteTimestamp so it is not unnecessarily restricted to queues supporting graphics or compute operations (public issue 558). * Improvements to valid usage generator for output `*Flags` pointer parameters and for some `void *` parameters (public pull requests 560, 562). * Document `altlen` attribute in XML schema as valid C99 syntax and tweak `vk.xml` to match (public pull request 566). * Clarify when pname:fence is signaled by flink:vkQueueSubmit in a more obvious place (public issue 577). Internal Issues: * Specify a whitelist of supported SPIR-V Storage Classes in the <<spirvenv-module-validation, Validation Rules within a Module>> appendix (internal SPIR-V issue 166). * Relax the shared semaphore wait timeout requirement in the <<synchronization-semaphores-importing, Importing Semaphore Payloads>> section (internal issue 820). * Update the <<textures-image-level-selection, Image Level(s) Selection>> equations so that the parameters returned by the level-of-detail query appear explicitly, also fixing the issue that linear filtering would select a level below the base level for magnification (internal issue 926). * Disallow creation of a swapchain with zero pname:imageExtent in slink:VkSurfaceCapabilitiesKHR and slink:VkSwapchainCreateInfoKHR (internal issue 1020). Other Issues: * Clarify in <<textures-operation-validation,Image View Validation>> that the layout of subresources in an image view must have a layout that matches that written into the descriptor, and that this section is about validating image views, not images. New Extensions: * `VK_EXT_global_priority`
-rw-r--r--ChangeLog.txt60
-rw-r--r--doc/specs/vulkan/Makefile2
-rw-r--r--doc/specs/vulkan/appendices/VK_EXT_global_priority.txt72
-rw-r--r--doc/specs/vulkan/appendices/extensions.txt4
-rw-r--r--doc/specs/vulkan/appendices/spirvenv.txt13
-rw-r--r--doc/specs/vulkan/chapters/VK_KHR_surface/wsi.txt4
-rw-r--r--doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt24
-rw-r--r--doc/specs/vulkan/chapters/cmdbuffers.txt3
-rw-r--r--doc/specs/vulkan/chapters/descriptorsets.txt64
-rw-r--r--doc/specs/vulkan/chapters/devsandqueues.txt74
-rw-r--r--doc/specs/vulkan/chapters/pipelines.txt8
-rw-r--r--doc/specs/vulkan/chapters/synchronization.txt41
-rw-r--r--doc/specs/vulkan/chapters/textures.txt78
-rw-r--r--doc/specs/vulkan/reflow_count.py2
-rw-r--r--src/spec/vk.xml32
-rw-r--r--src/vulkan/vulkan.h28
16 files changed, 431 insertions, 78 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 898ca81..471ecc4 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,10 +1,62 @@
Update Log for the Vulkan-Docs repository on Github. Updates are in reverse
chronological order starting with the latest public release.
-This summarizes the periodic public updates, not individual commits. For the
-most part, commits on Github are done as single large patches at the release
-point, collecting together the resolution of many Khronos internal and
-public issues.
+This summarizes the periodic public updates, not individual commits. Updates
+on Github are done as single large patches at the release point, collecting
+together the resolution of many Khronos internal issues, along with any
+public pull requests that have been accepted.
+
+-----------------------------------------------------
+
+Change log for October 13, 2017 Vulkan 1.0.63 spec update:
+
+ * Bump API patch number and header version number to 63 for this update.
+
+Github Issues:
+
+ * Add missing valid usage statements for ptext:maxDescriptorSets*,
+ ptext:maxPerStageDescriptorInputAttachments, and
+ ptext:maxPerStageResources to slink:VkPipelineLayoutCreateInfo.txt,
+ flink:VkComputePipelineCreateInfo, and
+ flink:VkGraphicsPipelineCreateInfo (public issue 546).
+ * Fix typos in ftext:vkCmdDraw*AMD descriptions (public pull request 549).
+ * Fixed flink:vkCmdWriteTimestamp so it is not unnecessarily restricted to
+ queues supporting graphics or compute operations (public issue 558).
+ * Improvements to valid usage generator for output `*Flags` pointer
+ parameters and for some `void *` parameters (public pull requests 560,
+ 562).
+ * Document `altlen` attribute in XML schema as valid C99 syntax and tweak
+ `vk.xml` to match (public pull request 566).
+ * Clarify when pname:fence is signaled by flink:vkQueueSubmit in a more
+ obvious place (public issue 577).
+
+Internal Issues:
+
+ * Specify a whitelist of supported SPIR-V Storage Classes in the
+ <<spirvenv-module-validation, Validation Rules within a Module>>
+ appendix (internal SPIR-V issue 166).
+ * Relax the shared semaphore wait timeout requirement in the
+ <<synchronization-semaphores-importing, Importing Semaphore Payloads>>
+ section (internal issue 820).
+ * Update the <<textures-image-level-selection, Image Level(s) Selection>>
+ equations so that the parameters returned by the level-of-detail query
+ appear explicitly, also fixing the issue that linear filtering would
+ select a level below the base level for magnification (internal issue
+ 926).
+ * Disallow creation of a swapchain with zero pname:imageExtent in
+ slink:VkSurfaceCapabilitiesKHR and slink:VkSwapchainCreateInfoKHR
+ (internal issue 1020).
+
+Other Issues:
+
+ * Clarify in <<textures-operation-validation,Image View Validation>> that
+ the layout of subresources in an image view must have a layout that
+ matches that written into the descriptor, and that this section is about
+ validating image views, not images.
+
+New Extensions:
+
+ * `VK_EXT_global_priority`
-----------------------------------------------------
diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile
index a23df3e..192493d 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.62
+SPECREVISION = 1.0.63
# Spell out RFC2822 format as not all date commands support -R
SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`)
diff --git a/doc/specs/vulkan/appendices/VK_EXT_global_priority.txt b/doc/specs/vulkan/appendices/VK_EXT_global_priority.txt
new file mode 100644
index 0000000..af41291
--- /dev/null
+++ b/doc/specs/vulkan/appendices/VK_EXT_global_priority.txt
@@ -0,0 +1,72 @@
+include::meta/VK_EXT_global_priority.txt[]
+
+*Last Modified Date*::
+ 2017-10-06
+*IP Status*::
+ No known IP claims.
+*Contributors*::
+ - Andres Rodriguez, Valve
+ - Pierre-Loup Griffais, Valve
+ - Dan Ginsburg, Valve
+ - Mitch Singer, AMD
+
+In Vulkan, users can specify device-scope queue priorities.
+In some cases it may be useful to extend this concept to a system-wide
+scope.
+This extension provides a mechanism for caller's to set their system-wide
+priority.
+The default queue priority is elink:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM.
+
+The driver implementation will attempt to skew hardware resource allocation
+in favour of the higher-priority task.
+Therefore, higher-priority work may retain similar latency and throughput
+characteristics even if the system is congested with lower priority work.
+
+The global priority level of a queue shall take predence over the
+per-process queue priority
+(sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
+
+Abuse of this feature may result in starving the rest of the system from
+hardware resources.
+Therefore, the driver implementation may deny requests to acquire a priority
+above the default priority (elink:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM) if the
+caller does not have sufficient privileges.
+In this scenario elink:VK_ERROR_NOT_PERMITTED_EXT is returned.
+
+The driver implementation may fail the queue allocation request if resources
+required to complete the operation have been exhausted (either by the same
+process or a different process).
+In this scenario elink:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+=== New Object Types
+
+None.
+
+=== New Enum Constants
+
+ * Extending elink:VkStructureType:
+ ** elink:VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT
+
+ * Extending elink:VkResult:
+ ** elink:VK_ERROR_NOT_PERMITTED_EXT
+
+=== New Enums
+
+ * elink:VkQueueGlobalPriorityEXT
+
+=== New Structures
+
+ * slink:VkDeviceQueueGlobalPriorityCreateInfoEXT
+
+=== New Functions
+
+None.
+
+=== Issues
+
+None.
+
+=== Version History
+
+ * Revision 1, 2017-10-06 (Andres Rodriguez)
+ - First version.
diff --git a/doc/specs/vulkan/appendices/extensions.txt b/doc/specs/vulkan/appendices/extensions.txt
index 42cea16..59549bf 100644
--- a/doc/specs/vulkan/appendices/extensions.txt
+++ b/doc/specs/vulkan/appendices/extensions.txt
@@ -284,6 +284,10 @@ ifdef::VK_EXT_display_surface_counter[]
include::VK_EXT_display_surface_counter.txt[]
endif::VK_EXT_display_surface_counter[]
+ifdef::VK_EXT_global_priority[]
+include::VK_EXT_global_priority.txt[]
+endif::VK_EXT_global_priority[]
+
ifdef::VK_EXT_hdr_metadata[]
include::VK_EXT_hdr_metadata.txt[]
endif::VK_EXT_hdr_metadata[]
diff --git a/doc/specs/vulkan/appendices/spirvenv.txt b/doc/specs/vulkan/appendices/spirvenv.txt
index d0a1b3b..c96d57e 100644
--- a/doc/specs/vulkan/appendices/spirvenv.txt
+++ b/doc/specs/vulkan/appendices/spirvenv.txt
@@ -283,6 +283,19 @@ following rules:
** *Device*
** *Workgroup*
** *Invocation*
+ * *Storage Class* must: be limited to:
+ ** *UniformConstant*
+ ** *Input*
+ ** *Uniform*
+ ** *Output*
+ ** *Workgroup*
+ ** *Private*
+ ** *Function*
+ ** *PushConstant*
+ ** *Image*
+ifdef::VK_KHR_storage_buffer_storage_class[]
+ ** *StorageBuffer*
+endif::VK_KHR_storage_buffer_storage_class[]
* Variables declared in the *UniformConstant* storage class must: not have
initializers.
* The code:OriginLowerLeft execution mode must: not be used; fragment
diff --git a/doc/specs/vulkan/chapters/VK_KHR_surface/wsi.txt b/doc/specs/vulkan/chapters/VK_KHR_surface/wsi.txt
index e679f00..9e99611 100644
--- a/doc/specs/vulkan/chapters/VK_KHR_surface/wsi.txt
+++ b/doc/specs/vulkan/chapters/VK_KHR_surface/wsi.txt
@@ -290,10 +290,6 @@ include::../../api/structs/VkSurfaceCapabilitiesKHR.txt[]
the surface.
* pname:minImageExtent contains the smallest valid swapchain extent for
the surface on the specified device.
- The pname:width and pname:height of the extent will each be less than or
- equal to the corresponding pname:width and pname:height of
- pname:currentExtent, unless pname:currentExtent has the special value
- described above.
* pname:maxImageExtent contains the largest valid swapchain extent for the
surface on the specified device.
The pname:width and pname:height of the extent will each be greater than
diff --git a/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt b/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt
index a06e9cf..b61c440 100644
--- a/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt
+++ b/doc/specs/vulkan/chapters/VK_KHR_swapchain/wsi.txt
@@ -121,10 +121,29 @@ include::../../api/structs/VkSwapchainCreateInfoKHR.txt[]
the specified surface.
* pname:imageColorSpace is a slink:VkColorSpaceKHR that is valid for
swapchains on the specified surface.
- * pname:imageExtent is the size (in pixels) of the swapchain.
+ * pname:imageExtent is the non-zero size (in pixels) of the swapchain.
Behavior is platform-dependent when the image extent does not match the
surface's pname:currentExtent as returned by
fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
+
+[NOTE]
+.Note
+====
+On some platforms, flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR can
+return in slink:VkSurfaceCapabilitiesKHR a pname:currentExtent that has a
+pname:width and/or pname:height equal to zero.
+This can happen, e.g., while a native window object is minimized.
+In this situation, the native window object may have to be restored from the
+minimized state before a sname:VkSwapchainKHR can be created, because:
+
+ * The pname:minImageExtent and pname:maxImageExtent values returned by
+ flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR may match the
+ pname:currentExtent.
+ * On some platforms, the pname:imageExtent member of
+ sname:VkSwapchainCreateInfoKHR must match the pname:currentExtent
+ returned by flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
+====
+
* pname:imageArrayLayers is the number of views in a multiview/stereo
surface.
For non-stereoscopic-3D applications, this value is 1.
@@ -246,6 +265,9 @@ endif::VK_KHR_shared_presentable_image[]
pname:maxImageExtent are members of the sname:VkSurfaceCapabilitiesKHR
structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
for the surface
+ * [[VUID-VkSwapchainCreateInfoKHR-imageExtent-01689]]
+ pname:imageExtent members pname:width and pname:height must: both be
+ non-zero
* [[VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275]]
pname:imageArrayLayers must: be greater than `0` and less than or equal
to the pname:maxImageArrayLayers member of the
diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt
index 2968842..f4bdf6f 100644
--- a/doc/specs/vulkan/chapters/cmdbuffers.txt
+++ b/doc/specs/vulkan/chapters/cmdbuffers.txt
@@ -784,7 +784,8 @@ include::../api/protos/vkQueueSubmit.txt[]
* pname:submitCount is the number of elements in the pname:pSubmits array.
* pname:pSubmits is a pointer to an array of slink:VkSubmitInfo
structures, each specifying a command buffer submission batch.
- * pname:fence is an optional handle to a fence to be signaled.
+ * pname:fence is an optional handle to a fence to be signaled once all
+ submitted command buffers have completed execution.
If pname:fence is not dlink:VK_NULL_HANDLE, it defines a
<<synchronization-fences-signaling, fence signal operation>>.
diff --git a/doc/specs/vulkan/chapters/descriptorsets.txt b/doc/specs/vulkan/chapters/descriptorsets.txt
index 1e60aa4..0457e75 100644
--- a/doc/specs/vulkan/chapters/descriptorsets.txt
+++ b/doc/specs/vulkan/chapters/descriptorsets.txt
@@ -1043,6 +1043,64 @@ pipelines that is expected to outperform memory-backed resource updates.
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01676]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader
+ stage across all elements of pname:pSetLayouts must: be less than or
+ equal to
+ sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorInputAttachments
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01677]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+ ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
+ shader stages and across all elements of pname:pSetLayouts must: be less
+ than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSamplers
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01678]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader
+ stagess and and across all elements of pname:pSetLayouts must: be less
+ than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01679]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
+ shader stages and across all elements of pname:pSetLayouts must: be less
+ than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffersDynamic
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01680]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader
+ stages and across all elements of pname:pSetLayouts must: be less than
+ or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffers
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01681]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
+ shader stages and across all elements of pname:pSetLayouts must: be less
+ than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffersDynamic
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01682]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+ ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
+ ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
+ shader stages and across all elements of pname:pSetLayouts must: be less
+ than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSampledImages
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01683]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
+ ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
+ shader stages and across all elements of pname:pSetLayouts must: be less
+ than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageImages
+ * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01684]]
+ The total number of descriptors of the type
+ ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader
+ stages and across all elements of pname:pSetLayouts must: be less than
+ or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
* [[VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292]]
Any two elements of pname:pPushConstantRanges must: not include the same
stage in pname:stageFlags
@@ -2375,7 +2433,8 @@ include::../api/protos/vkUpdateDescriptorSetWithTemplateKHR.txt[]
.Valid Usage
****
- * pname:pData must: be a pointer to a memory that contains one or more
+ * [[VUID-vkUpdateDescriptorSetWithTemplateKHR-pData-01685]]
+ pname:pData must: be a pointer to a memory that contains one or more
valid instances of slink:VkDescriptorImageInfo,
slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
by pname:descriptorUpdateTemplate when it was created with
@@ -2708,7 +2767,8 @@ include::../api/protos/vkCmdPushDescriptorSetWithTemplateKHR.txt[]
The pipelineBindPoint specified during the creation of the descriptor
update template must: be supported by the pname:commandBuffer's parent
sname:VkCommandPool's queue family
- * pname:pData must: be a pointer to a memory that contains one or more
+ * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686]]
+ pname:pData must: be a pointer to a memory that contains one or more
valid instances of slink:VkDescriptorImageInfo,
slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
by pname:descriptorUpdateTemplate when it was created with
diff --git a/doc/specs/vulkan/chapters/devsandqueues.txt b/doc/specs/vulkan/chapters/devsandqueues.txt
index 2de6c42..91436fe 100644
--- a/doc/specs/vulkan/chapters/devsandqueues.txt
+++ b/doc/specs/vulkan/chapters/devsandqueues.txt
@@ -1075,6 +1075,80 @@ include::../api/structs/VkDeviceQueueCreateInfo.txt[]
include::../validity/structs/VkDeviceQueueCreateInfo.txt[]
--
+ifdef::VK_EXT_global_priority[]
+
+[open,refpage='VkDeviceQueueGlobalPriorityCreateInfoEXT',desc='Specify a system wide priority',type='structs']
+--
+
+A queue can: be created with a system-wide priority by including a
+sname:VkDeviceQueueGlobalPriorityCreateInfoEXT structure in the pname:pNext
+chain of slink:VkDeviceQueueCreateInfo.
+
+The sname:VkDeviceQueueGlobalPriorityCreateInfoEXT structure is defined as:
+
+include::../api/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.txt[]
+
+ * pname:sType is the type of this structure.
+ * pname:pNext is `NULL` or a pointer to an extension-specific structure.
+ * pname:globalPriority is the system-wide priority associated to this
+ queue as specified by elink:VkQueueGlobalPriorityEXT
+
+A queue created without specifying
+sname:VkDeviceQueueGlobalPriorityCreateInfoEXT will default to
+ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM.
+
+include::../validity/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkQueueGlobalPriorityEXT',desc='Values specifying a system-wide queue priority',type='enums']
+--
+
+Possible values of
+slink:VkDeviceQueueGlobalPriorityCreateInfoEXT::pname:globalPriority,
+specifying a system-wide priority level are:
+
+include::../api/enums/VkQueueGlobalPriorityEXT.txt[]
+
+Priority values are sorted in ascending order.
+A comparison operation on the enum values can be used to determine the
+priority order.
+
+ * ename:VK_QUEUE_GLOBAL_PRIORITY_LOW is below the system default.
+ Useful for non-interactive tasks.
+ * ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM is the system default priority.
+ * ename:VK_QUEUE_GLOBAL_PRIORITY_HIGH is above the system default.
+ * ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME is the highest priority.
+ Useful for critical tasks.
+--
+
+Queues with higher system priority may: be allotted more processing time
+than queues with lower priority.
+An implementation may: allow a higher-priority queue to starve a
+lower-priority queue until the higher-priority queue has no further commands
+to execute.
+
+Priorities imply no ordering or scheduling constraints.
+
+No specific guarantees are made about higher priority queues receiving more
+processing time or better quality of service than lower priority queues.
+
+The global priority level of a queue takes precedence over the per-process
+queue priority (sname:VkDeviceQueueCreateInfo::pname:pQueuePriorities).
+
+Abuse of this feature may result in starving the rest of the system from
+hardware resources.
+Therefore, the driver implementation may: deny requests to acquire a
+priority above the default priority (elink:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM)
+if the caller does not have sufficient privileges.
+In this scenario elink:VK_ERROR_NOT_PERMITTED_EXT is returned.
+
+The driver implementation may: fail the queue allocation request if
+resources required to complete the operation have been exhausted (either by
+the same process or a different process).
+In this scenario elink:VK_ERROR_INITIALIZATION_FAILED is returned.
+
+endif::VK_EXT_global_priority[]
+
[open,refpage='vkGetDeviceQueue',desc='Get a queue handle from a device',type='protos']
--
diff --git a/doc/specs/vulkan/chapters/pipelines.txt b/doc/specs/vulkan/chapters/pipelines.txt
index 5d8978b..d33f0ba 100644
--- a/doc/specs/vulkan/chapters/pipelines.txt
+++ b/doc/specs/vulkan/chapters/pipelines.txt
@@ -213,6 +213,10 @@ sname:VkPipelineShaderStageCreateInfo.
pname:layout must: be
<<descriptorsets-pipelinelayout-consistency,consistent>> with the layout
of the compute shader specified in pname:stage
+ * [[VUID-VkComputePipelineCreateInfo-layout-01687]]
+ The number of resources in pname:layout accessible to the compute shader
+ stage must: be less than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
****
include::../validity/structs/VkComputePipelineCreateInfo.txt[]
@@ -763,6 +767,10 @@ ifdef::VK_KHR_maintenance2[]
specified in the pname:aspectMask of the corresponding
slink:VkInputAttachmentAspectReferenceKHR structure.
endif::VK_KHR_maintenance2[]
+ * [[VUID-VkGraphicsPipelineCreateInfo-layout-01688]]
+ The number of resources in pname:layout accessible to each shader stage
+ that is used by the pipeline must: be less than or equal to
+ sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
****
include::../validity/structs/VkGraphicsPipelineCreateInfo.txt[]
diff --git a/doc/specs/vulkan/chapters/synchronization.txt b/doc/specs/vulkan/chapters/synchronization.txt
index 511c04d..fd120cb 100644
--- a/doc/specs/vulkan/chapters/synchronization.txt
+++ b/doc/specs/vulkan/chapters/synchronization.txt
@@ -2396,23 +2396,28 @@ state requirements>> would similarly require impractical coordination or
levels of trust between processes.
Therefore, these constraints only apply to a specific semaphore handle, not
to its payload.
-For distinct semaphore objects which share a payload:
-
-* If the semaphores are passed to multiple queue submission commands
-concurrently, behavior will be as if the commands were called in an
-arbitrary sequential order.
-* If the <<synchronization-semaphores-waiting-state,wait operation state
-requirements>> are violated for the payload by a queue submission command,
-or if a signal operation is queued for a payload that is already signaled or
-has a pending signal operation, the command may: return
-ename:VK_ERROR_INITIALIZATION_FAILED, the queue's device may: be lost
-immediately or later, or the wait operation or future wait operations on the
-payload may: complete immediately when executed or when any one of the queue
-signal operations completes.
-
-However, a wait operation on a semaphore sharing the payload must: not
-continue to wait after the last signal operation queued for the payload
-completes.
+For distinct semaphore objects which share a payload, if the semaphores are
+passed to separate queue submission commands concurrently, behavior will be
+as if the commands were called in an arbitrary sequential order.
+If the <<synchronization-semaphores-waiting-state,wait operation state
+requirements>> are violated for the shared payload by a queue submission
+command, or if a signal operation is queued for a shared payload that is
+already signaled or has a pending signal operation, effects must: be limited
+to one or more of the following:
+
+ * Returning ename:VK_ERROR_INITIALIZATION_FAILED from the command which
+ resulted in the violation.
+ * Losing the logical device on which the violation occured immediately or
+ at a future time, resulting in a ename:VK_ERROR_DEVICE_LOST error from
+ subsequent commands, including the one causing the violation.
+ * Continuing execution of the violating command or operation as if the
+ semaphore wait completed successfully after an implementation-dependent
+ timeout.
+ In this case, the state of the payload becomes undefined, and future
+ operations on semaphores sharing the payload will be subject to these
+ same rules.
+ The semaphore must: be destroyed or have its payload replaced by an
+ import operation to again have a well-defined state.
[NOTE]
.Note
@@ -2421,7 +2426,7 @@ These rules allow processes to synchronize access to shared memory without
trusting each other.
However, such processes must still be cautious not to use the shared
semaphore for more than synchronizing access to the shared memory.
-For example, a process should not use a shared semaphore as part of a
+For example, a process should not use a shared semaphore as part of an
execution dependency chain that, when complete, leads to objects being
destroyed, if it does not trust other processes sharing the semaphore
payload.
diff --git a/doc/specs/vulkan/chapters/textures.txt b/doc/specs/vulkan/chapters/textures.txt
index 804cd18..661a576 100644
--- a/doc/specs/vulkan/chapters/textures.txt
+++ b/doc/specs/vulkan/chapters/textures.txt
@@ -356,26 +356,31 @@ There are a series of validations that the texel undergoes.
[[textures-operation-validation]]
-==== Instruction/Sampler/Image Validation
+==== Instruction/Sampler/Image View Validation
There are a number of cases where a SPIR-V instruction can: mismatch with
-the sampler, the image, or both.
-There are a number of cases where the sampler can: mismatch with the image.
+the sampler, the image view, or both.
+There are a number of cases where the sampler can: mismatch with the image
+view.
In such cases the value of the texel returned is undefined.
These cases include:
- * The sampler pname:borderColor is an integer type and the image
+
+ * The sampler pname:borderColor is an integer type and the image view
pname:format is not one of the elink:VkFormat integer types or a stencil
component of a depth/stencil format.
- * The sampler pname:borderColor is a float type and the image pname:format
- is not one of the elink:VkFormat float types or a depth component of a
- depth/stencil format.
+ * The sampler pname:borderColor is a float type and the image view
+ pname:format is not one of the elink:VkFormat float types or a depth
+ component of a depth/stencil format.
* The sampler pname:borderColor is one of the opaque black colors
(ename:VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK or
- ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK) and the image
+ ename:VK_BORDER_COLOR_INT_OPAQUE_BLACK) and the image view
elink:VkComponentSwizzle for any of the slink:VkComponentMapping
components is not ename:VK_COMPONENT_SWIZZLE_IDENTITY.
+ * The elink:VkImageLayout of any subresource in the image view does not
+ match that specified in slink:VkDescriptorImageInfo::pname:imageLayout
+ used to write the image descriptor.
* If the instruction is code:OpImageRead or code:OpImageSparseRead and the
pname:shaderStorageImageReadWithoutFormat feature is not enabled, or the
instruction is code:OpImageWrite and the
@@ -390,9 +395,9 @@ These cases include:
* The SPIR-V instruction is not one of the code:OpImage*code:Dref*
instructions and the sampler pname:compareEnable is ename:VK_TRUE
* The SPIR-V instruction is one of the code:OpImage*code:Dref*
- instructions and the image pname:format is not one of the depth/stencil
- formats with a depth component, or the image aspect is not
- ename:VK_IMAGE_ASPECT_DEPTH_BIT.
+ instructions and the image view pname:format is not one of the
+ depth/stencil formats with a depth component, or the image view aspect
+ is not ename:VK_IMAGE_ASPECT_DEPTH_BIT.
* The SPIR-V instruction's image variable's properties are not compatible
with the image view:
** Rules for pname:viewType:
@@ -1561,6 +1566,9 @@ endif::editing-notes[]
Level-of-detail selection can: be either explicit (provided explicitly by
the image instruction) or implicit (determined from a scale factor
calculated from the derivatives).
+The implicit level of detail selected can: be queried using the SPIR-V
+instruction code:OpImageQueryLod, which gives access to the [eq]#{lambda}#'
+and [eq]#d~l~# values, defined below.
[[textures-scale-factor]]
@@ -1744,22 +1752,16 @@ feature <<features-limits-maxSamplerLodBias,pname:maxSamplerLodBias>>.
==== Image Level(s) Selection
The image level(s) [eq]#d#, [eq]#d~hi~#, and [eq]#d~lo~# which texels are
-read from are selected based on the level-of-detail parameter, as follows.
-If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_NEAREST,
-then level [eq]#d# is used:
+read from are determined by an image-level parameter [eq]#d~l~#, which is
+computed based on the level-of-detail parameter, as follows:
-// The [.5em] extra spacing works around KaTeX github issue #603
[latexmath]
++++++++++++++++++++++++
\begin{aligned}
-d =
+d_{l} =
\begin{cases}
- level_{base}, & \lambda \leq 0 \\[.5em]
- nearest(\lambda), & \lambda > 0,
- level_{base} + \lambda \leq
- q + 0.5 \\[.5em]
- q, & \lambda > 0,
- level_{base} + \lambda > q + 0.5
+ nearest(d'), & \text{mipmapMode is VK_SAMPLER_MIPMAP_MODE_NEAREST} \\
+ d', & \text{otherwise}
\end{cases}
\end{aligned}
++++++++++++++++++++++++
@@ -1769,11 +1771,18 @@ where:
[latexmath]
++++++++++++++++++++++++
\begin{aligned}
-nearest(\lambda) & =
+d' = level_{base} + \text{clamp}(\lambda, 0, q)
+\end{aligned}
+++++++++++++++++++++++++
+
+[latexmath]
+++++++++++++++++++++++++
+\begin{aligned}
+nearest(d') & =
\begin{cases}
- \left \lceil level_{base}+\lambda + 0.5\right \rceil - 1, &
+ \left \lceil d' + 0.5\right \rceil - 1, &
\text{preferred} \\
- \left \lfloor level_{base}+\lambda + 0.5\right \rfloor, &
+ \left \lfloor d' + 0.5\right \rfloor, &
\text{alternative}
\end{cases}
\end{aligned}
@@ -1782,28 +1791,23 @@ nearest(\lambda) & =
and
:: [eq]#level~base~ = pname:baseMipLevel#
- :: [eq]#q = level~base~ + pname:levelCount - 1#
+ :: [eq]#q = pname:levelCount - 1#
pname:baseMipLevel and pname:levelCount are taken from the
pname:subresourceRange of the image view.
+If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_NEAREST,
+then the level selected is [eq]#d = d~l~#.
+
If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_LINEAR,
two neighboring levels are selected:
[latexmath]
++++++++++++++++++++++++
\begin{aligned}
-d_{hi} & =
- \begin{cases}
- q, & level_{base} + \lambda \geq q \\
- \left \lfloor level_{base}+\lambda \right \rfloor, & \text{otherwise}
- \end{cases} \\
-d_{lo} & =
- \begin{cases}
- q, & level_{base} + \lambda \geq q \\
- d_{hi}+1, & \text{otherwise}
- \end{cases} \\
-\delta & = \lambda - \lfloor\lambda\rfloor
+d_{hi} & = \lfloor d_{l} \rfloor \\
+d_{lo} & = min( d_{hi} + 1, q ) \\
+\delta & = d_{l} - d_{hi}
\end{aligned}
++++++++++++++++++++++++
diff --git a/doc/specs/vulkan/reflow_count.py b/doc/specs/vulkan/reflow_count.py
index e317491..5461e6d 100644
--- a/doc/specs/vulkan/reflow_count.py
+++ b/doc/specs/vulkan/reflow_count.py
@@ -1,2 +1,2 @@
# The value to start tagging VU statements at, unless overridden by -nextvu
-startVUID = 1676
+startVUID = 1690
diff --git a/src/spec/vk.xml b/src/spec/vk.xml
index da6816d..88e0997 100644
--- a/src/spec/vk.xml
+++ b/src/spec/vk.xml
@@ -107,7 +107,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="define">// Vulkan 1.0 version number
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file
-#define <name>VK_HEADER_VERSION</name> 62</type>
+#define <name>VK_HEADER_VERSION</name> 63</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@@ -386,6 +386,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type name="VkPointClippingBehaviorKHR" category="enum"/>
<type name="VkCoverageModulationModeNV" category="enum"/>
<type name="VkValidationCacheHeaderVersionEXT" category="enum"/>
+ <type name="VkQueueGlobalPriorityEXT" category="enum"/>
<comment>WSI extensions</comment>
<type name="VkColorSpaceKHR" category="enum"/>
@@ -2623,6 +2624,11 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<member><type>int</type> <name>format</name></member>
<member><type>int</type> <name>usage</name></member>
</type>
+ <type category="struct" name="VkDeviceQueueGlobalPriorityCreateInfoEXT" structextends="VkDeviceQueueCreateInfo">
+ <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+ <member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
+ <member><type>VkQueueGlobalPriorityEXT</type> <name>globalPriority</name></member>
+ </type>
</types>
<comment>Vulkan enumerant (token) definitions</comment>
@@ -3649,6 +3655,12 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enums name="VkValidationCacheHeaderVersionEXT" type="enum">
<enum value="1" name="VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT"/>
</enums>
+ <enums name="VkQueueGlobalPriorityEXT" type="enum">
+ <enum value="128" name="VK_QUEUE_GLOBAL_PRIORITY_LOW"/>
+ <enum value="256" name="VK_QUEUE_GLOBAL_PRIORITY_MEDIUM"/>
+ <enum value="512" name="VK_QUEUE_GLOBAL_PRIORITY_HIGH"/>
+ <enum value="1024" name="VK_QUEUE_GLOBAL_PRIORITY_REALTIME"/>
+ </enums>
<commands comment="Vulkan command definitions">
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_LAYER_NOT_PRESENT,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INCOMPATIBLE_DRIVER">
@@ -4549,7 +4561,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<param><type>uint32_t</type> <name>firstQuery</name></param>
<param><type>uint32_t</type> <name>queryCount</name></param>
</command>
- <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" pipeline="transfer">
+ <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" pipeline="transfer">
<proto><type>void</type> <name>vkCmdWriteTimestamp</name></proto>
<param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
<param><type>VkPipelineStageFlagBits</type> <name>pipelineStage</name></param>
@@ -7371,12 +7383,16 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enum value="&quot;VK_QCOM_extension_174&quot;" name="VK_QCOM_extension_174_EXTENSION_NAME"/>
</require>
</extension>
- <extension name="VK_EXT_extension_175" number="175" author="EXT" contact="Andres Rodriguez @lostgoat" supported="disabled">
- <require>
- <enum value="0" name="VK_KHR_EXTENSION_175_SPEC_VERSION"/>
- <enum value="&quot;VK_KHR_extension_175&quot;" name="VK_KHR_EXTENSION_175_EXTENSION_NAME"/>
- </require>
- </extension>
+ <extension name="VK_EXT_global_priority" number="175" type="device" author="EXT" contact="Andres Rodriguez @lostgoat" supported="vulkan">
+ <require>
+ <enum value="1" name="VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION"/>
+ <enum value="&quot;VK_EXT_global_priority&quot;" name="VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME"/>
+ <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"/>
+ <enum offset="1" dir="-" extends="VkResult" name="VK_ERROR_NOT_PERMITTED_EXT"/>
+ <type name="VkDeviceQueueGlobalPriorityCreateInfoEXT"/>
+ <type name="VkQueueGlobalPriorityEXT"/>
+ </require>
+ </extension>
<extension name="VK_EXT_extension_176" number="176" author="EXT" contact="Neil Henning @neil_henning" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_176_SPEC_VERSION"/>
diff --git a/src/vulkan/vulkan.h b/src/vulkan/vulkan.h
index 4cf2c21..e1398c6 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 62
+#define VK_HEADER_VERSION 63
#define VK_NULL_HANDLE 0
@@ -147,6 +147,7 @@ typedef enum VkResult {
VK_ERROR_INVALID_SHADER_NV = -1000012000,
VK_ERROR_OUT_OF_POOL_MEMORY_KHR = -1000069000,
VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = -1000072003,
+ VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
VK_RESULT_END_RANGE = VK_INCOMPLETE,
VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
@@ -353,6 +354,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = 1000157001,
VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
@@ -6858,6 +6860,30 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT(
#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer"
+#define VK_EXT_global_priority 1
+#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 1
+#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
+
+
+typedef enum VkQueueGlobalPriorityEXT {
+ VK_QUEUE_GLOBAL_PRIORITY_LOW = 128,
+ VK_QUEUE_GLOBAL_PRIORITY_MEDIUM = 256,
+ VK_QUEUE_GLOBAL_PRIORITY_HIGH = 512,
+ VK_QUEUE_GLOBAL_PRIORITY_REALTIME = 1024,
+ VK_QUEUE_GLOBAL_PRIORITY_BEGIN_RANGE_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW,
+ VK_QUEUE_GLOBAL_PRIORITY_END_RANGE_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME,
+ VK_QUEUE_GLOBAL_PRIORITY_RANGE_SIZE_EXT = (VK_QUEUE_GLOBAL_PRIORITY_REALTIME - VK_QUEUE_GLOBAL_PRIORITY_LOW + 1),
+ VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkQueueGlobalPriorityEXT;
+
+typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkQueueGlobalPriorityEXT globalPriority;
+} VkDeviceQueueGlobalPriorityCreateInfoEXT;
+
+
+
#ifdef __cplusplus
}
#endif