diff options
author | Jon Leech <oddhack@sonic.net> | 2024-02-16 02:10:34 -0800 |
---|---|---|
committer | Jon Leech <oddhack@sonic.net> | 2024-02-16 02:10:34 -0800 |
commit | 2e3aca8d6a3a6d52a9d904d0511a1c5e57a09e0f (patch) | |
tree | 364aacd34f5e7164fae8228dbb0a3802c74b97f3 | |
parent | 0c355559d6ca3d92edbaafb27347b0cbe34f3b2f (diff) | |
download | gfxstream-protocols-2e3aca8d6a3a6d52a9d904d0511a1c5e57a09e0f.tar.gz |
Change log for February 16, 2024 Vulkan 1.3.278 spec update:
Public Issues
* Restore orphaned vkQueuePresentKHR text to proper locations (public
issue 2008).
* Make ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT into a typo alias of
ename:VK_INCOMPATIBLE_SHADER_BINARY_EXT, since this is actually a
success code, not an error code (public issue 2295).
Internal Issues
* Remove VK_INCOMPLETE success code in
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, and tag
pMaxWorkgroupSize as a pointer to a single returned structure, not an
array (internal issue 3715).
* Add missing `len` XML attributes for structure <member> tags which are
static arrays, but may not use the entire array (internal issue 3743).
* Fix VkPhysicalDeviceSurfaceInfo2KHR::surface VU 07919 and set
`noautovalidity` on corresponding XML member (internal MR 6429).
* Move sections in generated extension appendices down one heading level
in spec body (internal MR 6436).
* Remove `returnedonly` XML attribute from VkPhysicalDeviceSurfaceInfo2KHR
(internal MR 6436).
* Add `returnedonly` XML attribute to VkLatencyTimingsFrameReportNV
(internal MR 6463) and slink:VkPerformanceValueINTEL (internal MR 6461).
* Fix typo in vkCopyAccelerationStructureKHR VU 03728 (internal MR 6457).
* Remove invalid subpassLoadMS operation from description of
vkCmdSubpassShadingHUAWEI (internal MR 6454).
* Remove "`equal to`" clause from VU 09515 (internal MR 6458).
* Rearrange some function markup and add missing parameter descriptions
for vkCmdSetPerformanceStreamMarkerINTEL (internal issue 3785).
* Remove non-sensical VkGraphicsPipelineCreateInfo VUs 07717 and 07719
(internal MR 6468).
* Fix various 'a'/'an' typos (internal MR 6470).
New Extensions
* VK_EXT_map_memory_placed
* VK_NV_shader_atomic_float16_vector
58 files changed, 731 insertions, 502 deletions
@@ -4,4 +4,6 @@ Faith Ekstrand <faith.ekstrand@collabora.com> <jason@jlekstrand.net> Faith Ekstrand <faith.ekstrand@collabora.com> <jason.ekstrand@intel.com> Faith Ekstrand <faith.ekstrand@collabora.com> <jason.ekstrand@collabora.com> +Lina Versace <linyaa@google.com> <chad.versace@intel.com> +Lina Versace <linyaa@google.com> <chadversary@google.com> Rylie Pavlik <rylie.pavlik@collabora.com> <ryan.pavlik@collabora.com> diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 769918f9..61cbaac0 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -14,6 +14,49 @@ appears frequently in the change log. ----------------------------------------------------- +Change log for February 16, 2024 Vulkan 1.3.278 spec update: + +Public Issues + + * Restore orphaned vkQueuePresentKHR text to proper locations (public + issue 2008). + * Make ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT into a typo alias of + ename:VK_INCOMPATIBLE_SHADER_BINARY_EXT, since this is actually a + success code, not an error code (public issue 2295). + +Internal Issues + + * Remove VK_INCOMPLETE success code in + vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, and tag + pMaxWorkgroupSize as a pointer to a single returned structure, not an + array (internal issue 3715). + * Add missing `len` XML attributes for structure <member> tags which are + static arrays, but may not use the entire array (internal issue 3743). + * Fix VkPhysicalDeviceSurfaceInfo2KHR::surface VU 07919 and set + `noautovalidity` on corresponding XML member (internal MR 6429). + * Move sections in generated extension appendices down one heading level + in spec body (internal MR 6436). + * Remove `returnedonly` XML attribute from VkPhysicalDeviceSurfaceInfo2KHR + (internal MR 6436). + * Add `returnedonly` XML attribute to VkLatencyTimingsFrameReportNV + (internal MR 6463) and slink:VkPerformanceValueINTEL (internal MR 6461). + * Fix typo in vkCopyAccelerationStructureKHR VU 03728 (internal MR 6457). + * Remove invalid subpassLoadMS operation from description of + vkCmdSubpassShadingHUAWEI (internal MR 6454). + * Remove "`equal to`" clause from VU 09515 (internal MR 6458). + * Rearrange some function markup and add missing parameter descriptions + for vkCmdSetPerformanceStreamMarkerINTEL (internal issue 3785). + * Remove non-sensical VkGraphicsPipelineCreateInfo VUs 07717 and 07719 + (internal MR 6468). + * Fix various 'a'/'an' typos (internal MR 6470). + +New Extensions + + * VK_EXT_map_memory_placed + * VK_NV_shader_atomic_float16_vector + +----------------------------------------------------- + Change log for February 1, 2024 Vulkan 1.3.277 spec update: Internal Issues @@ -137,7 +137,7 @@ VERBOSE = # ADOCOPTS options for asciidoc->HTML5 output NOTEOPTS = -a editing-notes -a implementation-guide -PATCHVERSION = 277 +PATCHVERSION = 278 BASEOPTS = ifneq (,$(findstring VKSC_VERSION_1_0,$(VERSIONS))) diff --git a/appendices/VK_EXT_map_memory_placed.adoc b/appendices/VK_EXT_map_memory_placed.adoc index 5108d732..27cb5fc1 100644 --- a/appendices/VK_EXT_map_memory_placed.adoc +++ b/appendices/VK_EXT_map_memory_placed.adoc @@ -1,5 +1,4 @@ -// Copyright 2022-2023 The Khronos Group Inc. -// +// Copyright 2022-2024 The Khronos Group Inc. // SPDX-License-Identifier: CC-BY-4.0 include::{generated}/meta/{refprefix}VK_EXT_map_memory_placed.adoc[] @@ -22,8 +21,8 @@ include::{generated}/meta/{refprefix}VK_EXT_map_memory_placed.adoc[] === Description -This extension allows a client to request that flink:vkMapMemory2KHR -attempt to place the memory map at a particular virtual address. +This extension allows a client to request that flink:vkMapMemory2KHR attempt +to place the memory map at a particular virtual address. include::{generated}/interfaces/VK_EXT_map_memory_placed.adoc[] diff --git a/appendices/VK_EXT_shader_subgroup_ballot.adoc b/appendices/VK_EXT_shader_subgroup_ballot.adoc index 3982a866..38507f9e 100644 --- a/appendices/VK_EXT_shader_subgroup_ballot.adoc +++ b/appendices/VK_EXT_shader_subgroup_ballot.adoc @@ -26,7 +26,7 @@ This extension adds support for the following SPIR-V extension in Vulkan: This extension provides the ability for a group of invocations, which execute in parallel, to do limited forms of cross-invocation communication -via a group broadcast of a invocation value, or broadcast of a bitarray +via a group broadcast of an invocation value, or broadcast of a bit array representing a predicate value from each invocation in the group. This extension provides access to a number of additional built-in shader diff --git a/appendices/VK_INTEL_performance_query.adoc b/appendices/VK_INTEL_performance_query.adoc index b99a4332..595b0a4a 100644 --- a/appendices/VK_INTEL_performance_query.adoc +++ b/appendices/VK_INTEL_performance_query.adoc @@ -17,7 +17,7 @@ include::{generated}/meta/{refprefix}VK_INTEL_performance_query.adoc[] === Description This extension allows an application to capture performance data to be -interpreted by a external application or library. +interpreted by an external application or library. Such a library is available at : https://github.com/intel/metrics-discovery diff --git a/appendices/VK_NV_shader_atomic_float16_vector.adoc b/appendices/VK_NV_shader_atomic_float16_vector.adoc new file mode 100644 index 00000000..f6662082 --- /dev/null +++ b/appendices/VK_NV_shader_atomic_float16_vector.adoc @@ -0,0 +1,39 @@ +// Copyright 2024 The Khronos Group Inc. +// +// SPDX-License-Identifier: CC-BY-4.0 + +include::{generated}/meta/{refprefix}VK_NV_shader_atomic_float16_vector.adoc[] + +=== Other Extension Metadata + +*Last Modified Date*:: + 2024-02-03 +*IP Status*:: + No known IP claims. +*Interactions and External Dependencies*:: + - This extension provides API support for + https://registry.khronos.org/OpenGL/extensions/NV/NV_shader_atomic_fp16_vector.txt[`GL_NV_shader_atomic_fp16_vector`] +*Contributors*:: + - Jeff Bolz, NVIDIA + +=== Description + +This extension allows a shader to perform atomic add, min, max, and exchange +operations on 2- and 4-component vectors of float16. +Buffer, workgroup, and image storage classes are all supported. + +include::{generated}/interfaces/VK_NV_shader_atomic_float16_vector.adoc[] + +=== Issues + +None. + +=== New SPIR-V Capabilities + + * <<spirvenv-capabilities-table-AtomicFloat16VectorNV, + code:AtomicFloat16VectorNV>> + +=== Version History + + * Revision 1, 2024-02-03 (Jeff Bolz) + ** Internal revisions diff --git a/appendices/spirvenv.adoc b/appendices/spirvenv.adoc index b70e155d..4de00148 100644 --- a/appendices/spirvenv.adoc +++ b/appendices/spirvenv.adoc @@ -868,44 +868,7 @@ ifdef::VK_KHR_shader_atomic_int64[] must: be enabled for 64-bit integer atomic operations to be supported on a _Pointer_ with a {StorageClass} of code:Workgroup endif::VK_KHR_shader_atomic_int64[] -ifdef::VK_EXT_shader_atomic_float[] -ifndef::VK_EXT_shader_atomic_float2[] - * [[VUID-{refpage}-None-06280]] - <<features-shaderBufferFloat32Atomics, - pname:shaderBufferFloat32Atomics>>, or - <<features-shaderBufferFloat32AtomicAdd, - pname:shaderBufferFloat32AtomicAdd>>, or - <<features-shaderBufferFloat64Atomics, - pname:shaderBufferFloat64Atomics>>, or - <<features-shaderBufferFloat64AtomicAdd, - pname:shaderBufferFloat64AtomicAdd>> must: be enabled for floating-point - atomic operations to be supported on a _Pointer_ with a {StorageClass} - of code:StorageBuffer - * [[VUID-{refpage}-None-06281]] - <<features-shaderSharedFloat32Atomics, - pname:shaderSharedFloat32Atomics>>, or - <<features-shaderSharedFloat32AtomicAdd, - pname:shaderSharedFloat32AtomicAdd>>, or - <<features-shaderSharedFloat64Atomics, - pname:shaderSharedFloat64Atomics>>, or - <<features-shaderSharedFloat64AtomicAdd, - pname:shaderSharedFloat64AtomicAdd>> must: be enabled for floating-point - atomic operations to be supported on a _Pointer_ with a {StorageClass} - of code:Workgroup - * [[VUID-{refpage}-None-06282]] - <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>> - or <<features-shaderImageFloat32AtomicAdd, - pname:shaderImageFloat32AtomicAdd>> must: be enabled for 32-bit - floating-point atomic operations to be supported on a _Pointer_ with a - {StorageClass} of code:Image - * [[VUID-{refpage}-None-06283]] - <<features-sparseImageFloat32Atomics, pname:sparseImageFloat32Atomics>> - or <<features-sparseImageFloat32AtomicAdd, - pname:sparseImageFloat32AtomicAdd>> must: be enabled for 32-bit - floating-point atomics to be supported on sparse images -endif::VK_EXT_shader_atomic_float2[] -endif::VK_EXT_shader_atomic_float[] -ifdef::VK_EXT_shader_atomic_float2[] +ifdef::VK_EXT_shader_atomic_float,VK_EXT_shader_atomic_float2[] * [[VUID-{refpage}-None-06284]] <<features-shaderBufferFloat32Atomics, pname:shaderBufferFloat32Atomics>>, or @@ -914,8 +877,9 @@ ifdef::VK_EXT_shader_atomic_float2[] <<features-shaderBufferFloat64Atomics, pname:shaderBufferFloat64Atomics>>, or <<features-shaderBufferFloat64AtomicAdd, - pname:shaderBufferFloat64AtomicAdd>>, or - <<features-shaderBufferFloat16AtomicMinMax, + pname:shaderBufferFloat64AtomicAdd>>, +ifdef::VK_EXT_shader_atomic_float2[] + or <<features-shaderBufferFloat16AtomicMinMax, pname:shaderBufferFloat16Atomics>>, or <<features-shaderBufferFloat16AtomicMinMax, pname:shaderBufferFloat16AtomicAdd>>, or @@ -924,9 +888,14 @@ ifdef::VK_EXT_shader_atomic_float2[] <<features-shaderBufferFloat32AtomicMinMax, pname:shaderBufferFloat32AtomicMinMax>>, or <<features-shaderBufferFloat64AtomicMinMax, - pname:shaderBufferFloat64AtomicMinMax>> must: be enabled for - floating-point atomic operations to be supported on a _Pointer_ with a - {StorageClass} of code:StorageBuffer + pname:shaderBufferFloat64AtomicMinMax>>, +endif::VK_EXT_shader_atomic_float2[] +ifdef::VK_NV_shader_atomic_float16_vector[] + or <<features-shaderFloat16VectorAtomics, + pname:shaderFloat16VectorAtomics>> +endif::VK_NV_shader_atomic_float16_vector[] + must: be enabled for floating-point atomic operations to be supported on + a _Pointer_ with a {StorageClass} of code:StorageBuffer * [[VUID-{refpage}-None-06285]] <<features-shaderSharedFloat32Atomics, pname:shaderSharedFloat32Atomics>>, or @@ -935,8 +904,9 @@ ifdef::VK_EXT_shader_atomic_float2[] <<features-shaderSharedFloat64Atomics, pname:shaderSharedFloat64Atomics>>, or <<features-shaderSharedFloat64AtomicAdd, - pname:shaderSharedFloat64AtomicAdd>>, or - <<features-shaderBufferFloat16AtomicMinMax, + pname:shaderSharedFloat64AtomicAdd>>, +ifdef::VK_EXT_shader_atomic_float2[] + or <<features-shaderBufferFloat16AtomicMinMax, pname:shaderSharedFloat16Atomics>>, or <<features-shaderBufferFloat16AtomicMinMax, pname:shaderSharedFloat16AtomicAdd>>, or @@ -945,25 +915,35 @@ ifdef::VK_EXT_shader_atomic_float2[] <<features-shaderSharedFloat32AtomicMinMax, pname:shaderSharedFloat32AtomicMinMax>>, or <<features-shaderSharedFloat64AtomicMinMax, - pname:shaderSharedFloat64AtomicMinMax>> must: be enabled for - floating-point atomic operations to be supported on a _Pointer_ with a - {StorageClass} of code:Workgroup + pname:shaderSharedFloat64AtomicMinMax>>, +endif::VK_EXT_shader_atomic_float2[] +ifdef::VK_NV_shader_atomic_float16_vector[] + or <<features-shaderFloat16VectorAtomics, + pname:shaderFloat16VectorAtomics>>, +endif::VK_NV_shader_atomic_float16_vector[] + must: be enabled for floating-point atomic operations to be supported on + a _Pointer_ with a {StorageClass} of code:Workgroup * [[VUID-{refpage}-None-06286]] <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>>, or <<features-shaderImageFloat32AtomicAdd, - pname:shaderImageFloat32AtomicAdd>>, or - <<features-shaderImageFloat32AtomicMinMax, - pname:shaderImageFloat32AtomicMinMax>> must: be enabled for 32-bit - floating-point atomic operations to be supported on a _Pointer_ with a - {StorageClass} of code:Image + pname:shaderImageFloat32AtomicAdd>>, +ifdef::VK_EXT_shader_atomic_float2[] + or <<features-shaderImageFloat32AtomicMinMax, + pname:shaderImageFloat32AtomicMinMax>>, +endif::VK_EXT_shader_atomic_float2[] + must: be enabled for 32-bit floating-point atomic operations to be + supported on a _Pointer_ with a {StorageClass} of code:Image * [[VUID-{refpage}-None-06287]] <<features-sparseImageFloat32Atomics, pname:sparseImageFloat32Atomics>>, or <<features-sparseImageFloat32AtomicAdd, - pname:sparseImageFloat32AtomicAdd>>, or - <<features-sparseImageFloat32AtomicMinMax, - pname:sparseImageFloat32AtomicMinMax>> must: be enabled for 32-bit - floating-point atomics to be supported on sparse images + pname:sparseImageFloat32AtomicAdd>>, +ifdef::VK_EXT_shader_atomic_float2[] + or <<features-sparseImageFloat32AtomicMinMax, + pname:sparseImageFloat32AtomicMinMax>>, endif::VK_EXT_shader_atomic_float2[] + must: be enabled for 32-bit floating-point atomics to be supported on + sparse images +endif::VK_EXT_shader_atomic_float,VK_EXT_shader_atomic_float2[] ifdef::VK_EXT_shader_image_atomic_int64[] * [[VUID-{refpage}-None-06288]] <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>> @@ -1520,6 +1500,12 @@ ifdef::VK_EXT_shader_atomic_float2[] pname:shaderSharedFloat64AtomicMinMax>>, must: be enabled for 64-bit floating point atomic operations endif::VK_EXT_shader_atomic_float2[] +ifdef::VK_NV_shader_atomic_float16_vector[] + * [[VUID-{refpage}-shaderFloat16VectorAtomics-09581]] + <<features-shaderFloat16VectorAtomics,pname:shaderFloat16VectorAtomics>>, + must: be enabled for 16-bit floating-point, 2- and 4-component vector + atomic operations to be supported +endif::VK_NV_shader_atomic_float16_vector[] * [[VUID-{refpage}-NonWritable-06340]] If <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>> is not enabled, then all storage image, storage texel buffer, and diff --git a/chapters/VK_INTEL_performance_query/queries.adoc b/chapters/VK_INTEL_performance_query/queries.adoc index 2781dc78..001804bf 100644 --- a/chapters/VK_INTEL_performance_query/queries.adoc +++ b/chapters/VK_INTEL_performance_query/queries.adoc @@ -212,6 +212,12 @@ back a particular draw call with a particular performance data item. include::{generated}/api/protos/vkCmdSetPerformanceStreamMarkerINTEL.adoc[] + * pname:commandBuffer is a slink:VkCommandBuffer into which a stream + marker is added. + * pname:pMarkerInfo is a pointer to a + slink:VkPerformanceStreamMarkerInfoINTEL structure describing the marker + to insert. + include::{generated}/validity/protos/vkCmdSetPerformanceStreamMarkerINTEL.adoc[] -- diff --git a/chapters/VK_KHR_surface/wsi.adoc b/chapters/VK_KHR_surface/wsi.adoc index fba9dd8e..85331f9d 100644 --- a/chapters/VK_KHR_surface/wsi.adoc +++ b/chapters/VK_KHR_surface/wsi.adoc @@ -541,8 +541,9 @@ ifdef::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[] included in the pname:pNext chain endif::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[] * [[VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-07919]] + If surface is not VK_NULL_HANDLE, ifdef::VK_GOOGLE_surfaceless_query[] - If the `apiext:VK_GOOGLE_surfaceless_query` extension is not enabled, + and the `apiext:VK_GOOGLE_surfaceless_query` extension is not enabled, endif::VK_GOOGLE_surfaceless_query[] pname:surface must: be a valid slink:VkSurfaceKHR handle **** diff --git a/chapters/VK_KHR_swapchain/wsi.adoc b/chapters/VK_KHR_swapchain/wsi.adoc index 2f937b8a..dd0b5b30 100644 --- a/chapters/VK_KHR_swapchain/wsi.adoc +++ b/chapters/VK_KHR_swapchain/wsi.adoc @@ -1305,39 +1305,45 @@ order that they were acquired - applications can arbitrarily present any image that is currently acquired. ==== -include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[] +.Note +[NOTE] +==== +The origin of the native orientation of the surface coordinate system is not +specified in the Vulkan specification; it depends on the platform. +For most platforms the origin is by default upper-left, meaning the pixel of +the presented slink:VkImage at coordinates [eq]#(0,0)# would appear at the +upper left pixel of the platform surface (assuming +ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the display standing the +right way up). +==== -.Valid Usage -**** - * [[VUID-vkQueuePresentKHR-pSwapchains-01292]] - Each element of pname:pSwapchains member of pname:pPresentInfo must: be - a swapchain that is created for a surface for which presentation is - supported from pname:queue as determined using a call to - fname:vkGetPhysicalDeviceSurfaceSupportKHR -ifdef::VK_KHR_display_swapchain[] - * [[VUID-vkQueuePresentKHR-pSwapchains-01293]] - If more than one member of pname:pSwapchains was created from a display - surface, all display surfaces referenced that refer to the same display - must: use the same display mode -endif::VK_KHR_display_swapchain[] - * [[VUID-vkQueuePresentKHR-pWaitSemaphores-01294]] - When a semaphore wait operation referring to a binary semaphore defined - by the elements of the pname:pWaitSemaphores member of - pname:pPresentInfo executes on pname:queue, there must: be no other - queues waiting on the same semaphore -ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] - * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03267]] - All elements of the pname:pWaitSemaphores member of pname:pPresentInfo - must: be created with a elink:VkSemaphoreType of - ename:VK_SEMAPHORE_TYPE_BINARY -endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] - * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03268]] - All elements of the pname:pWaitSemaphores member of pname:pPresentInfo - must: reference a semaphore signal operation that has been submitted for - execution and any <<synchronization-semaphores-signaling, semaphore - signal operations>> on which it depends must: have also been submitted - for execution -**** +The result codes ename:VK_ERROR_OUT_OF_DATE_KHR and ename:VK_SUBOPTIMAL_KHR +have the same meaning when returned by fname:vkQueuePresentKHR as they do +when returned by fname:vkAcquireNextImageKHR. +ifdef::VK_EXT_full_screen_exclusive[] +If any pname:swapchain member of pname:pPresentInfo was created with +ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, +ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT will be returned if that +swapchain does not have exclusive full-screen access, possibly for +implementation-specific reasons outside of the application's control. +endif::VK_EXT_full_screen_exclusive[] +If multiple swapchains are presented, the result code is determined by +applying the following rules in order: + + * If the device is lost, ename:VK_ERROR_DEVICE_LOST is returned. + * If any of the target surfaces are no longer available the error + ename:VK_ERROR_SURFACE_LOST_KHR is returned. + * If any of the presents would have a result of + ename:VK_ERROR_OUT_OF_DATE_KHR if issued separately then + ename:VK_ERROR_OUT_OF_DATE_KHR is returned. +ifdef::VK_EXT_full_screen_exclusive[] + * If any of the presents would have a result of + ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT if issued separately + then ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT is returned. +endif::VK_EXT_full_screen_exclusive[] + * If any of the presents would have a result of ename:VK_SUBOPTIMAL_KHR if + issued separately then ename:VK_SUBOPTIMAL_KHR is returned. + * Otherwise ename:VK_SUCCESS is returned. Any writes to memory backing the images referenced by the pname:pImageIndices and pname:pSwapchains members of pname:pPresentInfo, @@ -1348,24 +1354,39 @@ This automatic visibility operation for an image happens-after the semaphore signal operation, and happens-before the presentation engine accesses the image. +Presentation is a read-only operation that will not affect the content of +the presentable images. +Upon reacquiring the image and transitioning it away from the +ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout, the contents will be the same +as they were prior to transitioning the image to the present source layout +and presenting it. +However, if a mechanism other than Vulkan is used to modify the platform +window associated with the swapchain, the content of all presentable images +in the swapchain becomes undefined:. + +Calls to fname:vkQueuePresentKHR may: block, but must: return in finite +time. +The processing of the presentation happens in issue order with other queue +operations, but semaphores must: be used to ensure that prior rendering and +other commands in the specified queue complete before the presentation +begins. +The presentation command itself does not delay processing of subsequent +commands on the queue. +However, presentation requests sent to a particular queue are always +performed in order. +Exact presentation timing is controlled by the semantics of the presentation +engine and native platform in use. + +ifdef::VK_KHR_display_swapchain[] +include::{chapters}/VK_KHR_display_swapchain/queue_present_interactions.adoc[] +endif::VK_KHR_display_swapchain[] + Queueing an image for presentation defines a set of _queue operations_, including waiting on the semaphores and submitting a presentation request to the presentation engine. However, the scope of this set of queue operations does not include the actual processing of the image by the presentation engine. -.Note -[NOTE] -==== -The origin of the native orientation of the surface coordinate system is not -specified in the Vulkan specification; it depends on the platform. -For most platforms the origin is by default upper-left, meaning the pixel of -the presented slink:VkImage at coordinates [eq]#(0,0)# would appear at the -upper left pixel of the platform surface (assuming -ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the display standing the -right way up). -==== - If fname:vkQueuePresentKHR fails to enqueue the corresponding set of queue operations, it may: return ename:VK_ERROR_OUT_OF_HOST_MEMORY or ename:VK_ERROR_OUT_OF_DEVICE_MEMORY. @@ -1387,16 +1408,56 @@ considered to be enqueued and thus any semaphore wait operation specified in slink:VkPresentInfoKHR will execute when the corresponding queue operation is complete. -Calls to fname:vkQueuePresentKHR may: block, but must: return in finite -time. +fname:vkQueuePresentKHR releases the acquisition of the images referenced by +pname:imageIndices. +The queue family corresponding to the queue fname:vkQueuePresentKHR is +executed on must: have ownership of the presented images as defined in +<<resources-sharing,Resource Sharing>>. +fname:vkQueuePresentKHR does not alter the queue family ownership, but the +presented images must: not be used again before they have been reacquired +using fname:vkAcquireNextImageKHR. -ifdef::VK_EXT_full_screen_exclusive[] -If any pname:swapchain member of pname:pPresentInfo was created with -ename:VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, -ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT will be returned if that -swapchain does not have exclusive full-screen access, possibly for -implementation-specific reasons outside of the application's control. -endif::VK_EXT_full_screen_exclusive[] +[NOTE] +.Note +==== +The application can: continue to present any acquired images from a retired +swapchain as long as the swapchain has not entered a state that causes +flink:vkQueuePresentKHR to return ename:VK_ERROR_OUT_OF_DATE_KHR. +==== + +include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[] + +.Valid Usage +**** + * [[VUID-vkQueuePresentKHR-pSwapchains-01292]] + Each element of pname:pSwapchains member of pname:pPresentInfo must: be + a swapchain that is created for a surface for which presentation is + supported from pname:queue as determined using a call to + fname:vkGetPhysicalDeviceSurfaceSupportKHR +ifdef::VK_KHR_display_swapchain[] + * [[VUID-vkQueuePresentKHR-pSwapchains-01293]] + If more than one member of pname:pSwapchains was created from a display + surface, all display surfaces referenced that refer to the same display + must: use the same display mode +endif::VK_KHR_display_swapchain[] + * [[VUID-vkQueuePresentKHR-pWaitSemaphores-01294]] + When a semaphore wait operation referring to a binary semaphore defined + by the elements of the pname:pWaitSemaphores member of + pname:pPresentInfo executes on pname:queue, there must: be no other + queues waiting on the same semaphore +ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] + * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03267]] + All elements of the pname:pWaitSemaphores member of pname:pPresentInfo + must: be created with a elink:VkSemaphoreType of + ename:VK_SEMAPHORE_TYPE_BINARY +endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[] + * [[VUID-vkQueuePresentKHR-pWaitSemaphores-03268]] + All elements of the pname:pWaitSemaphores member of pname:pPresentInfo + must: reference a semaphore signal operation that has been submitted for + execution and any <<synchronization-semaphores-signaling, semaphore + signal operations>> on which it depends must: have also been submitted + for execution +**** include::{generated}/validity/protos/vkQueuePresentKHR.adoc[] -- @@ -1609,68 +1670,6 @@ include::{chapters}/VK_EXT_swapchain_maintenance1/SwapchainPresentModeInfo.adoc[ include::{chapters}/VK_EXT_swapchain_maintenance1/SwapchainPresentFenceInfo.adoc[] endif::VK_EXT_swapchain_maintenance1[] -fname:vkQueuePresentKHR releases the acquisition of the images referenced by -pname:imageIndices. -The queue family corresponding to the queue fname:vkQueuePresentKHR is -executed on must: have ownership of the presented images as defined in -<<resources-sharing,Resource Sharing>>. -fname:vkQueuePresentKHR does not alter the queue family ownership, but the -presented images must: not be used again before they have been reacquired -using fname:vkAcquireNextImageKHR. - -The processing of the presentation happens in issue order with other queue -operations, but semaphores have to be used to ensure that prior rendering -and other commands in the specified queue complete before the presentation -begins. -The presentation command itself does not delay processing of subsequent -commands on the queue, however, presentation requests sent to a particular -queue are always performed in order. -Exact presentation timing is controlled by the semantics of the presentation -engine and native platform in use. - -ifdef::VK_KHR_display_swapchain[] -include::{chapters}/VK_KHR_display_swapchain/queue_present_interactions.adoc[] -endif::VK_KHR_display_swapchain[] - -The result codes ename:VK_ERROR_OUT_OF_DATE_KHR and ename:VK_SUBOPTIMAL_KHR -have the same meaning when returned by fname:vkQueuePresentKHR as they do -when returned by fname:vkAcquireNextImageKHR. -If multiple swapchains are presented, the result code is determined applying -the following rules in order: - - * If the device is lost, ename:VK_ERROR_DEVICE_LOST is returned. - * If any of the target surfaces are no longer available the error - ename:VK_ERROR_SURFACE_LOST_KHR is returned. - * If any of the presents would have a result of - ename:VK_ERROR_OUT_OF_DATE_KHR if issued separately then - ename:VK_ERROR_OUT_OF_DATE_KHR is returned. -ifdef::VK_EXT_full_screen_exclusive[] - * If any of the presents would have a result of - ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT if issued separately - then ename:VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT is returned. -endif::VK_EXT_full_screen_exclusive[] - * If any of the presents would have a result of ename:VK_SUBOPTIMAL_KHR if - issued separately then ename:VK_SUBOPTIMAL_KHR is returned. - * Otherwise ename:VK_SUCCESS is returned. - -Presentation is a read-only operation that will not affect the content of -the presentable images. -Upon reacquiring the image and transitioning it away from the -ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout, the contents will be the same -as they were prior to transitioning the image to the present source layout -and presenting it. -However, if a mechanism other than Vulkan is used to modify the platform -window associated with the swapchain, the content of all presentable images -in the swapchain becomes undefined:. - -[NOTE] -.Note -==== -The application can: continue to present any acquired images from a retired -swapchain as long as the swapchain has not entered a state that causes -flink:vkQueuePresentKHR to return ename:VK_ERROR_OUT_OF_DATE_KHR. -==== - ifdef::VK_EXT_swapchain_maintenance1[] [open,refpage='vkReleaseSwapchainImagesEXT',desc='Release previously acquired but unused images',type='protos'] -- diff --git a/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc b/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc index 827c2d76..4fb2348f 100644 --- a/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc +++ b/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.adoc @@ -14,16 +14,6 @@ basetype:CAMetalLayer, call: include::{generated}/api/protos/vkCreateIOSSurfaceMVK.adoc[] -ifdef::VK_EXT_metal_surface[] -[NOTE] -.Note -==== -The `vkCreateIOSSurfaceMVK` function is considered deprecated and has been -superseded by flink:vkCreateMetalSurfaceEXT from the -`apiext:VK_EXT_metal_surface` extension. -==== -endif::VK_EXT_metal_surface[] - * pname:instance is the instance with which to associate the surface. * pname:pCreateInfo is a pointer to a slink:VkIOSSurfaceCreateInfoMVK structure containing parameters affecting the creation of the surface @@ -34,6 +24,16 @@ endif::VK_EXT_metal_surface[] * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the created surface object is returned. +ifdef::VK_EXT_metal_surface[] +[NOTE] +.Note +==== +The `vkCreateIOSSurfaceMVK` function is considered deprecated and has been +superseded by flink:vkCreateMetalSurfaceEXT from the +`apiext:VK_EXT_metal_surface` extension. +==== +endif::VK_EXT_metal_surface[] + include::{generated}/validity/protos/vkCreateIOSSurfaceMVK.adoc[] -- diff --git a/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc b/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc index a6fe1c25..67d7e6bd 100644 --- a/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc +++ b/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.adoc @@ -14,16 +14,6 @@ basetype:CAMetalLayer, call: include::{generated}/api/protos/vkCreateMacOSSurfaceMVK.adoc[] -ifdef::VK_EXT_metal_surface[] -[NOTE] -.Note -==== -The `vkCreateMacOSSurfaceMVK` function is considered deprecated and has been -superseded by flink:vkCreateMetalSurfaceEXT from the -`apiext:VK_EXT_metal_surface` extension. -==== -endif::VK_EXT_metal_surface[] - * pname:instance is the instance with which to associate the surface. * pname:pCreateInfo is a pointer to a slink:VkMacOSSurfaceCreateInfoMVK structure containing parameters affecting the creation of the surface @@ -34,6 +24,16 @@ endif::VK_EXT_metal_surface[] * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the created surface object is returned. +ifdef::VK_EXT_metal_surface[] +[NOTE] +.Note +==== +The `vkCreateMacOSSurfaceMVK` function is considered deprecated and has been +superseded by flink:vkCreateMetalSurfaceEXT from the +`apiext:VK_EXT_metal_surface` extension. +==== +endif::VK_EXT_metal_surface[] + include::{generated}/validity/protos/vkCreateMacOSSurfaceMVK.adoc[] -- diff --git a/chapters/VK_NV_low_latency2/low_latency2.adoc b/chapters/VK_NV_low_latency2/low_latency2.adoc index 6adb63fe..be17b1ff 100644 --- a/chapters/VK_NV_low_latency2/low_latency2.adoc +++ b/chapters/VK_NV_low_latency2/low_latency2.adoc @@ -48,7 +48,7 @@ include::{generated}/api/structs/VkLatencySleepModeInfoNV.adoc[] * pname:lowLatencyBoost allows an application to hint to the GPU to increase performance to provide additional latency savings at a cost of increased power consumption. - * pname:minimumPresentIntervalUs is the microseconds between + * pname:minimumIntervalUs is the microseconds between flink:vkQueuePresentKHR calls for a given swapchain that flink:vkLatencySleepNV will enforce. @@ -294,7 +294,7 @@ include::{generated}/api/structs/VkLatencySubmissionPresentIdNV.adoc[] For any submission to be tracked with low latency mode pacing, it needs to be associated with other submissions in a given present. -Applications :must include the VkLatencySubmissionPresentIdNV in the pNext +Applications must: include the VkLatencySubmissionPresentIdNV in the pNext chain of flink:vkQueueSubmit to associate that submission with the pname:presentId present for low latency mode. diff --git a/chapters/VK_NV_optical_flow/optical_flow.adoc b/chapters/VK_NV_optical_flow/optical_flow.adoc index a06bca40..820197d0 100644 --- a/chapters/VK_NV_optical_flow/optical_flow.adoc +++ b/chapters/VK_NV_optical_flow/optical_flow.adoc @@ -468,19 +468,20 @@ include::{generated}/api/enums/VkOpticalFlowSessionBindingPointNV.adoc[] * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV specifies the binding point for the optional external hint flow vectors. * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV specifies the - binding point for output flow vectors of default forward flow calcution. + binding point for output flow vectors of default forward flow + calculation. * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV specifies the binding point for the optional output flow vector map of - optional backward flow calcution. + optional backward flow calculation. * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV specifies the binding point for the optional output cost map of default forward flow - calcution. + calculation. * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV specifies the binding point for the optional output cost map of optional backward - flow calcution. + flow calculation. * ename:VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV specifies the binding point for the optional global flow value of default forward flow - calcution. + calculation. -- diff --git a/chapters/accelstructures.adoc b/chapters/accelstructures.adoc index 570186f1..42f9c110 100644 --- a/chapters/accelstructures.adoc +++ b/chapters/accelstructures.adoc @@ -2442,13 +2442,14 @@ flink:vkCmdCopyAccelerationStructureKHR but is executed by the host. * [[VUID-vkCopyAccelerationStructureKHR-accelerationStructureHostCommands-03582]] The <<features-accelerationStructureHostCommands, sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>> + feature must: be enabled include::{chapters}/commonvalidity/deferred_operations_common.adoc[] * [[VUID-vkCopyAccelerationStructureKHR-buffer-03727]] The pname:buffer used to create pname:pInfo->src must: be bound to host-visible device memory * [[VUID-vkCopyAccelerationStructureKHR-buffer-03728]] The pname:buffer used to create pname:pInfo->dst must: be bound to - host-visible device memory feature must: be enabled + host-visible device memory ifdef::VK_KHR_device_group,VK_VERSION_1_1[] * [[VUID-vkCopyAccelerationStructureKHR-buffer-03780]] The pname:buffer used to create pname:pInfo->src must: be bound to diff --git a/chapters/cmdbuffers.adoc b/chapters/cmdbuffers.adoc index b9ea3e35..9d0fbd42 100644 --- a/chapters/cmdbuffers.adoc +++ b/chapters/cmdbuffers.adoc @@ -1742,7 +1742,7 @@ include::{chapters}/commonvalidity/no_dynamic_allocations_common.adoc[] * [[VUID-vkQueueSubmit2-commandBuffer-03867]] If a command recorded into the pname:commandBuffer member of any element of the pname:pCommandBufferInfos member of any element of pname:pSubmits - referenced an slink:VkEvent, that event must: not be referenced by a + referenced a slink:VkEvent, that event must: not be referenced by a command that has been submitted to another queue and is still in the _pending state_ * [[VUID-vkQueueSubmit2-semaphore-03868]] @@ -2293,7 +2293,7 @@ ifdef::VK_VERSION_1_1[] * [[VUID-vkQueueSubmit-queue-06448]] If pname:queue was not created with ename:VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, there must: be no element of - pname:pSubmits that includes an slink:VkProtectedSubmitInfo structure in + pname:pSubmits that includes a slink:VkProtectedSubmitInfo structure in its pname:pNext chain with pname:protectedSubmit equal to ename:VK_TRUE endif::VK_VERSION_1_1[] **** @@ -3200,7 +3200,7 @@ ifdef::VK_ANDROID_external_format_resolve[] ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, the pname:pNext chain of slink:VkCommandBufferInheritanceInfo used to create each element of pname:pCommandBuffers must: include a - slink:VkExternalFormatANDROID structure with a pname:externalFormat + slink:VkExternalFormatANDROID structure with an pname:externalFormat matching that used to create the resolve attachment in the render pass * [[VUID-vkCmdExecuteCommands-pNext-09300]] If fname:vkCmdExecuteCommands is being called within a render pass diff --git a/chapters/commonvalidity/draw_common.adoc b/chapters/commonvalidity/draw_common.adoc index 18a9aa52..d41b34c1 100644 --- a/chapters/commonvalidity/draw_common.adoc +++ b/chapters/commonvalidity/draw_common.adoc @@ -811,8 +811,8 @@ endif::VK_EXT_dynamic_rendering_unused_attachments[] flink:vkCmdBeginRendering and slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then each element of the slink:VkRenderingInfo::pname:pColorAttachments array - with a pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been - created with a elink:VkFormat equal to the corresponding element of + with an pname:imageView not equal to dlink:VK_NULL_HANDLE must: have + been created with a elink:VkFormat equal to the corresponding element of slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used to create the currently bound graphics pipeline * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08912]] @@ -825,7 +825,7 @@ endif::VK_EXT_dynamic_rendering_unused_attachments[] flink:vkCmdBeginRendering and slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then each element of the slink:VkRenderingInfo::pname:pColorAttachments array - with a pname:imageView equal to dlink:VK_NULL_HANDLE must: have the + with an pname:imageView equal to dlink:VK_NULL_HANDLE must: have the corresponding element of slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used to create the currently bound pipeline equal to @@ -837,7 +837,7 @@ ifdef::VK_EXT_dynamic_rendering_unused_attachments[] current render pass instance was begun with flink:vkCmdBeginRendering and slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then each element of the slink:VkRenderingInfo::pname:pColorAttachments - array with a pname:imageView not equal to dlink:VK_NULL_HANDLE must: + array with an pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been created with a elink:VkFormat equal to the corresponding element of slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used diff --git a/chapters/descriptorsets.adoc b/chapters/descriptorsets.adoc index 37fc2a7c..8910bbbb 100644 --- a/chapters/descriptorsets.adoc +++ b/chapters/descriptorsets.adoc @@ -3612,7 +3612,7 @@ ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkWriteDescriptorSet-descriptorType-02738]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and if any element of - pname:pImageInfo has a pname:imageView member that was created with a + pname:pImageInfo has an pname:imageView member that was created with a sname:VkSamplerYcbcrConversionInfo structure in its pname:pNext chain, then pname:dstSet must: have been allocated with a layout that included immutable samplers for pname:dstBinding, and the corresponding immutable @@ -5857,7 +5857,7 @@ underlying slink:VkBuffer is referenced instead. ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[] If pname:pDescriptorInfo->type is not ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER or - pname:pDescriptorInfo->data.pCombinedImageSampler has a pname:imageView + pname:pDescriptorInfo->data.pCombinedImageSampler has an pname:imageView member that was not created with a sname:VkSamplerYcbcrConversionInfo structure in its pname:pNext chain, endif::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[] @@ -5875,7 +5875,7 @@ ifdef::VK_VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-vkGetDescriptorEXT-descriptorType-09469]] If pname:pDescriptorInfo->type is ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER and - pname:pDescriptorInfo->data.pCombinedImageSampler has a pname:imageView + pname:pDescriptorInfo->data.pCombinedImageSampler has an pname:imageView member that was created with a sname:VkSamplerYcbcrConversionInfo structure in its pname:pNext chain, pname:dataSize must: equal the size of diff --git a/chapters/devsandqueues.adoc b/chapters/devsandqueues.adoc index a228b519..3cd0fec9 100644 --- a/chapters/devsandqueues.adoc +++ b/chapters/devsandqueues.adoc @@ -1477,9 +1477,10 @@ include::{generated}/validity/structs/VkQueueFamilyProperties2.adoc[] ifdef::VK_EXT_global_priority_query,VK_KHR_global_priority[] [open,refpage='VkQueueFamilyGlobalPriorityPropertiesKHR',desc='Return structure for queue family global priority information query',type='structs'] -- -The definition of slink:VkQueueFamilyGlobalPriorityPropertiesKHR is: +The slink:VkQueueFamilyGlobalPriorityPropertiesKHR structure is defined as: include::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesKHR.adoc[] + ifdef::VK_EXT_global_priority_query[] or the equivalent diff --git a/chapters/dispatch.adoc b/chapters/dispatch.adoc index 12d4e0db..5702b849 100644 --- a/chapters/dispatch.adoc +++ b/chapters/dispatch.adoc @@ -200,8 +200,7 @@ ifdef::VK_HUAWEI_subpass_shading[] A subpass shading dispatches a compute pipeline work with the work dimension of render area of the calling subpass and work groups are partitioned by specified work group size. -Subpass operations like subpassLoad and subpassLoadMS are allowed to be -used. +Subpass operations like code:subpassLoad are allowed to be used. To record a subpass shading, call: diff --git a/chapters/features.adoc b/chapters/features.adoc index 9f23f084..96da12f8 100644 --- a/chapters/features.adoc +++ b/chapters/features.adoc @@ -6980,7 +6980,7 @@ This structure describes the following feature: slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats element with a format other than ename:VK_FORMAT_UNDEFINED is allowed with a corresponding slink:VkRenderingInfo::pname:pColorAttachments - element with a pname:imageView equal to dlink:VK_NULL_HANDLE, or any + element with an pname:imageView equal to dlink:VK_NULL_HANDLE, or any pipeline slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats element with a ename:VK_FORMAT_UNDEFINED format is allowed with a @@ -7539,15 +7539,15 @@ include::{generated}/api/structs/VkPhysicalDeviceMapMemoryPlacedFeaturesEXT.adoc This structure describes the following features: - * [[features-memoryMapPlaced]] pname:memoryMapPlaced indicates that - the implementation supports placing memory maps at client-specified - virtual addresses. + * [[features-memoryMapPlaced]] pname:memoryMapPlaced indicates that the + implementation supports placing memory maps at client-specified virtual + addresses. * [[features-memoryMapRangePlaced]] pname:memoryMapRangePlaced indicates that the implementation supports placing memory maps of a subrange of a memory object at client-specified virtual addresses. - * [[features-memoryUnmapReserve]] pname:memoryUnmapReserve - indicates that the implementation supports leaving the memory range - reserved when unmapping a memory object. + * [[features-memoryUnmapReserve]] pname:memoryUnmapReserve indicates that + the implementation supports leaving the memory range reserved when + unmapping a memory object. :refpage: VkPhysicalDeviceMapMemoryPlacedFeaturesEXT include::{chapters}/features.adoc[tag=features] @@ -7557,6 +7557,34 @@ include::{generated}/validity/structs/VkPhysicalDeviceMapMemoryPlacedFeaturesEXT endif::VK_EXT_map_memory_placed[] +ifdef::VK_NV_shader_atomic_float16_vector[] +[open,refpage='VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV',desc='Structure describing features supported by VK_NV_shader_atomic_float16_vector',type='structs'] +-- +The slink:VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV structure is +defined as: + +include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV.adoc[] + +This structure describes the following features: + + * pname:sType is a elink:VkStructureType value identifying this structure. + * pname:pNext is `NULL` or a pointer to a structure extending this + structure. + +// tag::VK_NV_shader_atomic_float16_vector-features[] + * [[features-shaderFloat16VectorAtomics]] pname:shaderFloat16VectorAtomics + indicates whether shaders can: perform 16-bit floating-point, 2- and + 4-component vector atomic operations. +// end::VK_NV_shader_atomic_float16_vector-features[] + +:refpage: VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV +include::{chapters}/features.adoc[tag=features] + +include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV.adoc[] +-- +endif::VK_NV_shader_atomic_float16_vector[] + + [[features-requirements]] == Feature Requirements @@ -8466,6 +8494,11 @@ ifdef::VK_KHR_shader_quad_control[] * <<features-shaderQuadControl, pname:shaderQuadControl>>, if the `apiext:VK_KHR_shader_quad_control` extension is supported. endif::VK_KHR_shader_quad_control[] +ifdef::VK_NV_shader_atomic_float16_vector[] + * <<features-shaderFloat16VectorAtomics, + pname:shaderFloat16VectorAtomics>>, if the + `apiext:VK_NV_shader_atomic_float16_vector` extension is supported. +endif::VK_NV_shader_atomic_float16_vector[] ifdef::VK_EXT_map_memory_placed[] * <<features-memoryMapPlaced, pname:memoryMapPlaced>> if the `apiext:VK_EXT_map_memory_placed` extension is supported. diff --git a/chapters/formats.adoc b/chapters/formats.adoc index 4e5697a7..22a993d9 100644 --- a/chapters/formats.adoc +++ b/chapters/formats.adoc @@ -2773,6 +2773,8 @@ of the named formats, with more information in the table where the symbol appears ^|{sym3} | This feature must: be supported with some caveats or preconditions, with more information in the table where the symbol appears +^|{sym4} | This feature must: be supported with some caveats or +preconditions, with more information in the table where the symbol appears |==== .Feature bits in pname:optimalTilingFeatures @@ -3014,38 +3016,44 @@ pname:shaderStorageImageExtendedFormats>> feature. 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} s| Format -| ename:VK_FORMAT_R16_UNORM | | | | {sym3} | | | | | | {sym1} | | | -| ename:VK_FORMAT_R16_SNORM | | | | {sym3} | | | | | | {sym1} | | | -| ename:VK_FORMAT_R16_USCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | -| ename:VK_FORMAT_R16_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | -| ename:VK_FORMAT_R16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | -| ename:VK_FORMAT_R16G16_UNORM | | | | {sym3} | | | | | | {sym1} | | | -| ename:VK_FORMAT_R16G16_SNORM | | | | {sym3} | | | | | | {sym1} | | | -| ename:VK_FORMAT_R16G16_USCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | -| ename:VK_FORMAT_R16G16_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | -| ename:VK_FORMAT_R16G16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | -| ename:VK_FORMAT_R16G16B16_UNORM | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16_SNORM | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16_USCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16_UINT | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16_SINT | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16_SFLOAT | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16A16_UNORM | | | | {sym3} | | | | | | {sym1} | | | -| ename:VK_FORMAT_R16G16B16A16_SNORM | | | | {sym3} | | | | | | {sym1} | | | -| ename:VK_FORMAT_R16G16B16A16_USCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16A16_SSCALED | | | | | | | | | | | | | -| ename:VK_FORMAT_R16G16B16A16_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | -| ename:VK_FORMAT_R16G16B16A16_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | -| ename:VK_FORMAT_R16G16B16A16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R16_UNORM | | | | {sym3} | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16_SNORM | | | | {sym3} | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16_USCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16_SSCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16G16_UNORM | | | | {sym3} | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16G16_SNORM | | | | {sym3} | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16G16_USCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16_SSCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16G16_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | +| ename:VK_FORMAT_R16G16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym3} | {sym4} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym4} | {sym4} +| ename:VK_FORMAT_R16G16B16_UNORM | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16_SNORM | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16_USCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16_SSCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16_UINT | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16_SINT | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16_SFLOAT | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16A16_UNORM | | | | {sym3} | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16G16B16A16_SNORM | | | | {sym3} | | | | | | {sym1} | | | +| ename:VK_FORMAT_R16G16B16A16_USCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16A16_SSCALED | | | | | | | | | | | | | +| ename:VK_FORMAT_R16G16B16A16_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R16G16B16A16_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | +| ename:VK_FORMAT_R16G16B16A16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym1} | {sym4} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym4} 14+| Format features marked with {sym3} must: be supported for pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the <<features-shaderStorageImageExtendedFormats, pname:shaderStorageImageExtendedFormats>> feature. +ifdef::VK_NV_shader_atomic_float16_vector[] +14+| Format features marked with {sym4} must: be supported for +pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports +the <<features-shaderFloat16VectorAtomics, pname:shaderFloat16VectorAtomics>> +feature. +endif::VK_NV_shader_atomic_float16_vector[] |==== <<< diff --git a/chapters/fragops.adoc b/chapters/fragops.adoc index 22e7dd28..5207d5cd 100644 --- a/chapters/fragops.adoc +++ b/chapters/fragops.adoc @@ -560,7 +560,7 @@ When this structure is included in the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo, it defines parameters of the exclusive scissor test. If this structure is not included in the pname:pNext chain, it is equivalent -to specifying this structure with a pname:exclusiveScissorCount of `0`. +to specifying this structure with an pname:exclusiveScissorCount of `0`. .Valid Usage **** diff --git a/chapters/fundamentals.adoc b/chapters/fundamentals.adoc index 4d520d32..b8ff5205 100644 --- a/chapters/fundamentals.adoc +++ b/chapters/fundamentals.adoc @@ -1333,6 +1333,20 @@ ifdef::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[] have required compilation, but the application requested compilation to not be performed. endif::VK_VERSION_1_3,VK_EXT_pipeline_creation_cache_control[] +ifdef::VK_EXT_shader_object[] + * ename:VK_INCOMPATIBLE_SHADER_BINARY_EXT The provided binary shader code + is not compatible with this device. ++ +[NOTE] +.Note +==== +In the initial version of the `apiext:VK_EXT_shader_object` extension, this +return code was named ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT and +improperly described as an error code. +The name has been changed, but the old name is retained as an alias for +compatibility with old code. +==== +endif::VK_EXT_shader_object[] [[fundamentals-errorcodes]] .Error codes @@ -1482,10 +1496,6 @@ ifdef::VK_KHR_video_encode_queue[] not adhere to the capabilities of the video compression standard or the implementation. endif::VK_KHR_video_encode_queue[] -ifdef::VK_EXT_shader_object[] - * ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT The provided binary shader - code is not compatible with this device. -endif::VK_EXT_shader_object[] * ename:VK_ERROR_UNKNOWN An unknown error has occurred; either the application has provided invalid input, or an implementation failure has occurred. diff --git a/chapters/interfaces.adoc b/chapters/interfaces.adoc index cfa3a955..5ace09d2 100644 --- a/chapters/interfaces.adoc +++ b/chapters/interfaces.adoc @@ -512,8 +512,8 @@ it is equivalent to specifying this structure with the following properties: pname:colorAttachmentCount must: be less than or equal to <<limits-maxColorAttachments,pname:maxColorAttachments>> * [[VUID-VkRenderingAttachmentLocationInfoKHR-pColorAttachmentLocations-09515]] - Each element of pname:pColorAttachmentLocations must: be less than or - equal to <<limits-maxColorAttachments,pname:maxColorAttachments>> + Each element of pname:pColorAttachmentLocations must: be less than + <<limits-maxColorAttachments,pname:maxColorAttachments>> **** include::{generated}/validity/structs/VkRenderingAttachmentLocationInfoKHR.adoc[] diff --git a/chapters/limits.adoc b/chapters/limits.adoc index 99319d5c..aa8aacbb 100644 --- a/chapters/limits.adoc +++ b/chapters/limits.adoc @@ -4569,18 +4569,17 @@ endif::VK_ARM_render_pass_striped[] ifdef::VK_EXT_map_memory_placed[] [open,refpage='VkPhysicalDeviceMapMemoryPlacedPropertiesEXT',desc='Structure describing the alignment requirements of placed memory maps for a physical device',type='structs'] -- -The sname:VkPhysicalDeviceMapMemoryPlacedPropertiesEXT structure is -defined as: +The sname:VkPhysicalDeviceMapMemoryPlacedPropertiesEXT structure is defined +as: include::{generated}/api/structs/VkPhysicalDeviceMapMemoryPlacedPropertiesEXT.adoc[] The members of the sname:VkPhysicalDeviceMapMemoryPlacedPropertiesEXT structure describe the following: - * [[limits-minPlacedMemoryMapAlignment]] - pname:minPlacedMemoryMapAlignment is the minimum alignment required for - memory object offsets and virtual address ranges when using placed - memory mapping. + * [[limits-minPlacedMemoryMapAlignment]] pname:minPlacedMemoryMapAlignment + is the minimum alignment required for memory object offsets and virtual + address ranges when using placed memory mapping. :refpage: VkPhysicalDeviceMapMemoryPlacedPropertiesEXT include::{chapters}/limits.adoc[tag=limits_desc] diff --git a/chapters/memory.adoc b/chapters/memory.adoc index 8cf9f876..58bbd836 100644 --- a/chapters/memory.adoc +++ b/chapters/memory.adoc @@ -3583,7 +3583,8 @@ ifdef::VK_KHR_device_group[] pname:memory must: not have been allocated with multiple instances endif::VK_KHR_device_group[] ifdef::VK_EXT_map_memory_placed[] - * ename:VK_MEMORY_MAP_PLACED_BIT_EXT must: not be set in pname:flags + * [[VUID-vkMapMemory-flags-09568]] + ename:VK_MEMORY_MAP_PLACED_BIT_EXT must: not be set in pname:flags endif::VK_EXT_map_memory_placed[] **** @@ -3594,8 +3595,8 @@ ifdef::VK_EXT_map_memory_placed[] [open,refpage='VkMemoryMapFlagBits',desc='Bitmask specifying additional parameters of a memory map',type='enums'] -- Bits which can: be set in flink:vkMapMemory::pname:flags and -slink:VkMemoryMapInfoKHR::pname:flags, specifying additional properties of -a memory map, are: +slink:VkMemoryMapInfoKHR::pname:flags, specifying additional properties of a +memory map, are: include::{generated}/api/enums/VkMemoryMapFlagBits.adoc[] @@ -3603,8 +3604,8 @@ include::{generated}/api/enums/VkMemoryMapFlagBits.adoc[] place the memory map at the virtual address specified by the client via slink:VkMemoryMapPlacedInfoEXT::pname:pPlacedAddress, replacing any existing mapping at that address. - This flag must: not be used with flink:vkMapMemory as there is no way - to specify the placement address. + This flag must: not be used with flink:vkMapMemory as there is no way to + specify the placement address. -- endif::VK_EXT_map_memory_placed[] @@ -3678,30 +3679,37 @@ ifdef::VK_KHR_device_group[] pname:memory must: not have been allocated with multiple instances endif::VK_KHR_device_group[] ifdef::VK_EXT_map_memory_placed[] - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags, the + * [[VUID-VkMemoryMapInfoKHR-flags-09569]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags, the <<features-memoryMapPlaced, pname:memoryMapPlaced>> feature must: be enabled - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags, the + * [[VUID-VkMemoryMapInfoKHR-flags-09570]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags, the pname:pNext chain must: include a slink:VkMemoryMapPlacedInfoEXT - structure and sname:VkMemoryMapPlacedInfoEXT::pname:pPlacedAddress - must: not be `NULL` - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the - <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature - is not enabled, pname:offset must: be zero - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the - <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature - is not enabled, pname:size must: be ename:VK_WHOLE_SIZE - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the - <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature - is enabled, pname:offset must: be aligned to an integer multiple of + structure and sname:VkMemoryMapPlacedInfoEXT::pname:pPlacedAddress must: + not be `NULL` + * [[VUID-VkMemoryMapInfoKHR-flags-09571]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the + <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature is + not enabled, pname:offset must: be zero + * [[VUID-VkMemoryMapInfoKHR-flags-09572]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the + <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature is + not enabled, pname:size must: be ename:VK_WHOLE_SIZE + * [[VUID-VkMemoryMapInfoKHR-flags-09573]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the + <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature is + enabled, pname:offset must: be aligned to an integer multiple of sname:VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::pname:minPlacedMemoryMapAlignment - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the - <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature - is enabled, pname:size must: be ename:VK_WHOLE_SIZE or be aligned to an + * [[VUID-VkMemoryMapInfoKHR-flags-09574]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags and the + <<features-memoryMapRangePlaced, pname:memoryMapRangePlaced>> feature is + enabled, pname:size must: be ename:VK_WHOLE_SIZE or be aligned to an integer multiple of sname:VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::pname:minPlacedMemoryMapAlignment ifdef::VK_EXT_external_memory_host[] - * If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags, the memory + * [[VUID-VkMemoryMapInfoKHR-flags-09575]] + If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in pname:flags, the memory object must: not have been imported from a handle type of ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT @@ -3719,8 +3727,8 @@ ifdef::VK_EXT_map_memory_placed[] If ename:VK_MEMORY_MAP_PLACED_BIT_EXT is set in sname:VkMemoryMapInfoKHR::pname:flags and the pname:pNext chain of slink:VkMemoryMapInfoKHR includes a sname:VkMemoryMapPlacedInfoEXT -structure, then that structure specifies the placement address of the -memory map. +structure, then that structure specifies the placement address of the memory +map. The implementation will place the memory map at the specified address, replacing any existing maps in the specified memory range. Replacing memory maps in this way does not implicitly unmap Vulkan memory @@ -3730,29 +3738,33 @@ anywhere in the specified virtual address range. If successful, pname:ppData will be set to the same value as sname:VkMemoryMapPlacedInfoEXT::pname:pPlacedAddress and fname:vkMapMemory2KHR will return ename:VK_SUCCESS. -If it cannot place the map at the requested address for any -reason, the memory object is left unmapped and fname:vkMapMemory2KHR will -return ename:VK_ERROR_MEMORY_MAP_FAILED. +If it cannot place the map at the requested address for any reason, the +memory object is left unmapped and fname:vkMapMemory2KHR will return +ename:VK_ERROR_MEMORY_MAP_FAILED. The sname:VkMemoryMapPlacedInfoEXT structure is defined as: include::{generated}/api/structs/VkMemoryMapPlacedInfoEXT.adoc[] - * pname:sType is the type of this structure. + * pname:sType is a elink:VkStructureType value identifying this structure. * pname:pNext is `NULL` or a pointer to a structure extending this structure. * pname:pPlacedAddress is the virtual address at which to place the - address. If sname:VkMemoryMapInfoKHR::pname:flags does not contain + address. + If sname:VkMemoryMapInfoKHR::pname:flags does not contain ename:VK_MEMORY_MAP_PLACED_BIT_EXT, this value is ignored. .Valid Usage **** - * If sname:VkMemoryMapInfoKHR::pname:flags contains + * [[VUID-VkMemoryMapPlacedInfoEXT-flags-09576]] + If sname:VkMemoryMapInfoKHR::pname:flags contains ename:VK_MEMORY_MAP_PLACED_BIT_EXT, pname:pPlacedAddress must: not be `NULL` - * pname:pPlacedAddress must: be aligned to an integer multiple of + * [[VUID-VkMemoryMapPlacedInfoEXT-pPlacedAddress-09577]] + pname:pPlacedAddress must: be aligned to an integer multiple of sname:VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::pname:minPlacedMemoryMapAlignment - * The address range specified by pname:pPlacedAddress and + * [[VUID-VkMemoryMapPlacedInfoEXT-pPlacedAddress-09578]] + The address range specified by pname:pPlacedAddress and sname:VkMemoryMapInfoKHR::pname:size must: not overlap any existing Vulkan memory object mapping. **** @@ -4004,11 +4016,13 @@ include::{generated}/api/structs/VkMemoryUnmapInfoKHR.adoc[] * [[VUID-VkMemoryUnmapInfoKHR-memory-07964]] pname:memory must: be currently host mapped ifdef::VK_EXT_map_memory_placed[] - * If ename:VK_MEMORY_UNMAP_RESERVE_BIT_EXT is set in pname:flags, - the <<features-memoryUnmapReserve, pname:memoryUnmapReserve>> - must: be enabled + * [[VUID-VkMemoryUnmapInfoKHR-flags-09579]] + If ename:VK_MEMORY_UNMAP_RESERVE_BIT_EXT is set in pname:flags, the + <<features-memoryUnmapReserve, pname:memoryUnmapReserve>> must: be + enabled ifdef::VK_EXT_external_memory_host[] - * If ename:VK_MEMORY_UNMAP_RESERVE_BIT_EXT is set in pname:flags, the + * [[VUID-VkMemoryUnmapInfoKHR-flags-09580]] + If ename:VK_MEMORY_UNMAP_RESERVE_BIT_EXT is set in pname:flags, the memory object must: not have been imported from a handle type of ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT @@ -4022,8 +4036,8 @@ include::{generated}/validity/structs/VkMemoryUnmapInfoKHR.adoc[] ifdef::VK_EXT_map_memory_placed[] [open,refpage='VkMemoryUnmapFlagBitsKHR',desc='Bitmask specifying additional parameters of a memory unmap',type='enums'] -- -Bits which can: be set in slink:VkMemoryUnmapInfoKHR::pname:flags, specifying -additional properties of a memory unmap, are: +Bits which can: be set in slink:VkMemoryUnmapInfoKHR::pname:flags, +specifying additional properties of a memory unmap, are: include::{generated}/api/enums/VkMemoryUnmapFlagBitsKHR.adoc[] @@ -4031,8 +4045,8 @@ include::{generated}/api/enums/VkMemoryUnmapFlagBitsKHR.adoc[] range currently occupied by the memory map remain reserved after the flink:vkUnmapMemory2KHR call completes. Future system memory map operations or calls to flink:vkMapMemory or - flink:vkMapMemory2KHR will not return addresses in that range unless - the range has since been unreserved by the client or the mapping is + flink:vkMapMemory2KHR will not return addresses in that range unless the + range has since been unreserved by the client or the mapping is explicitly placed in that range by calling flink:vkMapMemory2KHR with ename:VK_MEMORY_MAP_PLACED_BIT_EXT, or doing the system memory map equivalent. diff --git a/chapters/pipelines.adoc b/chapters/pipelines.adoc index 84cbd77e..8d48e197 100755 --- a/chapters/pipelines.adoc +++ b/chapters/pipelines.adoc @@ -2335,12 +2335,6 @@ ifdef::VK_VERSION_1_1,VK_KHR_multiview[] pre-rasterization shader state>>, and pname:subpass viewMask is not `0`, then all of the shaders in the pipeline must: not include variables decorated with the code:Layer built-in decoration in their interfaces - * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07717]] - If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is - being created with <<pipelines-graphics-subsets-pre-rasterization, - pre-rasterization shader state>>, and pname:subpass viewMask is not `0`, - then all of the shaders in the pipeline must: not include variables - decorated with the code:ViewMask built-in decoration in their interfaces ifdef::VK_EXT_mesh_shader[] * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07064]] If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being @@ -3224,13 +3218,6 @@ ifdef::VK_KHR_multiview,VK_VERSION_1_1[] slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of the shaders in the pipeline must: not include variables decorated with the code:Layer built-in decoration in their interfaces - * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07719]] - If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being - created with <<pipelines-graphics-subsets-pre-rasterization, - pre-rasterization shader state>>, and - slink:VkPipelineRenderingCreateInfo::pname:viewMask is not `0`, all of - the shaders in the pipeline must: not include variables decorated with - the code:ViewIndex built-in decoration in their interfaces ifdef::VK_EXT_mesh_shader[] * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-07720]] If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being diff --git a/chapters/raytraversal.adoc b/chapters/raytraversal.adoc index 853161a4..a206d416 100644 --- a/chapters/raytraversal.adoc +++ b/chapters/raytraversal.adoc @@ -47,7 +47,7 @@ Thus an implementation should behave as if the ray is transformed from the origin for each instance independently. ==== -Next, rays are tested against geometries in an bottom-level acceleration +Next, rays are tested against geometries in a bottom-level acceleration structure to determine if a hit occurred between them, initially based only on their geometric properties (i.e. their vertices). The implementation performs similar operations to that of rasterization, but diff --git a/chapters/renderpass.adoc b/chapters/renderpass.adoc index be51f870..918286ed 100644 --- a/chapters/renderpass.adoc +++ b/chapters/renderpass.adoc @@ -4113,7 +4113,7 @@ ifdef::VK_KHR_fragment_shading_rate[] format of ename:VK_FORMAT_UNDEFINED, slink:VkFragmentShadingRateAttachmentInfoKHR::pname:pFragmentShadingRateAttachment must: either be `NULL` or a slink:VkAttachmentReference2 structure with - a pname:attachment value of ename:VK_ATTACHMENT_UNUSED + an pname:attachment value of ename:VK_ATTACHMENT_UNUSED endif::VK_KHR_fragment_shading_rate[] * [[VUID-VkSubpassDescription2-externalFormatResolve-09348]] If <<features-externalFormatResolve,pname:externalFormatResolve>> is diff --git a/chapters/resources.adoc b/chapters/resources.adoc index ba5fb113..cd0fd51f 100644 --- a/chapters/resources.adoc +++ b/chapters/resources.adoc @@ -3770,10 +3770,11 @@ flink:vkGetImageSubresourceLayout, with the ability to specify extended inputs via chained input structures, and to return extended information via chained output structures. -It is legal to call fname:vkGetImageSubresourceLayout2KHR with a pname:image -created with pname:tiling equal to ename:VK_IMAGE_TILING_OPTIMAL, but the -members of slink:VkSubresourceLayout2KHR::pname:subresourceLayout will have -undefined: values in this case. +It is legal to call fname:vkGetImageSubresourceLayout2KHR with an +pname:image created with pname:tiling equal to +ename:VK_IMAGE_TILING_OPTIMAL, but the members of +slink:VkSubresourceLayout2KHR::pname:subresourceLayout will have undefined: +values in this case. [NOTE] .Note @@ -8170,7 +8171,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] The precise size of images that will be bound to external Android hardware buffer memory is unknown until the memory has been imported or allocated, so applications must: not call flink:vkGetImageMemoryRequirements or -flink:vkGetImageMemoryRequirements2 with such an slink:VkImage before it has +flink:vkGetImageMemoryRequirements2 with such a slink:VkImage before it has been bound to memory. ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[] For this reason, applications also must: not call @@ -10031,8 +10032,8 @@ To initialize a buffer collection on Fuchsia: [open,refpage='vkCreateBufferCollectionFUCHSIA',desc='Create a new buffer collection',type='protos'] -- -To create an slink:VkBufferCollectionFUCHSIA for Vulkan to participate in -the buffer collection: +To create a slink:VkBufferCollectionFUCHSIA for Vulkan to participate in the +buffer collection: include::{generated}/api/protos/vkCreateBufferCollectionFUCHSIA.adoc[] diff --git a/chapters/shaders.adoc b/chapters/shaders.adoc index 1ff9b6f3..db7a7553 100644 --- a/chapters/shaders.adoc +++ b/chapters/shaders.adoc @@ -717,11 +717,12 @@ code created on a device with a different or unknown pname:shaderBinaryUUID and/or higher pname:shaderBinaryVersion. In this case, the implementation may: use any unspecified means of its choosing to determine whether the provided binary shader code is usable. -If it is, the flink:vkCreateShadersEXT call must: return ename:VK_SUCCESS, -and the created shader object is guaranteed to be valid. -Otherwise, in the absence of some other error, the flink:vkCreateShadersEXT -call must: return ename:VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT to indicate -that the provided binary shader code is not compatible with the device. +If it is, flink:vkCreateShadersEXT must: return ename:VK_SUCCESS, and the +created shader object is guaranteed to be valid. +Otherwise, in the absence of some error, flink:vkCreateShadersEXT must: +return ename:VK_INCOMPATIBLE_SHADER_BINARY_EXT to indicate that the provided +binary shader code is not compatible with the device. + [[shaders-objects-binding]] === Binding Shader Objects diff --git a/chapters/synchronization.adoc b/chapters/synchronization.adoc index 92d1ac3d..ba8782e9 100644 --- a/chapters/synchronization.adoc +++ b/chapters/synchronization.adoc @@ -6347,7 +6347,7 @@ include::{generated}/api/protos/vkCmdPipelineBarrier.adoc[] ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[] fname:vkCmdPipelineBarrier operates almost identically to flink:vkCmdPipelineBarrier2, except that the scopes and barriers are defined -as direct parameters rather than being defined by an slink:VkDependencyInfo. +as direct parameters rather than being defined by a slink:VkDependencyInfo. endif::VK_VERSION_1_3,VK_KHR_synchronization2[] When flink:vkCmdPipelineBarrier is submitted to a queue, it defines a memory diff --git a/chapters/textures.adoc b/chapters/textures.adoc index 5e4dcbd9..eee9cfd7 100644 --- a/chapters/textures.adoc +++ b/chapters/textures.adoc @@ -3594,9 +3594,9 @@ The target view and reference view can be the same view, allowing block matching of two blocks within a single image. Similar to an equivalent code:OpImageFetch instruction, -code:opImageBlockMatchSAD and code:opImageBlockMatchSAD specify a code:image -and an integer texel code:coordinate which which describes the bottom-left -texel of the target block. +code:opImageBlockMatchSAD and code:opImageBlockMatchSAD specify an +code:image and an integer texel code:coordinate which which describes the +bottom-left texel of the target block. There are three additional inputs. The code:reference and code:refCoodinate specifies bottom-left texel of the reference block. diff --git a/chapters/videocoding.adoc b/chapters/videocoding.adoc index ddab7599..bd64b83e 100644 --- a/chapters/videocoding.adoc +++ b/chapters/videocoding.adoc @@ -354,8 +354,8 @@ pname:pNext chain. [[video-profile-error-codes]] When this structure is specified as an input parameter to flink:vkGetPhysicalDeviceVideoCapabilitiesKHR, or through the -pname:pProfiles member of an slink:VkVideoProfileListInfoKHR structure in -the pname:pNext chain of the input parameter of a query command such as +pname:pProfiles member of a slink:VkVideoProfileListInfoKHR structure in the +pname:pNext chain of the input parameter of a query command such as flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR or flink:vkGetPhysicalDeviceImageFormatProperties2, the following error codes indicate specific causes of the failure of the query operation: diff --git a/config/attribs.adoc b/config/attribs.adoc index 73dab5bd..5b83e3ff 100644 --- a/config/attribs.adoc +++ b/config/attribs.adoc @@ -19,6 +19,7 @@ :sym1: ✓ :sym2: †:sym3: ‡ +:sym4: § :reg: ® :trade: ™ :harr: ↔ diff --git a/config/extension-highlighter/extension.rb b/config/extension-highlighter/extension.rb index 13dabc2d..08d62f83 100644 --- a/config/extension-highlighter/extension.rb +++ b/config/extension-highlighter/extension.rb @@ -40,7 +40,7 @@ class ExtensionHighlighterPreprocessorReader < PreprocessorReader # If it is an ifdef or ifndef, push the directive onto a stack # If it is an endif, pop the last one off. # This is done to apply the next bit of logic to both the start and end - # of an conditional block correctly + # of a conditional block correctly status = directive if directive == 'endif' status = @status_stack.pop @@ -103,7 +103,7 @@ class ExtensionHighlighterPreprocessorReader < PreprocessorReader # If it is an ifdef or ifndef, push the directive onto a stack # If it is an endif, pop the last one off. # This is done to apply the next bit of logic to both the start and end - # of an conditional block correctly + # of a conditional block correctly status = directive if directive == 'endif' status = @status_stack.pop diff --git a/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc b/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc index c057e23b..95d2c1ae 100644 --- a/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc +++ b/proposals/VK_EXT_dynamic_rendering_unused_attachments.adoc @@ -46,7 +46,7 @@ with undefined formats. The VUIDs that contribute to this limitation are: <dt>[VUID-vkCmdDraw-colorAttachmentCount-07616](https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html#VUID-vkCmdDraw-colorAttachmentCount-07616)</dt> -<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the currently bound pipeline equal to VK_FORMAT_UNDEFINED</dd> +<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the currently bound pipeline equal to VK_FORMAT_UNDEFINED</dd> <dt>[VUID-vkCmdDraw-pDepthAttachment-07617](https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html#VUID-vkCmdDraw-pDepthAttachment-07617)</dt> <dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the currently bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED</dd> @@ -58,7 +58,7 @@ The VUIDs that contribute to this limitation are: <dd>If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, if the imageView member of an element of the VkRenderingInfo::pColorAttachments parameter to vkCmdBeginRendering is VK_NULL_HANDLE, the corresponding element of the pColorAttachmentFormats member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be VK_FORMAT_UNDEFINED</dd> <dt>[VUID-vkCmdDraw-colorAttachmentCount-06180](https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-colorAttachmentCount-06180)</dt> -<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the currently bound graphics pipeline</dd> +<dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the currently bound graphics pipeline</dd> <dt>[VUID-vkCmdDraw-pDepthAttachment-06181](https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-pDepthAttachment-06181)</dt> <dd>If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the currently bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView</dd> diff --git a/proposals/VK_EXT_map_memory_placed.adoc b/proposals/VK_EXT_map_memory_placed.adoc index 91037207..a35b69fc 100644 --- a/proposals/VK_EXT_map_memory_placed.adoc +++ b/proposals/VK_EXT_map_memory_placed.adoc @@ -1,5 +1,4 @@ -// Copyright 2022-2023 The Khronos Group, Inc. -// +// Copyright 2022-2024 The Khronos Group, Inc. // SPDX-License-Identifier: CC-BY-4.0 # VK_EXT_map_memory_placed @@ -103,7 +102,7 @@ If the map cannot be placed exactly at the specified virtual address, When `VK_MEMORY_UNMAP_RESERVE_BIT_EXT` is set in the `flags` member of `VkMemoryUnmapInfoEXT`, the memory object will be unmapped but the address range will remain reserved so that another call to `mmap()` or -`vkMapMemory()` will not re-use that address range without an address hint +`vkMapMemory()` will not reuse that address range without an address hint or `VK_MEMORY_MAP_PLACED_BIT_EXT`, respectively. ## Examples diff --git a/proposals/VK_EXT_shader_object.adoc b/proposals/VK_EXT_shader_object.adoc index 589deab1..c3407e85 100644 --- a/proposals/VK_EXT_shader_object.adoc +++ b/proposals/VK_EXT_shader_object.adoc @@ -51,7 +51,7 @@ Several approaches are immediately apparent: Option 1 is a natural extension of recent efforts and requires relatively few API changes, but it adds even more complexity to the already very complex pipeline concept, while also failing to adequately address significant parts of the problem. While directly bindable pipeline libraries do reduce the dimensionality of pipeline combinatorics, they do not provide any meaningful absolute CPU performance improvement at pipeline bind time. The total overhead of binding N different pipeline libraries is still roughly on par with the overhead of binding a single (monolithic or linked) pipeline. -Option 2 also requires relatively few API changes and would do more to address bind time CPU performance than option 1, but this option is limited in both the class of issues it can address and its portability across implementations. Much of the universally supportable "low hanging fruit" dynamic state has already been exposed by the existing extended dynamic state extensions, and the remaining state is mostly not universally dynamic. Exposing states A and B as dynamic on one implementation and states B and C on another is still valuable, but it limits this approach's benefits for simplifying application architectures. Even though this option is not a complete solution, it can and should be pursued in parallel with other efforts -- both for its own sake and as a potential foundation for more a comprehensive solution. +Option 2 also requires relatively few API changes and would do more to address bind time CPU performance than option 1, but this option is limited in both the class of issues it can address and its portability across implementations. Much of the universally supportable "low hanging fruit" dynamic state has already been exposed by the existing extended dynamic state extensions, and the remaining state is mostly not universally dynamic. Exposing states A and B as dynamic on one implementation and states B and C on another is still valuable, but it limits this approach's benefits for simplifying application architectures. Even though this option is not a complete solution, it can and should be pursued in parallel with other efforts -- both for its own sake and as a potential foundation for more a comprehensive solution. Option 3 is more radical, but brings the API design more in line with developer expectations. The pipeline abstraction has been a consistent problem for many developers trying to use Vulkan since its inception, and this option can produce a cleaner, more user-friendly abstraction that bypasses the complexity of pipelines. With the benefit of years of hindsight and broader Working Group knowledge about the constraints of each others' implementations, it can aim to achieve a design which better balances API simplicity with adherence to the explicit design ethos of Vulkan. @@ -143,7 +143,7 @@ When `pData` is `NULL`, `size` is filled with the number of bytes needed to stor When `pData` is non-`NULL`, `size` points to the application-provided size of `pData`. If the provided size is large enough then the location pointed to by `pData` is filled with the shader’s binary code and `VK_SUCCESS` is returned, otherwise nothing is written to `pData` and `VK_INCOMPLETE` is returned. -The binary shader code returned in `pData` can be saved by the application and used in a future `vkCreateShadersEXT()` call (including on a different `VkInstance` and/or `VkDevice`) with a compatible physical device by setting `codeType` to `VK_SHADER_CODE_TYPE_BINARY_EXT`. This means that on fixed platforms like game consoles and embedded systems applications need not ship SPIR-V shader code at all. If the binary shader code in any `VkShaderCreateInfoEXT` passed to `vkCreateShadersEXT()` is not compatible with the physical device then the `vkCreateShadersEXT()` call returns `VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT`. +The binary shader code returned in `pData` can be saved by the application and used in a future `vkCreateShadersEXT()` call (including on a different `VkInstance` and/or `VkDevice`) with a compatible physical device by setting `codeType` to `VK_SHADER_CODE_TYPE_BINARY_EXT`. This means that on fixed platforms like game consoles and embedded systems applications need not ship SPIR-V shader code at all. If the binary shader code in any `VkShaderCreateInfoEXT` passed to `vkCreateShadersEXT()` is not compatible with the physical device then the `vkCreateShadersEXT()` call returns `VK_INCOMPATIBLE_SHADER_BINARY_EXT`. Applications must pass the same values of `VK_SHADER_CREATE_LINK_STAGE_BIT_EXT` to a `vkCreateShadersEXT()` call with a `codeType` of `VK_SHADER_CODE_TYPE_BINARY_EXT` as were passed when those shaders were originally compiled from SPIR-V. @@ -695,6 +695,19 @@ This could be addressed by introducing a new MinSampleShading shader builtin whi Until such an extension is available, applications that need to specify a minSampleShading other than 1.0 should use pipelines. +=== RESOLVED: Is `VK_INCOMPATIBLE_SHADER_BINARY_EXT` a success code, or an error code? + +A success code. + +Initially this token was named `VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT`, +but as pointed out in +https://github.com/KhronosGroup/Vulkan-Docs/issues/2295 the numeric value +assigned to the token was positive. + +On further discussion we agreed that the return code was a success code, +much as `VK_INCOMPLETE` is, and aliased the original name to the current name +without `ERROR` in it. + == Further Functionality * Shader optimization hints diff --git a/proposals/VK_EXT_subpass_merge_feedback.adoc b/proposals/VK_EXT_subpass_merge_feedback.adoc index d5811ee9..70fda900 100644 --- a/proposals/VK_EXT_subpass_merge_feedback.adoc +++ b/proposals/VK_EXT_subpass_merge_feedback.adoc @@ -28,7 +28,7 @@ provide subpass merging feedback and control subpass merging at render pass crea If the subpasses cannot be merged, the reason could be returned. The driver could change the conditions of subpass merging based on performance result, or being compatible with future new -extensions, so using a string to store the reason is more flexible than a enumeration. +extensions, so using a string to store the reason is more flexible than an enumeration. == Proposal diff --git a/proposals/VK_HUAWEI_cluster_culling_shader.adoc b/proposals/VK_HUAWEI_cluster_culling_shader.adoc index 5a7656fd..89c13c57 100644 --- a/proposals/VK_HUAWEI_cluster_culling_shader.adoc +++ b/proposals/VK_HUAWEI_cluster_culling_shader.adoc @@ -153,7 +153,7 @@ If the `VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI` structure is inclu ==== built-in -cluster culling shader have the following built-in output variables, these variables form a aforementioned drawing command. +Cluster Culling Shaders have the following built-in output variables, these variables form an aforementioned drawing command. * `IndexCountHUAWEI` is the number of vertices to draw. diff --git a/proposals/VK_KHR_dynamic_rendering_local_read.adoc b/proposals/VK_KHR_dynamic_rendering_local_read.adoc index 0bfb8553..951e9769 100644 --- a/proposals/VK_KHR_dynamic_rendering_local_read.adoc +++ b/proposals/VK_KHR_dynamic_rendering_local_read.adoc @@ -189,7 +189,7 @@ NOTE: Some implementations may have to now provide a real descriptor when advert === Interactions with link:{refpage}VK_EXT_shader_object.html[VK_EXT_shader_object] -If link:{refpage}VK_EXT_shader_object.html[VK_EXT_shader_object] is enabled, `vkCmdSetRenderingAttachmentLocationsKHR` and `vkCmdSetRenderingInputAttachmentIndicesKHR` are the the only way to set the remapping state; the respective structures do not need to be chained to shader object creation or match any static state. +If link:{refpage}VK_EXT_shader_object.html[VK_EXT_shader_object] is enabled, `vkCmdSetRenderingAttachmentLocationsKHR` and `vkCmdSetRenderingInputAttachmentIndicesKHR` are the only way to set the remapping state; the respective structures do not need to be chained to shader object creation or match any static state. === Interactions with link:{refpage}VK_EXT_rasterization_order_attachment_access.html[VK_EXT_rasterization_order_attachment_access] diff --git a/proposals/VK_KHR_fragment_shading_rate.adoc b/proposals/VK_KHR_fragment_shading_rate.adoc index 4dda30ed..b8fdd1c3 100644 --- a/proposals/VK_KHR_fragment_shading_rate.adoc +++ b/proposals/VK_KHR_fragment_shading_rate.adoc @@ -26,9 +26,9 @@ However, this requires careful state management, and requires awkward sorting of Different applications may want to change the rate per-draw, per-triangle, or per-screen-region. While it would be possible to modify the behavior of sample shading to be modifiable at different rates to solve this, multisample state is relatively complex, and could result in tricky edge cases for some applications. The alternative is to provide a new shading rate state that is independent of multisampling, and enable it to be set at each separate rate. -In either case, per draw rate can be set by pipeline or dynamic state, but for per-triangle and per-screen-region use cases, new mechanisms will be needed. For per-triangle state, the usual way of setting this is in the API is by providing data along with the provoking vertex. For the screen regions, two main options are viable - either an associated image which has sub regions identifying the state, or providing some sort of equation to be applied across the screen. +In either case, per draw rate can be set by pipeline or dynamic state, but for per-triangle and per-screen-region use cases, new mechanisms will be needed. For per-triangle state, the usual way of setting this in the API is by providing data along with the provoking vertex. For the screen regions, two main options are viable - either an associated image which has sub regions identifying the state, or providing some sort of equation to be applied across the screen. -Due to the complexity and potential fragility of multisample state, this proposal introduces new shading rate state to the API. As not all known use cases for screen-region state can be expressed as an straightforward equation, per-image state allowing arbitrary expression of regions is preferred. +Due to the complexity and potential fragility of multisample state, this proposal introduces new shading rate state to the API. As not all known use cases for screen-region state can be expressed as a straightforward equation, per-image state allowing arbitrary expression of regions is preferred. == Proposal diff --git a/proposals/VK_KHR_shader_maximal_reconvergence.adoc b/proposals/VK_KHR_shader_maximal_reconvergence.adoc index 7b361e4e..f753b509 100644 --- a/proposals/VK_KHR_shader_maximal_reconvergence.adoc +++ b/proposals/VK_KHR_shader_maximal_reconvergence.adoc @@ -28,7 +28,7 @@ different devices (or even different drivers of the same device). VK_KHR_shader_subgroup_uniform_control_flow provides stronger guarantees, but still has some drawbacks from a shader author's point of view. Shader authors would like to be able to reason about the divergence and -reconvergence of invocations executing shaders written in a HLL and have that +reconvergence of invocations executing shaders written in an HLL and have that reasoning translate faithfully into SPIR-V. == Solution Space @@ -39,7 +39,7 @@ The following options were considered to address this issue: divergence and reconvergence information directly in the shader. 2. Add new guarantees to SPIR-V (through a new execution mode) that guarantee divergence and reconvergence in SPIR-V maps intuitively from the shader's - representation in a HLL. + representation in an HLL. The main advantage of option 1 is that is completely explicit. The main disadvantage is it likely requires additional changes in HLL diff --git a/proposals/VK_QCOM_image_processing.adoc b/proposals/VK_QCOM_image_processing.adoc index 3bb90c2a..5b99458f 100644 --- a/proposals/VK_QCOM_image_processing.adoc +++ b/proposals/VK_QCOM_image_processing.adoc @@ -445,7 +445,7 @@ corresponds to one phase of the filter. The view's `VkImageViewSampleWeightCreateInfoQCOM::numPhases`. The phases are stored as layers in the 2D array, in horizontal phase major order, left-to-right and top-to-bottom. Expressed as a formula, -the layer index for a each filter phase is computed as: +the layer index for each filter phase is computed as: [source,c] ---- diff --git a/registry.adoc b/registry.adoc index 46178987..1bff7330 100644 --- a/registry.adoc +++ b/registry.adoc @@ -558,14 +558,23 @@ The tag:member tag defines the type and name of a structure or union member. * attr:values - only valid on the `sType` member of a struct. This is a comma-separated list of enumerant values that are valid for the structure type; usually there is only a single value. - * attr:len - if the member is an array, len may be one or more of the - following things, separated by commas (one for each array indirection): - another member of that struct; `"null-terminated"` for a string; `"1"` - to indicate it is just a pointer (used for nested pointers); or an - equation in math markup for incorporation in the specification (a LaTeX - math expression delimited by `latexmath:[` and `]`. - The only variables in the equation should be the names of members of the - structure. + * attr:len - valid length of the data described by the member. + If the member is a static array, attr:len must be less than or equal + to the size of the array; if not present for a static array, all + elements of the array are considered valid. + If the member is a pointer, attr:len is the length of the pointed-to + data. + attr:len must contain one or more expressions defining length (one for + each array indirection), separated by commas. + Each expression may be one of: + ** the name of another member of this struct + ** `"null-terminated"`, indicating a pointer to a null-terminated UTF-8 + string + ** `"1"` to indicate it is just a pointer (used for nested pointers) + ** an equation in math markup for incorporation in the specification (a + LaTeX math expression delimited by `latexmath:[` and `]`. + The only variables in the equation should be the names of members of + the structure. * attr:altlen - if the attr:len attribute is specified, and contains a `latexmath:` equation, this attribute should be specified with an equivalent equation using only C builtin operators, C math library @@ -895,7 +904,7 @@ Each tag:enum tag defines a single Vulkan (or other API) token. [NOTE] .Note ==== -Using attr:alias on a tag:enum means you want the attr:name defined by the +Using attr:alias on an tag:enum means you want the attr:name defined by the tag to be treated as an alias of the token name in the attr:alias attribute value. For example, the following tag defines `VK_ALIAS` as an alias of `VK_VALUE`: @@ -1139,14 +1148,23 @@ and union members. This definition is only used if the requested API name matches the attribute. May be used to address subtle incompatibilities. - * attr:len - if the param is an array, len may be one or more of the - following things, separated by commas (one for each array indirection): - another param of that command; `"null-terminated"` for a string; `"1"` - to indicate it is just a pointer (used for nested pointers); or an - equation in math markup for incorporation in the specification (a LaTeX - math expression delimited by `latexmath:[` and `]`. - The only variables in the equation should be the names of this or other - parameters. + * attr:len - valid length of the data described by the parameter. + If the parameter is a static array, attr:len must be less than or equal + to the size of the array; if not present for a static array, all + elements of the array are considered valid. + If the parameter is a pointer, attr:len is the length of the pointed-to + data. + attr:len must contain one or more expressions defining length (one for + each array indirection), separated by commas. + Each expression may be one of: + ** the name of another parameter of this command + ** `"null-terminated"`, indicating a pointer to a null-terminated UTF-8 + string + ** `"1"` to indicate it is just a pointer (used for nested pointers) + ** an equation in math markup for incorporation in the specification (a + LaTeX math expression delimited by `latexmath:[` and `]`. + The only variables in the equation should be the names of parameters of + the command. * attr:altlen - if the attr:len attribute is specified, and contains a `latexmath:` equation, this attribute should be specified with an equivalent equation using only C builtin operators, C math library @@ -1647,7 +1665,7 @@ Zero or more of the following tags, in any order: === Command Tags -tag:command specifies an required (or removed) command defined in a +tag:command specifies a required (or removed) command defined in a tag:commands block. The tag has no content, but contains attributes: @@ -1658,7 +1676,7 @@ The tag has no content, but contains attributes: === Enum Tags -tag:enum specifies an required (or removed) enumerant defined in a tag:enums +tag:enum specifies a required (or removed) enumerant defined in an tag:enums block. All forms of this tag support the following attributes: @@ -1681,10 +1699,10 @@ No attributes other than attr:name and attr:comment are supported for them. tag:enum tags appearing inside tag:remove tags should always be reference enums. Reference enums may also be used inside tag:require tags, if the -corresponding value is defined in a tag:enums block. +corresponding value is defined in an tag:enums block. This is typically used for constants not part of an enumerated type. -_Extension enums_ define the value of an enumerant inline in an tag:feature +_Extension enums_ define the value of an enumerant inline in a tag:feature or tag:extensions block. Typically these are used to add additional values specified by an extension or core feature to an existing enumerated type. @@ -1733,7 +1751,7 @@ enumerant: It may also be used when token names have been changed as a result of profile changes, or for consistency purposes. * attr:protect - define a preprocessor protection symbol for the enum in - the same fashion as a tag:enum tag in an <<tag-enum,tag:enums>> block. + the same fashion as an tag:enum tag in an <<tag-enum,tag:enums>> block. Not all combinations of attributes are either meaningful or supported. The attr:protect attribute may always be present. @@ -2017,7 +2035,7 @@ extensions which are defined for the API. == Contents of tag:spirvextensions Tags Each tag:spirvextensions block contains zero or more tag:spirvextension tags, each -describing an single SPIR-V extension, in arbitrary order. +describing a single SPIR-V extension, in arbitrary order. [[tag-spirvextension]] @@ -2062,7 +2080,7 @@ capabilities which are defined for the API. == Contents of tag:spirvcapabilities Tags Each tag:spirvcapabilities block contains zero or more tag:spirvcapability -tags, each describing an single SPIR-V capability, in arbitrary order. +tags, each describing a single SPIR-V capability, in arbitrary order. [[tag-spirvcapability]] @@ -3031,6 +3049,9 @@ Changes to the `.xml` files and Python scripts are logged in GitHub history. [[changelog]] = Change Log + * 2024-01-31 - Specify the meaning of the tag:member attr:len attribute of + structure members when the member is a static array (internal issue + 3743). * 2023-11-24 - Clarify that the `promotedto` relationship which may be defined for <<tag-extension, tag:extension>> tags does not promise exact API-level compatibility (internal issue 4819). diff --git a/scripts/doctransformer.py b/scripts/doctransformer.py index 3ccfa3ac..b41f3c90 100644 --- a/scripts/doctransformer.py +++ b/scripts/doctransformer.py @@ -349,7 +349,7 @@ class DocTransformer: # accumulated. # Test for a blockCommonTransform delimiter comment first, to avoid - # treating it solely as a end-Paragraph marker comment. + # treating it solely as an end-Paragraph marker comment. if line == blockCommonTransform: # Starting or ending a pseudo-block for "common" VU statements. self.endParaBlockTransform(line, vuBlock = True) diff --git a/scripts/extensionmetadocgenerator.py b/scripts/extensionmetadocgenerator.py index 37ad69c4..d50d6898 100644 --- a/scripts/extensionmetadocgenerator.py +++ b/scripts/extensionmetadocgenerator.py @@ -233,7 +233,7 @@ class Extension: tagPrefix = '\n== ' tagSuffix = '' else: - # Use an bolded item list for the tag name + # Use a bolded item list for the tag name tagPrefix = '*' tagSuffix = '*::' @@ -265,7 +265,7 @@ class Extension: if not isRefpage: write('[[' + self.name + ']]', file=fp) - write('=== ' + self.name, file=fp) + write('== ' + self.name, file=fp) write('', file=fp) self.writeTag('Name String', '`' + self.name + '`', isRefpage, fp) @@ -673,8 +673,14 @@ class ExtensionMetaDocOutputGenerator(OutputGenerator): for name in sorted_keys: ext = self.extensions[name] - include = self.makeExtensionInclude(ext.name) + # Increase the leveloffset of the extension include so it is + # lower than the subsection (extension name) it belongs to + include = ':leveloffset: +1\n' + include += '\n' + self.makeExtensionInclude(ext.name) + '\n\n' + include += ':leveloffset: -1\n' + link = ' * ' + self.conventions.formatExtension(ext.name) + if ext.provisional == 'true': write(self.conditionalExt(ext.name, include), file=provisional_extension_appendices_fp) write(self.conditionalExt(ext.name, link), file=provisional_extension_appendices_toc_fp) diff --git a/scripts/genvk.py b/scripts/genvk.py index 6895adcb..f2aeddfe 100755 --- a/scripts/genvk.py +++ b/scripts/genvk.py @@ -52,7 +52,7 @@ def makeGenOpts(args): by specified short names. The generator options incorporate the following parameters: - args is an parsed argument object; see below for the fields that are used.""" + args is a parsed argument object; see below for the fields that are used.""" global genOpts genOpts = {} @@ -963,7 +963,7 @@ def genTarget(args): the requested target and command line options. This is encapsulated in a function so it can be profiled and/or timed. - The args parameter is an parsed argument object containing the following + The args parameter is a parsed argument object containing the following fields that are used: - target - target to generate diff --git a/scripts/indexExt.py b/scripts/indexExt.py index ee0b76b3..88c41ee1 100755 --- a/scripts/indexExt.py +++ b/scripts/indexExt.py @@ -37,7 +37,7 @@ def listExts(vendor, ext, tag): for name in sorted(ext[vendor]): print(fmtString.format(name)) -# -extension name - may be a single extension name, a a space-separated list +# -extension name - may be a single extension name, a space-separated list # of names, or a regular expression. if __name__ == '__main__': parser = argparse.ArgumentParser() diff --git a/scripts/interfacedocgenerator.py b/scripts/interfacedocgenerator.py index 9f34bfc8..0c35f695 100644 --- a/scripts/interfacedocgenerator.py +++ b/scripts/interfacedocgenerator.py @@ -16,7 +16,7 @@ def interfaceDocSortKey(item): class InterfaceDocGenerator(OutputGenerator): """InterfaceDocGenerator - subclass of OutputGenerator. - Generates AsciiDoc includes of the interfaces added by a an API version + Generates AsciiDoc includes of the interfaces added by an API version or extension.""" def __init__(self, *args, **kwargs): diff --git a/scripts/parse_dependency.py b/scripts/parse_dependency.py index e997da54..5d204959 100755 --- a/scripts/parse_dependency.py +++ b/scripts/parse_dependency.py @@ -83,7 +83,7 @@ def leafMarkupC(name): opMarkupAsciidocMap = { '+' : 'and', ',' : 'or' } def opMarkupAsciidoc(op): - """Markup a operator as an asciidoc spec markup equivalent + """Markup an operator as an asciidoc spec markup equivalent - op - operator ('+' or ',')""" @@ -92,7 +92,7 @@ def opMarkupAsciidoc(op): opMarkupCMap = { '+' : '&&', ',' : '||' } def opMarkupC(op): - """Markup a operator as an C language equivalent + """Markup an operator as a C language equivalent - op - operator ('+' or ',')""" diff --git a/scripts/validitygenerator.py b/scripts/validitygenerator.py index bbe6512a..f9a9efc1 100755 --- a/scripts/validitygenerator.py +++ b/scripts/validitygenerator.py @@ -886,7 +886,7 @@ class ValidityOutputGenerator(OutputGenerator): return self.makeEnumerantName(self.conventions.generate_structure_type_from_name(structname)) def makeStructureTypeValidity(self, structname): - """Generate an validity line for the type value of a struct. + """Generate a validity line for the type value of a struct. Creates VUID named like the member name. """ @@ -934,7 +934,7 @@ class ValidityOutputGenerator(OutputGenerator): return entry def makeStructureExtensionPointer(self, blockname, param): - """Generate an validity line for the pointer chain member value of a struct.""" + """Generate a validity line for the pointer chain member value of a struct.""" param_name = getElemName(param) if param.get('validextensionstructs') is not None: diff --git a/scripts/xml_consistency.py b/scripts/xml_consistency.py index 91864dba..5f59a02a 100755 --- a/scripts/xml_consistency.py +++ b/scripts/xml_consistency.py @@ -94,6 +94,7 @@ CHECK_MEMBER_PNEXT_OPTIONAL_EXCEPTIONS = ( CHECK_ARRAY_ENUMERATION_RETURN_CODE_EXCEPTIONS = ( 'vkGetDeviceFaultInfoEXT', 'vkEnumerateDeviceLayerProperties', + 'vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI', ) # Exceptions to unknown structure type constants. diff --git a/xml/registry.rnc b/xml/registry.rnc index ce27ec00..9d27ae75 100644 --- a/xml/registry.rnc +++ b/xml/registry.rnc @@ -709,7 +709,7 @@ InterfaceElement = # as a placeholder. Integer = text -# EnumName is an compile-time constant name +# EnumName is a compile-time constant name EnumName = text # TypeName is an argument/return value C type name @@ -175,7 +175,7 @@ branch of the member gitlab server. #define <name>VKSC_API_VERSION_1_0</name> <type>VK_MAKE_API_VERSION</type>(VKSC_API_VARIANT, 1, 0, 0)// Patch version should always be set to 0</type> <type api="vulkan" category="define">// Version of this file -#define <name>VK_HEADER_VERSION</name> 277</type> +#define <name>VK_HEADER_VERSION</name> 278</type> <type api="vulkan" category="define" requires="VK_HEADER_VERSION">// Complete version of this file #define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_API_VERSION</type>(0, 1, 3, VK_HEADER_VERSION)</type> <type api="vulkansc" category="define">// Version of this file @@ -502,7 +502,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <type requires="VkVideoDecodeH264PictureLayoutFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeH264PictureLayoutFlagsKHR</name>;</type> <comment>Video Encode Core extension</comment> - <type category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeFlagsKHR</name>;</type> + <type requires="VkVideoEncodeFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeFlagsKHR</name>;</type> <type requires="VkVideoEncodeUsageFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeUsageFlagsKHR</name>;</type> <type requires="VkVideoEncodeContentFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeContentFlagsKHR</name>;</type> <type requires="VkVideoEncodeCapabilityFlagBitsKHR" category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeCapabilityFlagsKHR</name>;</type> @@ -902,6 +902,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <comment>Video H.265 Decode extensions</comment> <comment>Video Encode extensions</comment> + <type name="VkVideoEncodeFlagBitsKHR" category="enum"/> <type name="VkVideoEncodeUsageFlagBitsKHR" category="enum"/> <type name="VkVideoEncodeContentFlagBitsKHR" category="enum"/> <type name="VkVideoEncodeTuningModeKHR" category="enum"/> @@ -1044,20 +1045,20 @@ typedef void* <name>MTLSharedEvent_id</name>; <member limittype="noauto"><type>uint32_t</type> <name>vendorID</name></member> <member limittype="noauto"><type>uint32_t</type> <name>deviceID</name></member> <member limittype="noauto"><type>VkPhysicalDeviceType</type> <name>deviceType</name></member> - <member limittype="noauto"><type>char</type> <name>deviceName</name>[<enum>VK_MAX_PHYSICAL_DEVICE_NAME_SIZE</enum>]</member> + <member limittype="noauto" len="null-terminated"><type>char</type> <name>deviceName</name>[<enum>VK_MAX_PHYSICAL_DEVICE_NAME_SIZE</enum>]</member> <member limittype="noauto"><type>uint8_t</type> <name>pipelineCacheUUID</name>[<enum>VK_UUID_SIZE</enum>]</member> <member limittype="struct"><type>VkPhysicalDeviceLimits</type> <name>limits</name></member> <member limittype="struct"><type>VkPhysicalDeviceSparseProperties</type> <name>sparseProperties</name></member> </type> <type category="struct" name="VkExtensionProperties" returnedonly="true"> - <member><type>char</type> <name>extensionName</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]<comment>extension name</comment></member> - <member><type>uint32_t</type> <name>specVersion</name><comment>version of the extension specification implemented</comment></member> + <member len="null-terminated"><type>char</type> <name>extensionName</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]<comment>extension name</comment></member> + <member><type>uint32_t</type> <name>specVersion</name><comment>version of the extension specification implemented</comment></member> </type> <type category="struct" name="VkLayerProperties" returnedonly="true"> - <member><type>char</type> <name>layerName</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]<comment>layer name</comment></member> - <member><type>uint32_t</type> <name>specVersion</name><comment>version of the layer specification implemented</comment></member> - <member><type>uint32_t</type> <name>implementationVersion</name><comment>build or release version of the layer's library</comment></member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the layer</comment></member> + <member len="null-terminated"><type>char</type> <name>layerName</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]<comment>layer name</comment></member> + <member><type>uint32_t</type> <name>specVersion</name><comment>version of the layer specification implemented</comment></member> + <member><type>uint32_t</type> <name>implementationVersion</name><comment>build or release version of the layer's library</comment></member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the layer</comment></member> </type> <type category="struct" name="VkApplicationInfo"> <member values="VK_STRUCTURE_TYPE_APPLICATION_INFO"><type>VkStructureType</type> <name>sType</name></member> @@ -1113,10 +1114,10 @@ typedef void* <name>MTLSharedEvent_id</name>; <member limittype="min,mul"><type>VkExtent3D</type> <name>minImageTransferGranularity</name><comment>Minimum alignment requirement for image transfers</comment></member> </type> <type category="struct" name="VkPhysicalDeviceMemoryProperties" returnedonly="true"> - <member><type>uint32_t</type> <name>memoryTypeCount</name></member> - <member><type>VkMemoryType</type> <name>memoryTypes</name>[<enum>VK_MAX_MEMORY_TYPES</enum>]</member> - <member><type>uint32_t</type> <name>memoryHeapCount</name></member> - <member><type>VkMemoryHeap</type> <name>memoryHeaps</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member> + <member><type>uint32_t</type> <name>memoryTypeCount</name></member> + <member len="memoryTypeCount"><type>VkMemoryType</type> <name>memoryTypes</name>[<enum>VK_MAX_MEMORY_TYPES</enum>]</member> + <member><type>uint32_t</type> <name>memoryHeapCount</name></member> + <member len="memoryHeapCount"><type>VkMemoryHeap</type> <name>memoryHeaps</name>[<enum>VK_MAX_MEMORY_HEAPS</enum>]</member> </type> <type category="struct" name="VkMemoryAllocateInfo"> <member values="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"><type>VkStructureType</type> <name>sType</name></member> @@ -2595,8 +2596,8 @@ typedef void* <name>MTLSharedEvent_id</name>; <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> <member limittype="exact"><type>VkDriverId</type> <name>driverID</name></member> - <member limittype="exact"><type>char</type> <name>driverName</name>[<enum>VK_MAX_DRIVER_NAME_SIZE</enum>]</member> - <member limittype="exact"><type>char</type> <name>driverInfo</name>[<enum>VK_MAX_DRIVER_INFO_SIZE</enum>]</member> + <member limittype="exact" len="null-terminated"><type>char</type> <name>driverName</name>[<enum>VK_MAX_DRIVER_NAME_SIZE</enum>]</member> + <member limittype="exact" len="null-terminated"><type>char</type> <name>driverInfo</name>[<enum>VK_MAX_DRIVER_INFO_SIZE</enum>]</member> <member limittype="exact"><type>VkConformanceVersion</type> <name>conformanceVersion</name></member> </type> <type category="struct" name="VkPhysicalDeviceDriverPropertiesKHR" alias="VkPhysicalDeviceDriverProperties"/> @@ -3027,7 +3028,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> <member><type>uint32_t</type> <name>physicalDeviceCount</name></member> - <member><type>VkPhysicalDevice</type> <name>physicalDevices</name>[<enum>VK_MAX_DEVICE_GROUP_SIZE</enum>]</member> + <member len="physicalDeviceCount"><type>VkPhysicalDevice</type> <name>physicalDevices</name>[<enum>VK_MAX_DEVICE_GROUP_SIZE</enum>]</member> <member><type>VkBool32</type> <name>subsetAllocation</name></member> </type> <type category="struct" name="VkPhysicalDeviceGroupPropertiesKHR" alias="VkPhysicalDeviceGroupProperties"/> @@ -3310,7 +3311,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <type category="struct" name="VkPhysicalDeviceSurfaceInfo2KHR"> <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"><type>VkStructureType</type> <name>sType</name></member> <member optional="true">const <type>void</type>* <name>pNext</name></member> - <member optional="true"><type>VkSurfaceKHR</type> <name>surface</name></member> + <member noautovalidity="true" optional="true"><type>VkSurfaceKHR</type> <name>surface</name></member> </type> <type category="struct" name="VkSurfaceCapabilities2KHR" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member> @@ -3841,11 +3842,11 @@ typedef void* <name>MTLSharedEvent_id</name>; <member><type>VkBool32</type> <name>globalPriorityQuery</name></member> </type> <type category="struct" name="VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT" alias="VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR"/> - <type category="struct" name="VkQueueFamilyGlobalPriorityPropertiesKHR" structextends="VkQueueFamilyProperties2"> + <type category="struct" name="VkQueueFamilyGlobalPriorityPropertiesKHR" structextends="VkQueueFamilyProperties2" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member> - <member optional="true"><type>void</type>* <name>pNext</name></member> - <member limittype="max"><type>uint32_t</type> <name>priorityCount</name></member> - <member limittype="bitmask"><type>VkQueueGlobalPriorityKHR</type> <name>priorities</name>[<enum>VK_MAX_GLOBAL_PRIORITY_SIZE_KHR</enum>]</member> + <member optional="true"><type>void</type>* <name>pNext</name></member> + <member limittype="max"><type>uint32_t</type> <name>priorityCount</name></member> + <member limittype="bitmask" len="priorityCount"><type>VkQueueGlobalPriorityKHR</type> <name>priorities</name>[<enum>VK_MAX_GLOBAL_PRIORITY_SIZE_KHR</enum>]</member> </type> <type category="struct" name="VkQueueFamilyGlobalPriorityPropertiesEXT" alias="VkQueueFamilyGlobalPriorityPropertiesKHR"/> <type category="struct" name="VkDebugUtilsObjectNameInfoEXT" structextends="VkPipelineShaderStageCreateInfo"> @@ -5120,9 +5121,9 @@ typedef void* <name>MTLSharedEvent_id</name>; <member values="VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> <member optional="true"><type>VkPerformanceCounterDescriptionFlagsKHR</type> <name>flags</name></member> - <member><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>char</type> <name>category</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>category</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> </type> <type category="struct" name="VkQueryPoolPerformanceCreateInfoKHR" structextends="VkQueryPoolCreateInfo"> <member values="VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member> @@ -5191,7 +5192,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <member selection="VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"><type>VkBool32</type> <name>valueBool</name></member> <member selection="VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL" len="null-terminated">const <type>char</type>* <name>valueString</name></member> </type> - <type category="struct" name="VkPerformanceValueINTEL"> + <type category="struct" name="VkPerformanceValueINTEL" returnedonly="true"> <member><type>VkPerformanceValueTypeINTEL</type> <name>type</name></member> <member selector="type" noautovalidity="true"><type>VkPerformanceValueDataINTEL</type> <name>data</name></member> </type> @@ -5297,10 +5298,10 @@ typedef void* <name>MTLSharedEvent_id</name>; <type category="struct" name="VkPipelineExecutablePropertiesKHR" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> - <member><type>VkShaderStageFlags</type> <name>stages</name></member> - <member><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>uint32_t</type> <name>subgroupSize</name></member> + <member><type>VkShaderStageFlags</type> <name>stages</name></member> + <member len="null-terminated"><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member><type>uint32_t</type> <name>subgroupSize</name></member> </type> <type category="struct" name="VkPipelineExecutableInfoKHR"> <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member> @@ -5316,19 +5317,19 @@ typedef void* <name>MTLSharedEvent_id</name>; </type> <type category="struct" name="VkPipelineExecutableStatisticKHR" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR"><type>VkStructureType</type> <name>sType</name></member> - <member optional="true"><type>void</type>* <name>pNext</name></member> - <member><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member optional="true"><type>void</type>* <name>pNext</name></member> + <member len="null-terminated"><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> <member><type>VkPipelineExecutableStatisticFormatKHR</type> <name>format</name></member> <member selector="format" noautovalidity="true"><type>VkPipelineExecutableStatisticValueKHR</type> <name>value</name></member> </type> <type category="struct" name="VkPipelineExecutableInternalRepresentationKHR" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR"><type>VkStructureType</type> <name>sType</name></member> - <member optional="true"><type>void</type>* <name>pNext</name></member> - <member><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>VkBool32</type> <name>isText</name></member> - <member><type>size_t</type> <name>dataSize</name></member> + <member optional="true"><type>void</type>* <name>pNext</name></member> + <member len="null-terminated"><type>char</type> <name>name</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member><type>VkBool32</type> <name>isText</name></member> + <member><type>size_t</type> <name>dataSize</name></member> <member optional="true" len="dataSize"><type>void</type>* <name>pData</name></member> </type> <type category="struct" name="VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo"> @@ -5374,7 +5375,7 @@ typedef void* <name>MTLSharedEvent_id</name>; </type> <type category="struct" name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT" alias="VkPipelineShaderStageRequiredSubgroupSizeCreateInfo"/> <type category="struct" name="VkShaderRequiredSubgroupSizeCreateInfoEXT" alias="VkPipelineShaderStageRequiredSubgroupSizeCreateInfo"/> - <type category="struct" name="VkSubpassShadingPipelineCreateInfoHUAWEI" returnedonly="true" structextends="VkComputePipelineCreateInfo"> + <type category="struct" name="VkSubpassShadingPipelineCreateInfoHUAWEI" structextends="VkComputePipelineCreateInfo"> <member values="VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> <member><type>VkRenderPass</type> <name>renderPass</name></member> @@ -5527,56 +5528,56 @@ typedef void* <name>MTLSharedEvent_id</name>; <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> <member limittype="noauto"><type>VkDriverId</type> <name>driverID</name></member> - <member limittype="noauto"><type>char</type> <name>driverName</name>[<enum>VK_MAX_DRIVER_NAME_SIZE</enum>]</member> - <member limittype="noauto"><type>char</type> <name>driverInfo</name>[<enum>VK_MAX_DRIVER_INFO_SIZE</enum>]</member> + <member limittype="noauto" len="null-terminated"><type>char</type> <name>driverName</name>[<enum>VK_MAX_DRIVER_NAME_SIZE</enum>]</member> + <member limittype="noauto" len="null-terminated"><type>char</type> <name>driverInfo</name>[<enum>VK_MAX_DRIVER_INFO_SIZE</enum>]</member> <member limittype="noauto"><type>VkConformanceVersion</type> <name>conformanceVersion</name></member> <member limittype="exact"><type>VkShaderFloatControlsIndependence</type> <name>denormBehaviorIndependence</name></member> <member limittype="exact"><type>VkShaderFloatControlsIndependence</type> <name>roundingModeIndependence</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat16</name><comment>An implementation can preserve signed zero, nan, inf</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat32</name><comment>An implementation can preserve signed zero, nan, inf</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat64</name><comment>An implementation can preserve signed zero, nan, inf</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormPreserveFloat16</name><comment>An implementation can preserve denormals</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormPreserveFloat32</name><comment>An implementation can preserve denormals</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormPreserveFloat64</name><comment>An implementation can preserve denormals</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat16</name><comment>An implementation can flush to zero denormals</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat32</name><comment>An implementation can flush to zero denormals</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat64</name><comment>An implementation can flush to zero denormals</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTEFloat16</name><comment>An implementation can support RTE</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTEFloat32</name><comment>An implementation can support RTE</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTEFloat64</name><comment>An implementation can support RTE</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTZFloat16</name><comment>An implementation can support RTZ</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTZFloat32</name><comment>An implementation can support RTZ</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTZFloat64</name><comment>An implementation can support RTZ</comment></member> - <member limittype="max"><type>uint32_t</type> <name>maxUpdateAfterBindDescriptorsInAllPools</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderUniformBufferArrayNonUniformIndexingNative</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderSampledImageArrayNonUniformIndexingNative</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderStorageBufferArrayNonUniformIndexingNative</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderStorageImageArrayNonUniformIndexingNative</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>shaderInputAttachmentArrayNonUniformIndexingNative</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>robustBufferAccessUpdateAfterBind</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>quadDivergentImplicitLod</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindSamplers</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindUniformBuffers</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindStorageBuffers</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindSampledImages</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindStorageImages</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindInputAttachments</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxPerStageUpdateAfterBindResources</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindSamplers</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindUniformBuffers</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageBuffers</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindSampledImages</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageImages</name></member> - <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindInputAttachments</name></member> - <member limittype="bitmask"><type>VkResolveModeFlags</type> <name>supportedDepthResolveModes</name><comment>supported depth resolve modes</comment></member> - <member limittype="bitmask"><type>VkResolveModeFlags</type> <name>supportedStencilResolveModes</name><comment>supported stencil resolve modes</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>independentResolveNone</name><comment>depth and stencil resolve modes can be set independently if one of them is none</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>independentResolve</name><comment>depth and stencil resolve modes can be set independently</comment></member> - <member limittype="bitmask"><type>VkBool32</type> <name>filterMinmaxSingleComponentFormats</name></member> - <member limittype="bitmask"><type>VkBool32</type> <name>filterMinmaxImageComponentMapping</name></member> - <member limittype="max"><type>uint64_t</type> <name>maxTimelineSemaphoreValueDifference</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat16</name><comment>An implementation can preserve signed zero, nan, inf</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat32</name><comment>An implementation can preserve signed zero, nan, inf</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat64</name><comment>An implementation can preserve signed zero, nan, inf</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormPreserveFloat16</name><comment>An implementation can preserve denormals</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormPreserveFloat32</name><comment>An implementation can preserve denormals</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormPreserveFloat64</name><comment>An implementation can preserve denormals</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat16</name><comment>An implementation can flush to zero denormals</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat32</name><comment>An implementation can flush to zero denormals</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat64</name><comment>An implementation can flush to zero denormals</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTEFloat16</name><comment>An implementation can support RTE</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTEFloat32</name><comment>An implementation can support RTE</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTEFloat64</name><comment>An implementation can support RTE</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTZFloat16</name><comment>An implementation can support RTZ</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTZFloat32</name><comment>An implementation can support RTZ</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderRoundingModeRTZFloat64</name><comment>An implementation can support RTZ</comment></member> + <member limittype="max"><type>uint32_t</type> <name>maxUpdateAfterBindDescriptorsInAllPools</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderUniformBufferArrayNonUniformIndexingNative</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderSampledImageArrayNonUniformIndexingNative</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderStorageBufferArrayNonUniformIndexingNative</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderStorageImageArrayNonUniformIndexingNative</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>shaderInputAttachmentArrayNonUniformIndexingNative</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>robustBufferAccessUpdateAfterBind</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>quadDivergentImplicitLod</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindSamplers</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindUniformBuffers</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindStorageBuffers</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindSampledImages</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindStorageImages</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindInputAttachments</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxPerStageUpdateAfterBindResources</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindSamplers</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindUniformBuffers</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageBuffers</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindSampledImages</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageImages</name></member> + <member limittype="max"><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindInputAttachments</name></member> + <member limittype="bitmask"><type>VkResolveModeFlags</type> <name>supportedDepthResolveModes</name><comment>supported depth resolve modes</comment></member> + <member limittype="bitmask"><type>VkResolveModeFlags</type> <name>supportedStencilResolveModes</name><comment>supported stencil resolve modes</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>independentResolveNone</name><comment>depth and stencil resolve modes can be set independently if one of them is none</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>independentResolve</name><comment>depth and stencil resolve modes can be set independently</comment></member> + <member limittype="bitmask"><type>VkBool32</type> <name>filterMinmaxSingleComponentFormats</name></member> + <member limittype="bitmask"><type>VkBool32</type> <name>filterMinmaxImageComponentMapping</name></member> + <member limittype="max"><type>uint64_t</type> <name>maxTimelineSemaphoreValueDifference</name></member> <member limittype="bitmask" optional="true"><type>VkSampleCountFlags</type> <name>framebufferIntegerColorSampleCounts</name></member> </type> <type category="struct" name="VkPhysicalDeviceVulkan13Features" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo"> @@ -5672,12 +5673,12 @@ typedef void* <name>MTLSharedEvent_id</name>; </type> <type category="struct" name="VkPhysicalDeviceToolProperties" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member> - <member optional="true"><type>void</type>* <name>pNext</name></member> - <member><type>char</type> <name>name</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> - <member><type>char</type> <name>version</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> - <member><type>VkToolPurposeFlags</type> <name>purposes</name></member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> - <member><type>char</type> <name>layer</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> + <member optional="true"><type>void</type>* <name>pNext</name></member> + <member len="null-terminated"><type>char</type> <name>name</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>version</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> + <member><type>VkToolPurposeFlags</type> <name>purposes</name></member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>layer</name>[<enum>VK_MAX_EXTENSION_NAME_SIZE</enum>]</member> </type> <type category="struct" name="VkPhysicalDeviceToolPropertiesEXT" alias="VkPhysicalDeviceToolProperties"/> <type category="struct" name="VkSamplerCustomBorderColorCreateInfoEXT" structextends="VkSamplerCreateInfo"> @@ -7936,7 +7937,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <member values="VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> <member noautovalidity="true"><type>uint32_t</type> <name>identifierSize</name></member> - <member><type>uint8_t</type> <name>identifier</name>[<enum>VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT</enum>]</member> + <member len="identifierSize"><type>uint8_t</type> <name>identifier</name>[<enum>VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT</enum>]</member> </type> <type category="struct" name="VkImageCompressionControlEXT" structextends="VkImageCreateInfo,VkSwapchainCreateInfoKHR,VkPhysicalDeviceImageFormatInfo2"> <member values="VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT"><type>VkStructureType</type> <name>sType</name></member> @@ -7988,7 +7989,7 @@ typedef void* <name>MTLSharedEvent_id</name>; </type> <type category="struct" name="VkRenderPassSubpassFeedbackInfoEXT" returnedonly="true"> <member><type>VkSubpassMergeStatusEXT</type> <name>subpassMergeStatus</name></member> - <member><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> + <member len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]</member> <member><type>uint32_t</type> <name>postMergeIndex</name></member> </type> <type category="struct" name="VkRenderPassSubpassFeedbackCreateInfoEXT" structextends="VkSubpassDescription2"> @@ -8381,9 +8382,9 @@ typedef void* <name>MTLSharedEvent_id</name>; <member><type>VkDeviceSize</type> <name>addressPrecision</name></member> </type> <type category="struct" name="VkDeviceFaultVendorInfoEXT"> - <member noautovalidity="true"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the fault</comment></member> - <member><type>uint64_t</type> <name>vendorFaultCode</name></member> - <member><type>uint64_t</type> <name>vendorFaultData</name></member> + <member noautovalidity="true" len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the fault</comment></member> + <member><type>uint64_t</type> <name>vendorFaultCode</name></member> + <member><type>uint64_t</type> <name>vendorFaultData</name></member> </type> <type category="struct" name="VkDeviceFaultCountsEXT"> <member values="VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT"><type>VkStructureType</type> <name>sType</name></member> @@ -8394,11 +8395,11 @@ typedef void* <name>MTLSharedEvent_id</name>; </type> <type category="struct" name="VkDeviceFaultInfoEXT" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member> - <member optional="true"><type>void</type>* <name>pNext</name></member> - <member noautovalidity="true"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the fault</comment></member> - <member optional="true"><type>VkDeviceFaultAddressInfoEXT</type>* <name>pAddressInfos</name></member> - <member optional="true"><type>VkDeviceFaultVendorInfoEXT</type>* <name>pVendorInfos</name></member> - <member optional="true"><type>void</type>* <name>pVendorBinaryData</name></member> + <member optional="true"><type>void</type>* <name>pNext</name></member> + <member noautovalidity="true" len="null-terminated"><type>char</type> <name>description</name>[<enum>VK_MAX_DESCRIPTION_SIZE</enum>]<comment>Free-form description of the fault</comment></member> + <member optional="true"><type>VkDeviceFaultAddressInfoEXT</type>* <name>pAddressInfos</name></member> + <member optional="true"><type>VkDeviceFaultVendorInfoEXT</type>* <name>pVendorInfos</name></member> + <member optional="true"><type>void</type>* <name>pVendorBinaryData</name></member> </type> <type category="struct" name="VkDeviceFaultVendorBinaryHeaderVersionOneEXT"> <comment>The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout.</comment> @@ -8937,7 +8938,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <member optional="true"><type>uint32_t</type> <name>timingCount</name></member> <member optional="true" len="timingCount"><type>VkLatencyTimingsFrameReportNV</type>* <name>pTimings</name></member> </type> - <type category="struct" name="VkLatencyTimingsFrameReportNV"> + <type category="struct" name="VkLatencyTimingsFrameReportNV" returnedonly="true"> <member values="VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV"><type>VkStructureType</type> <name>sType</name></member> <member optional="true" noautovalidity="true">const <type>void</type>* <name>pNext</name></member> <member><type>uint64_t</type> <name>presentID</name></member> @@ -9080,6 +9081,11 @@ typedef void* <name>MTLSharedEvent_id</name>; <member optional="true" noautovalidity="true"><type>void</type>* <name>pNext</name></member> <member><type>VkBool32</type> <name>shaderQuadControl</name></member> </type> + <type category="struct" name="VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo"> + <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV"><type>VkStructureType</type> <name>sType</name></member> + <member optional="true"><type>void</type>* <name>pNext</name></member> + <member><type>VkBool32</type> <name>shaderFloat16VectorAtomics</name></member> + </type> <type category="struct" name="VkPhysicalDeviceMapMemoryPlacedFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo"> <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member> <member optional="true"><type>void</type>* <name>pNext</name></member> @@ -10821,6 +10827,8 @@ typedef void* <name>MTLSharedEvent_id</name>; <enum bitpos="0" name="VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR"/> <enum bitpos="1" name="VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR"/> </enums> + <enums name="VkVideoEncodeFlagBitsKHR" type="bitmask"> + </enums> <enums name="VkVideoEncodeUsageFlagBitsKHR" type="bitmask"> <enum value="0" name="VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR"/> <enum bitpos="0" name="VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR"/> @@ -11728,11 +11736,11 @@ typedef void* <name>MTLSharedEvent_id</name>; <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param> <param len="createInfoCount"><type>VkPipeline</type>* <name>pPipelines</name></param> </command> - <command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR"> + <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR"> <proto><type>VkResult</type> <name>vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI</name></proto> <param><type>VkDevice</type> <name>device</name></param> <param><type>VkRenderPass</type> <name>renderpass</name></param> - <param><type>VkExtent2D</type>* <name>pMaxWorkgroupSize</name></param> + <param len="1"><type>VkExtent2D</type>* <name>pMaxWorkgroupSize</name></param> </command> <command> <proto><type>void</type> <name>vkDestroyPipeline</name></proto> @@ -15203,7 +15211,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <param><type>VkDevice</type> <name>device</name></param> <param>const <type>VkMemoryUnmapInfoKHR</type>* <name>pMemoryUnmapInfo</name></param> </command> - <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT"> + <command successcodes="VK_SUCCESS,VK_INCOMPATIBLE_SHADER_BINARY_EXT" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED"> <proto><type>VkResult</type> <name>vkCreateShadersEXT</name></proto> <param><type>VkDevice</type> <name>device</name></param> <param><type>uint32_t</type> <name>createInfoCount</name></param> @@ -23403,7 +23411,8 @@ typedef void* <name>MTLSharedEvent_id</name>; <enum extnumber="353" offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"/> <enum extends="VkStructureType" name="VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT" alias="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO"/> <enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SHADER_EXT"/> - <enum offset="0" extends="VkResult" name="VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT"/> + <enum offset="0" extends="VkResult" name="VK_INCOMPATIBLE_SHADER_BINARY_EXT"/> + <enum extends="VkResult" name="VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT" alias="VK_INCOMPATIBLE_SHADER_BINARY_EXT" deprecated="aliased"/> <type name="VkShaderEXT"/> <type name="VkShaderCreateFlagBitsEXT"/> <type name="VkShaderCreateFlagsEXT"/> @@ -23623,6 +23632,7 @@ typedef void* <name>MTLSharedEvent_id</name>; <require> <enum value="0" name="VK_NV_EXTENSION_492_SPEC_VERSION"/> <enum value=""VK_NV_extension_492"" name="VK_NV_EXTENSION_492_EXTENSION_NAME"/> + <enum bitpos="44" extends="VkPipelineStageFlagBits2" name="VK_PIPELINE_STAGE_2_RESERVED_44_BIT_NV"/> </require> </extension> <extension name="VK_NV_extended_sparse_address_space" number="493" type="device" author="NV" contact="Russell Chou @russellcnv" supported="vulkan"> @@ -24188,6 +24198,16 @@ typedef void* <name>MTLSharedEvent_id</name>; <require> <enum value="0" name="VK_KHR_EXTENSION_554_SPEC_VERSION"/> <enum value=""VK_KHR_extension_554"" name="VK_KHR_EXTENSION_554_EXTENSION_NAME"/> + <enum bitpos="2" extends="VkVideoEncodeCapabilityFlagBitsKHR" name="VK_VIDEO_ENCODE_CAPABILITY_RESERVED_2_BIT_KHR"/> + <enum bitpos="3" extends="VkVideoEncodeCapabilityFlagBitsKHR" name="VK_VIDEO_ENCODE_CAPABILITY_RESERVED_3_BIT_KHR"/> + <enum bitpos="3" extends="VkVideoSessionCreateFlagBitsKHR" name="VK_VIDEO_SESSION_CREATE_RESERVED_3_BIT_KHR"/> + <enum bitpos="4" extends="VkVideoSessionCreateFlagBitsKHR" name="VK_VIDEO_SESSION_CREATE_RESERVED_4_BIT_KHR"/> + <enum bitpos="0" extends="VkVideoEncodeFlagBitsKHR" name="VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR"/> + <enum bitpos="1" extends="VkVideoEncodeFlagBitsKHR" name="VK_VIDEO_ENCODE_RESERVED_1_BIT_KHR"/> + <enum bitpos="25" extends="VkImageUsageFlagBits" name="VK_IMAGE_USAGE_RESERVED_25_BIT_KHR"/> + <enum bitpos="26" extends="VkImageUsageFlagBits" name="VK_IMAGE_USAGE_RESERVED_26_BIT_KHR"/> + <enum bitpos="49" extends="VkFormatFeatureFlagBits2" name="VK_FORMAT_FEATURE_2_RESERVED_49_BIT_KHR"/> + <enum bitpos="50" extends="VkFormatFeatureFlagBits2" name="VK_FORMAT_FEATURE_2_RESERVED_50_BIT_KHR"/> </require> </extension> <extension name="VK_IMG_extension_555" number="555" author="IMG" contact="Jarred Davies" supported="disabled"> @@ -24244,6 +24264,38 @@ typedef void* <name>MTLSharedEvent_id</name>; <enum value=""VK_KHR_extension_563"" name="VK_KHR_EXTENSION_563_EXTENSION_NAME"/> </require> </extension> + <extension name="VK_NV_shader_atomic_float16_vector" number="564" type="device" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan"> + <require> + <enum value="1" name="VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_SPEC_VERSION"/> + <enum value=""VK_NV_shader_atomic_float16_vector"" name="VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_EXTENSION_NAME"/> + <enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV"/> + <type name="VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV"/> + </require> + </extension> + <extension name="VK_EXT_extension_565" number="565" author="EXT" contact="Kevin Petit @kpet" supported="disabled"> + <require> + <enum value="0" name="VK_EXT_EXTENSION_565_SPEC_VERSION"/> + <enum value=""VK_EXT_extension_565"" name="VK_EXT_EXTENSION_565_EXTENSION_NAME"/> + </require> + </extension> + <extension name="VK_ARM_extension_566" number="566" author="ARM" contact="Kevin Petit @kpet" supported="disabled"> + <require> + <enum value="0" name="VK_ARM_EXTENSION_566_SPEC_VERSION"/> + <enum value=""VK_ARM_extension_566"" name="VK_ARM_EXTENSION_566_EXTENSION_NAME"/> + </require> + </extension> + <extension name="VK_ARM_extension_567" number="567" author="ARM" contact="Kevin Petit @kpet" supported="disabled"> + <require> + <enum value="0" name="VK_ARM_EXTENSION_567_SPEC_VERSION"/> + <enum value=""VK_ARM_extension_567"" name="VK_ARM_EXTENSION_567_EXTENSION_NAME"/> + </require> + </extension> + <extension name="VK_ARM_extension_568" number="568" author="ARM" contact="Kevin Petit @kpet" supported="disabled"> + <require> + <enum value="0" name="VK_ARM_EXTENSION_568_SPEC_VERSION"/> + <enum value=""VK_ARM_extension_568"" name="VK_ARM_EXTENSION_568_EXTENSION_NAME"/> + </require> + </extension> </extensions> <formats> <format name="VK_FORMAT_R4G4_UNORM_PACK8" class="8-bit" blockSize="1" texelsPerBlock="1" packed="8"> @@ -25822,6 +25874,9 @@ typedef void* <name>MTLSharedEvent_id</name>; <spirvextension name="SPV_EXT_shader_atomic_float16_add"> <enable extension="VK_EXT_shader_atomic_float2"/> </spirvextension> + <spirvextension name="SPV_NV_shader_atomic_fp16_vector"> + <enable extension="VK_NV_shader_atomic_float16_vector"/> + </spirvextension> <spirvextension name="SPV_EXT_fragment_fully_covered"> <enable extension="VK_EXT_conservative_rasterization"/> </spirvextension> @@ -25959,6 +26014,9 @@ typedef void* <name>MTLSharedEvent_id</name>; <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderBufferFloat64AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/> <enable struct="VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT" feature="shaderSharedFloat64AtomicMinMax" requires="VK_EXT_shader_atomic_float2"/> </spirvcapability> + <spirvcapability name="AtomicFloat16VectorNV"> + <enable struct="VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV" feature="shaderFloat16VectorAtomics" requires="VK_NV_shader_atomic_float16_vector"/> + </spirvcapability> <spirvcapability name="Int64ImageEXT"> <enable struct="VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT" feature="shaderImageInt64Atomics" requires="VK_EXT_shader_image_atomic_int64"/> </spirvcapability> |