Change log for March 5, 2018 Vulkan 1.1.72 spec update:

* Update release number to 72.

Github Issues:

  * Restructure the repository to put the specification `Makefile` and
    associated spec source material at the top level, `vk.xml` and
    associated scripts material in `xml/`, and generated include and source
    files in `include/vulkan/` and `src/ext_loader/`, respectively (public
    issue 436).
  * Add missing bullet point markup to flink:vkCmdCopyImage valid usage
    statement, so it gets a VUID assigned (public issue 627).
  * Fix broken links in a couple of extension appendices (public pull
    request 665).
  * Add the \<platform> tag to the index in section 4.1 of the registry
    schema documentation, and add the protect= attribute of \<extension>
    tags to the comments in `registry.rnc` (public issues 673, 678).
  * Add missing valid usage statements for sparse image interactions to
    flink:VkImageCreateInfo (public pull request 675).
  * Fix improper usage and grammar of "`can: not`" (public pull request
    681).
  * Remove duplicate spec language and NOTE on present layout between the
    flink:vkAcquireNextImageKHR and flink:vkAcquireNextImage2KHR commands
    (public pull request 685).
  * Fix some typos and markup issues (public pull request 689; public issues
    642, 667, 687).
  * Fix typo etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT ->
    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT in the
    <<external-semaphore-handle-types-compatibility, External semaphore
    handle types compatibility>> table (public pull request 691).

Internal Issues:

  * Remove the need for the "`noautovalidity`" attribute on extension
    structures in `vk.xml`. It is now implied by the "`structextends`"
    attribute instead (internal issue 942).
  * Replace uses of "`currently bound`" with "`bound`", since "`currently`"
    is redundant and distracting, and add a corresponding rule to the style
    guide (internal issue 993).
  * Fixed subtle issues with the last updates to flink:vkAcquireNextImageKHR
    language that had resulted in ambiguities (internal issue 1178).
  * Make it clear that only one query of a given type is allowed at a time
    by reordering valid usage statements for flink:vkCmdBeginQuery and
    flink:vkCmdEndQuery, and removing redundant ones (internal issue 1213).
  * Swapped OL1 and OL3 in `tessparamUL.svg` to match previous version, and
    fixed where "`(no edge)`" appears (internal issue 1215).

Other Issues:

  * Fixed a minor problem with the valid usage statement extraction script,
    and corresponding markup in the spec source.

New Extensions:

  * `VK_AMD_shader_core_properties`
  * `VK_EXT_descriptor_indexing`
  * `VK_NV_shader_subgroup_partitioned`
This commit is contained in:
Jon Leech 2018-04-05 04:24:56 -07:00
parent 9a8314cd41
commit 26f0bdbf1e
45 changed files with 2555 additions and 673 deletions

View File

@ -8,6 +8,67 @@ public pull requests that have been accepted.
-----------------------------------------------------
Change log for March 5, 2018 Vulkan 1.1.72 spec update:
* Update release number to 72.
Github Issues:
* Restructure the repository to put the specification `Makefile` and
associated spec source material at the top level, `vk.xml` and
associated scripts material in `xml/`, and generated include and source
files in `include/vulkan/` and `src/ext_loader/`, respectively (public
issue 436).
* Add missing bullet point markup to flink:vkCmdCopyImage valid usage
statement, so it gets a VUID assigned (public issue 627).
* Fix broken links in a couple of extension appendices (public pull
request 665).
* Add the \<platform> tag to the index in section 4.1 of the registry
schema documentation, and add the protect= attribute of \<extension>
tags to the comments in `registry.rnc` (public issues 673, 678).
* Add missing valid usage statements for sparse image interactions to
flink:VkImageCreateInfo (public pull request 675).
* Fix improper usage and grammar of "`can: not`" (public pull request
681).
* Remove duplicate spec language and NOTE on present layout between the
flink:vkAcquireNextImageKHR and flink:vkAcquireNextImage2KHR commands
(public pull request 685).
* Fix some typos and markup issues (public pull request 689; public issues
642, 667, 687).
* Fix typo etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT ->
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT in the
<<external-semaphore-handle-types-compatibility, External semaphore
handle types compatibility>> table (public pull request 691).
Internal Issues:
* Remove the need for the "`noautovalidity`" attribute on extension
structures in `vk.xml`. It is now implied by the "`structextends`"
attribute instead (internal issue 942).
* Replace uses of "`currently bound`" with "`bound`", since "`currently`"
is redundant and distracting, and add a corresponding rule to the style
guide (internal issue 993).
* Fixed subtle issues with the last updates to flink:vkAcquireNextImageKHR
language that had resulted in ambiguities (internal issue 1178).
* Make it clear that only one query of a given type is allowed at a time
by reordering valid usage statements for flink:vkCmdBeginQuery and
flink:vkCmdEndQuery, and removing redundant ones (internal issue 1213).
* Swapped OL1 and OL3 in `tessparamUL.svg` to match previous version, and
fixed where "`(no edge)`" appears (internal issue 1215).
Other Issues:
* Fixed a minor problem with the valid usage statement extraction script,
and corresponding markup in the spec source.
New Extensions:
* `VK_AMD_shader_core_properties`
* `VK_EXT_descriptor_indexing`
* `VK_NV_shader_subgroup_partitioned`
-----------------------------------------------------
Change log for March 16, 2018 Vulkan 1.1.71 spec update:
* First public update for Vulkan 1.1.

View File

@ -0,0 +1,108 @@
include::meta/VK_AMD_shader_core_properties.txt[]
*Last Modified Date*::
2018-02-15
*IP Status*::
No known IP claims.
*Contributors*::
- Martin Dinkov, AMD
- Matthaeus Chajdas, AMD
This extension exposes shader core properties for a target physical device
through the VK_KHR_get_physical_device_properties2 extension.
Please refer to the example below for proper usage.
=== New Object Types
None.
=== New Enum Constants
* Extending ename:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD
=== New Enums
None.
=== New Structures
* slink:VkPhysicalDeviceShaderCorePropertiesAMD
=== New Functions
None.
=== Examples
This example retrieves the shader core properties for a physical device.
[source,c++]
----------------------------------------
extern VkInstance instance;
PFN_vkGetPhysicalDeviceProperties2 pfnVkGetPhysicalDeviceProperties2 =
reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2>
(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2") );
VkPhysicalDeviceProperties2 general_props;
VkPhysicalDeviceShaderCorePropertiesAMD shader_core_properties;
shader_core_properties.pNext = nullptr;
shader_core_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD;
general_props.pNext = &shader_core_properties;
general_props.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
// After this call, shader_core_properties has been populated
pfnVkGetPhysicalDeviceProperties2(device, &general_props);
printf("Number of shader engines: %d\n",
m_shader_core_properties.shader_engine_count =
shader_core_properties.shaderEngineCount;
printf("Number of shader arrays: %d\n",
m_shader_core_properties.shader_arrays_per_engine_count =
shader_core_properties.shaderArraysPerEngineCount;
printf("Number of CUs per shader array: %d\n",
m_shader_core_properties.compute_units_per_shader_array =
shader_core_properties.computeUnitsPerShaderArray;
printf("Number of SIMDs per compute unit: %d\n",
m_shader_core_properties.simd_per_compute_unit =
shader_core_properties.simdPerComputeUnit;
printf("Number of wavefront slots in each SIMD: %d\n",
m_shader_core_properties.wavefronts_per_simd =
shader_core_properties.wavefrontsPerSimd;
printf("Number of threads per wavefront: %d\n",
m_shader_core_properties.wavefront_size =
shader_core_properties.wavefrontSize;
printf("Number of physical SGPRs per SIMD: %d\n",
m_shader_core_properties.sgprs_per_simd =
shader_core_properties.sgprsPerSimd;
printf("Minimum number of SGPRs that can be allocated by a wave: %d\n",
m_shader_core_properties.min_sgpr_allocation =
shader_core_properties.minSgprAllocation;
printf("Number of available SGPRs: %d\n",
m_shader_core_properties.max_sgpr_allocation =
shader_core_properties.maxSgprAllocation;
printf("SGPRs are allocated in groups of this size: %d\n",
m_shader_core_properties.sgpr_allocation_granularity =
shader_core_properties.sgprAllocationGranularity;
printf("Number of physical VGPRs per SIMD: %d\n",
m_shader_core_properties.vgprs_per_simd =
shader_core_properties.vgprsPerSimd;
printf("Minimum number of VGPRs that can be allocated by a wave: %d\n",
m_shader_core_properties.min_vgpr_allocation =
shader_core_properties.minVgprAllocation;
printf("Number of available VGPRs: %d\n",
m_shader_core_properties.max_vgpr_allocation =
shader_core_properties.maxVgprAllocation;
printf("VGPRs are allocated in groups of this size: %d\n",
m_shader_core_properties.vgpr_allocation_granularity =
shader_core_properties.vgprAllocationGranularity;
----------------------------------------
=== Version History
* Revision 1, 2018-02-15 (Martin Dinkov)
- Initial draft.

View File

@ -0,0 +1,100 @@
include::meta/VK_EXT_descriptor_indexing.txt[]
*Status*::
Complete
*Last Modified Data*::
2017-10-02
*Contributors*::
- Jeff Bolz, NVIDIA
- Daniel Rakos, AMD
- Slawomir Grajewski, Intel
- Tobias Hector, Imagination Technologies
This extension adds several small features which together enable
applications to create large descriptor sets containing substantially all of
their resources, and selecting amongst those resources with dynamic
(non-uniform) indexes in the shader.
There are feature enables and SPIR-V capabilities for non-uniform descriptor
indexing in the shader, and non-uniform indexing in the shader requires use
of a new code:NonUniformEXT decoration defined in the
+SPV_EXT_descriptor_indexing+ SPIR-V extension.
There are descriptor set layout binding creation flags enabling several
features:
* Descriptors can be updated after they are bound to a command buffer,
such that the execution of the command buffer reflects the most recent
update to the descriptors.
* Descriptors that are not used by any pending command buffers can be
updated, which enables writing new descriptors for frame N+1 while frame
N is executing.
* Relax the requirement that all descriptors in a binding that is
"statically used" must be valid, such that descriptors that are not
accessed by a submission need not be valid and can be updated while that
submission is executing.
* The final binding in a descriptor set layout can have a variable size
(and unsized arrays of resources are allowed in the
+GL_EXT_nonuniform_qualifier+ and +SPV_EXT_descriptor_indexing+
extensions).
Note that it is valid for multiple descriptor arrays in a shader to use the
same set and binding number, as long as they are all compatible with the
descriptor type in the pipeline layout.
This means a single array binding in the descriptor set can serve multiple
texture dimensionalities, or an array of buffer descriptors can be used with
multiple different block layouts.
There are new descriptor set layout and descriptor pool creation flags that
are required to opt in to the update-after-bind functionality, and there are
separate pname:maxPerStage* and pname:maxDescriptorSet* limits that apply to
these descriptor set layouts which may: be much higher than the pre-existing
limits.
The old limits only count descriptors in non-updateAfterBind descriptor set
layouts, and the new limits count descriptors in all descriptor set layouts
in the pipeline layout.
=== New Object Types
None.
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT
** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT
** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
* Extending elink:VkDescriptorPoolCreateFlagBits:
** ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
* Extending elink:VkDescriptorSetLayoutCreateFlagBits:
** ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
* Extending elink:VkResult:
** ename:VK_ERROR_FRAGMENTATION_EXT
=== New Enums
* elink:VkDescriptorBindingFlagBitsEXT
=== New Structures
* slink:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT
* slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT
* slink:VkPhysicalDeviceDescriptorIndexingPropertiesEXT
* slink:VkDescriptorSetVariableDescriptorCountAllocateInfoEXT
* slink:VkDescriptorSetVariableDescriptorCountLayoutSupportEXT
=== New Functions
None.
=== Issues
None.
=== Version History
* Revision 1, 2017-07-26 (Jeff Bolz)
- Internal revisions

View File

@ -0,0 +1,48 @@
include::meta/VK_NV_shader_subgroup_partitioned.txt[]
*Last Modified Date*::
2018-03-17
*Contributors*::
- Jeff Bolz, NVIDIA
This extension enables support for a new class of subgroup operations via
the
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GL_NV_shader_subgroup_partitioned.txt[+GL_NV_shader_subgroup_partitioned+]
GLSL extension and
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_shader_subgroup_partitioned.html[+SPV_NV_shader_subgroup_partitioned+]
SPIR-V extension.
Support for these new operations is advertised via the
elink:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV bit.
This extension requires Vulkan 1.1, for general subgroup support.
=== New Object Types
None.
=== New Enum Constants
* Extending elink:VkSubgroupFeatureFlagBits:
** ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV
=== New Enums
None.
=== New Structures
None.
=== New Functions
None.
=== Issues
None.
=== Version History
* Revision 1, 2018-03-17 (Jeff Bolz)
- Internal revisions

View File

@ -37,8 +37,8 @@ created some additional bindings.
Applications normally will include the header `vulkan.h`.
In turn, `vulkan.h` always includes the following headers:
* <<boilerplate-platform-macros,`vk_platform.h`>>, defining platform-specific
macros and headers.
* <<boilerplate-platform-macros,`vk_platform.h`>>, defining
platform-specific macros and headers.
* <<boilerplate-vulkan-core,`vulkan_core.h`>>, defining APIs for the
Vulkan core and all registered extensions _other_ than window
system-specific extensions.

View File

@ -280,6 +280,10 @@ ifdef::VK_EXT_depth_range_unrestricted[]
include::VK_EXT_depth_range_unrestricted.txt[]
endif::VK_EXT_depth_range_unrestricted[]
ifdef::VK_EXT_descriptor_indexing[]
include::VK_EXT_descriptor_indexing.txt[]
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_direct_mode_display[]
include::VK_EXT_direct_mode_display.txt[]
endif::VK_EXT_direct_mode_display[]
@ -403,6 +407,10 @@ ifdef::VK_AMD_shader_ballot[]
include::VK_AMD_shader_ballot.txt[]
endif::VK_AMD_shader_ballot[]
ifdef::VK_AMD_shader_core_properties[]
include::VK_AMD_shader_core_properties.txt[]
endif::VK_AMD_shader_core_properties[]
ifdef::VK_AMD_shader_explicit_vertex_parameter[]
include::VK_AMD_shader_explicit_vertex_parameter.txt[]
endif::VK_AMD_shader_explicit_vertex_parameter[]

View File

@ -51,8 +51,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
* code:DeviceGroup
endif::VK_VERSION_1_1,VK_KHR_device_group[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[spirvenv-capabilities-multiview]]
code:MultiView
* [[spirvenv-capabilities-multiview]] code:MultiView
endif::VK_VERSION_1_1,VK_KHR_multiview[]
If the implementation supports any of the optional: features described in
@ -173,11 +172,29 @@ ifdef::VK_VERSION_1_1[]
| code:GroupNonUniformShuffleRelative | <<features-features-subgroup-shuffle-relative,VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT>>
| code:GroupNonUniformClustered | <<features-features-subgroup-clustered,VK_SUBGROUP_FEATURE_CLUSTERED_BIT>>
| code:GroupNonUniformQuad | <<features-features-subgroup-quad,VK_SUBGROUP_FEATURE_QUAD_BIT>>
ifdef::VK_NV_shader_subgroup_partitioned[]
| code:GroupNonUniformPartitionedNV | <<features-features-subgroup-partitioned,VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV>>
endif::VK_NV_shader_subgroup_partitioned[]
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_post_depth_coverage[]
[[spirvenv-capabilities-table-postdepthcoverage]]
| code:SampleMaskPostDepthCoverage | `<<VK_EXT_post_depth_coverage>>`
endif::VK_EXT_post_depth_coverage[]
ifdef::VK_EXT_descriptor_indexing[]
[[spirvenv-capabilities-table-descriptorindexing]]
| code:ShaderNonUniformEXT | `<<VK_EXT_descriptor_indexing>>`
| code:RuntimeDescriptorArrayEXT | <<features-features-runtimeDescriptorArray,runtimeDescriptorArray>>
| code:InputAttachmentArrayDynamicIndexingEXT | <<features-features-shaderInputAttachmentArrayDynamicIndexing,shaderInputAttachmentArrayDynamicIndexing>>
| code:UniformTexelBufferArrayDynamicIndexingEXT | <<features-features-shaderUniformTexelBufferArrayDynamicIndexing,shaderUniformTexelBufferArrayDynamicIndexing>>
| code:StorageTexelBufferArrayDynamicIndexingEXT | <<features-features-shaderStorageTexelBufferArrayDynamicIndexing,shaderStorageTexelBufferArrayDynamicIndexing>>
| code:UniformBufferArrayNonUniformIndexingEXT | <<features-features-shaderUniformBufferArrayNonUniformIndexing,shaderUniformBufferArrayNonUniformIndexing>>
| code:SampledImageArrayNonUniformIndexingEXT | <<features-features-shaderSampledImageArrayNonUniformIndexing,shaderSampledImageArrayNonUniformIndexing>>
| code:StorageBufferArrayNonUniformIndexingEXT | <<features-features-shaderStorageBufferArrayNonUniformIndexing,shaderStorageBufferArrayNonUniformIndexing>>
| code:StorageImageArrayNonUniformIndexingEXT | <<features-features-shaderStorageImageArrayNonUniformIndexing,shaderStorageImageArrayNonUniformIndexing>>
| code:InputAttachmentArrayNonUniformIndexingEXT | <<features-features-shaderInputAttachmentArrayNonUniformIndexing,shaderInputAttachmentArrayNonUniformIndexing>>
| code:UniformTexelBufferArrayNonUniformIndexingEXT | <<features-features-shaderUniformTexelBufferArrayNonUniformIndexing,shaderUniformTexelBufferArrayNonUniformIndexing>>
| code:StorageTexelBufferArrayNonUniformIndexingEXT | <<features-features-shaderStorageTexelBufferArrayNonUniformIndexing,shaderStorageTexelBufferArrayNonUniformIndexing>>
endif::VK_EXT_descriptor_indexing[]
|====
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
@ -294,6 +311,11 @@ The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the `SPV_NVX_multiview_per_view_attributes` SPIR-V extension.
endif::VK_NVX_multiview_per_view_attributes[]
ifdef::VK_EXT_descriptor_indexing[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the +SPV_EXT_descriptor_indexing+ SPIR-V extension.
endif::VK_EXT_descriptor_indexing[]
The application must: not pass a SPIR-V module containing any of the
following to flink:vkCreateShaderModule:
@ -407,13 +429,23 @@ ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`]
SPIR-V extension.
endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
* code:OpTypeRuntimeArray must: only be used for the last member of an
code:OpTypeStruct
* code:OpTypeRuntimeArray must: only be used for:
** the last member of an code:OpTypeStruct
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
that is in the code:StorageBuffer storage class decorated as code:Block,
or
that is in the code:StorageBuffer storage class decorated as
code:Block, or
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
that is in the code:Uniform storage class decorated as code:BufferBlock.
that is in the code:Uniform storage class decorated as
code:BufferBlock.
ifdef::VK_EXT_descriptor_indexing[]
** If the code:RuntimeDescriptorArrayEXT capability is supported, an array
of variables with storage class code:Uniform,
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
code:StorageBuffer,
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
or code:UniformConstant, or for the outermost dimension of an array of
arrays of such variables.
endif::VK_EXT_descriptor_indexing[]
* Linkage: See <<interfaces,Shader Interfaces>> for additional linking and
validation rules.
ifdef::VK_VERSION_1_1[]
@ -445,6 +477,13 @@ ifdef::VK_VERSION_1_1[]
endif::VK_VERSION_1_1[]
* Atomic instructions must: declare a scalar 32-bit integer type for the
_Result Type_ and the type of the value pointed to by _Pointer_.
ifdef::VK_EXT_descriptor_indexing[]
* If an instruction loads from or stores to a resource (including atomics
and image instructions) and the resource descriptor being accessed is
not dynamically uniform, then the operand corresponding to that resource
(e.g. the pointer or sampled image operand) must: be decorated with
code:NonUniformEXT.
endif::VK_EXT_descriptor_indexing[]
[[spirvenv-precision-operation]]

View File

@ -698,10 +698,11 @@ match the platform surface properties.
If the swapchain images no longer match native surface properties, either
ename:VK_SUBOPTIMAL_KHR or ename:VK_ERROR_OUT_OF_DATE_KHR must: be returned.
If ename:VK_ERROR_OUT_OF_DATE_KHR is returned it specifies that attempts to
present the acquired image will fail with ename:VK_ERROR_OUT_OF_DATE_KHR,
and applications need to create a new swapchain for the surface to continue
presenting.
If ename:VK_ERROR_OUT_OF_DATE_KHR is returned, no image is acquired and
attempts to present previously acquired images to the swapchain will also
fail with ename:VK_ERROR_OUT_OF_DATE_KHR.
Applications need to create a new swapchain for the surface to continue
presenting if ename:VK_ERROR_OUT_OF_DATE_KHR is returned.
If device loss occurs (see <<devsandqueues-lost-device,Lost Device>>) before
the timeout has expired, fname:vkAcquireNextImageKHR must: return in finite
@ -727,8 +728,10 @@ It will become signaled when the application can: use the image.
.Note
====
Applications should: not rely on fname:vkAcquireNextImageKHR blocking in
order to meter their rendering speed, as the various conditions described
above may: lead to the call returning early.
order to meter their rendering speed.
The implementation may: return from this function immediately regardless of
how many presentation requests are queued, and regardless of when queued
presentation requests will complete relative to the call.
Instead, applications can: use pname:fence to meter their frame generation
work to match the presentation rate.
====

View File

@ -67,7 +67,7 @@ pname:viewportCount)#.
.Valid Usage
****
* [[VUID-vkCmdSetViewportWScalingNV-None-01322]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled
* [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01323]]
pname:firstViewport must: be less than

View File

@ -220,7 +220,7 @@ the purposes of memory barriers.
[[clears-inside]]
== Clearing Images Inside A Render Pass Instance
[open,refpage='vkCmdClearAttachments',desc='Clear regions within currently bound framebuffer attachments',type='protos']
[open,refpage='vkCmdClearAttachments',desc='Clear regions within bound framebuffer attachments',type='protos']
--
To clear one or more regions of color and depth/stencil attachments inside a

View File

@ -368,6 +368,7 @@ ifndef::VK_KHR_shared_presentable_image[]
or ename:VK_IMAGE_LAYOUT_GENERAL
endif::VK_KHR_shared_presentable_image[]
ifdef::VK_KHR_shared_presentable_image[]
* [[VUID-vkCmdCopyImage-srcImageLayout-01917]]
pname:srcImageLayout must: be
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
ename:VK_IMAGE_LAYOUT_GENERAL, or

View File

@ -48,24 +48,24 @@ Storage image loads are supported in all shader stages for image formats
which report support for the
<<features-formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT>>
feature bit via flink:vkGetPhysicalDeviceFormatProperties in
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear tiling)
or slink:VkFormatProperties::pname:optimalTilingFeatures (for images with optimal
tiling).
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear
tiling) or slink:VkFormatProperties::pname:optimalTilingFeatures (for images
with optimal tiling).
Stores to storage images are supported in compute shaders for image formats
which report support for the ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
feature via flink:vkGetPhysicalDeviceFormatProperties in
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear tiling)
or slink:VkFormatProperties::pname:optimalTilingFeatures (for images with optimal
tiling).
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear
tiling) or slink:VkFormatProperties::pname:optimalTilingFeatures (for images
with optimal tiling).
Atomic operations on storage images are supported in compute shaders for
image formats which report support for the
<<features-formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT>>
feature via flink:vkGetPhysicalDeviceFormatProperties in
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear tiling)
or slink:VkFormatProperties::pname:optimalTilingFeatures (for images with optimal
tiling).
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear
tiling) or slink:VkFormatProperties::pname:optimalTilingFeatures (for images
with optimal tiling).
When the <<features-features-fragmentStoresAndAtomics,
pname:fragmentStoresAndAtomics>> feature is enabled, stores and atomic
@ -108,9 +108,9 @@ Sampled images are supported in all shader stages for image formats which
report support for the
<<features-formats-properties,ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT>>
feature bit via flink:vkGetPhysicalDeviceFormatProperties in
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear tiling)
or slink:VkFormatProperties::pname:optimalTilingFeatures (for images with optimal
tiling).
slink:VkFormatProperties::pname:linearTilingFeatures (for images with linear
tiling) or slink:VkFormatProperties::pname:optimalTilingFeatures (for images
with optimal tiling).
The image subresources for a sampled image must: be in the
ifdef::VK_KHR_shared_presentable_image[]
@ -399,6 +399,19 @@ ifdef::VK_KHR_push_descriptor[]
total number of elements of all bindings must: be less than or equal to
slink:VkPhysicalDevicePushDescriptorPropertiesKHR::pname:maxPushDescriptors
endif::VK_KHR_push_descriptor[]
ifdef::VK_EXT_descriptor_indexing[]
* [[VUID-VkDescriptorSetLayoutCreateInfo-flags-03000]]
If any binding has the
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit set,
pname:flags must: include
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
* [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001]]
If any binding has the
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit set, then all
bindings must: not have pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
endif::VK_EXT_descriptor_indexing[]
****
include::../validity/structs/VkDescriptorSetLayoutCreateInfo.txt[]
@ -417,6 +430,18 @@ ifdef::VK_KHR_push_descriptor[]
that descriptor sets must: not be allocated using this layout, and
descriptors are instead pushed by flink:vkCmdPushDescriptorSetKHR.
endif::VK_KHR_push_descriptor[]
ifdef::VK_EXT_descriptor_indexing[]
* ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
specifies that descriptor sets using this layout must: be allocated from
a descriptor pool created with the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT bit set.
Descriptor set layouts created with this bit set have alternate limits
for the maximum number of descriptors per-stage and per-pipeline layout.
The non-UpdateAfterBind limits only count descriptors in sets created
without this flag.
The UpdateAfterBind limits count all descriptors, but the limits may: be
higher than the non-UpdateAfterBind limits.
endif::VK_EXT_descriptor_indexing[]
ifndef::VK_KHR_push_descriptor[]
[NOTE]
@ -523,6 +548,190 @@ avoid wasted memory.
include::../validity/structs/VkDescriptorSetLayoutBinding.txt[]
--
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkDescriptorSetLayoutBindingFlagsCreateInfoEXT',desc='Structure specifying creation flags for descriptor set layout bindings',type='structs']
--
If the pname:pNext chain of a slink:VkDescriptorSetLayoutCreateInfo
structure includes a sname:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT
structure, then that structure includes an array of flags, one for each
descriptor set layout binding.
The slink:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT structure is
defined as:
include::../api/structs/VkDescriptorSetLayoutBindingFlagsCreateInfoEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:bindingCount is zero or the number of elements in
pname:pBindingFlags.
* pname:pBindingFlags is a pointer to an array of
elink:VkDescriptorBindingFlagsEXT bitfields, one for each descriptor set
layout binding.
If pname:bindingCount is zero or if this structure is not in the pname:pNext
chain, the elink:VkDescriptorBindingFlagsEXT for each descriptor set layout
binding is considered to be zero.
Otherwise, the descriptor set layout binding at
slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings[i] uses the flags in
pname:pBindingFlags[i].
.Valid Usage
****
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-bindingCount-03002]]
If pname:bindingCount is not zero, pname:bindingCount must: equal
slink:VkDescriptorSetLayoutCreateInfo::pname:bindingCount
ifdef::VK_KHR_push_descriptor[]
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-flags-03003]]
If slink:VkDescriptorSetLayoutCreateInfo::pname:flags includes
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
elements of pname:pBindingFlags must: not include
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT,
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT, or
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
endif::VK_KHR_push_descriptor[]
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-03004]]
If an element of pname:pBindingFlags includes
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT, then all
other elements of slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings
must: have a smaller value of pname:binding
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUniformBufferUpdateAfterBind-03005]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingUniformBufferUpdateAfterBind
is not enabled, all bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingSampledImageUpdateAfterBind-03006]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingSampledImageUpdateAfterBind
is not enabled, all bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageImageUpdateAfterBind-03007]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingStorageImageUpdateAfterBind
is not enabled, all bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageBufferUpdateAfterBind-03008]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingStorageBufferUpdateAfterBind
is not enabled, all bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUniformTexelBufferUpdateAfterBind-03009]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingUniformTexelBufferUpdateAfterBind
is not enabled, all bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingStorageTexelBufferUpdateAfterBind-03010]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingStorageTexelBufferUpdateAfterBind
is not enabled, all bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-None-03011]]
All bindings with descriptor type
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not use
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingUpdateUnusedWhilePending-03012]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingUpdateUnusedWhilePending
is not enabled, all elements of pname:pBindingFlags must: not include
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingPartiallyBound-03013]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingPartiallyBound
is not enabled, all elements of pname:pBindingFlags must: not include
ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-descriptorBindingVariableDescriptorCount-03014]]
If
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingVariableDescriptorCount
is not enabled, all elements of pname:pBindingFlags must: not include
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
* [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfoEXT-pBindingFlags-03015]]
If an element of pname:pBindingFlags includes
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT, that
element's pname:descriptorType must: not be
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
****
include::../validity/structs/VkDescriptorSetLayoutBindingFlagsCreateInfoEXT.txt[]
--
[open,refpage='VkDescriptorBindingFlagBitsEXT',desc='Bitmask specifying descriptor set layout binding properties',type='enums']
--
Bits which can: be set in each element of
slink:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT::pname:pBindingFlags to
specify options for the corresponding descriptor set layout binding are:
include::../api/enums/VkDescriptorBindingFlagBitsEXT.txt[]
* ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT indicates that if
descriptors in this binding are updated between when the descriptor set
is bound in a command buffer and when that command buffer is submitted
to a queue, then the submission will use the most recently set
descriptors for this binding and the updates do not invalidate the
command buffer.
Descriptor bindings created with this flag are also partially exempt
from the external synchronization requirement in
ifdef::VK_KHR_descriptor_update_template[]
flink:vkUpdateDescriptorSetWithTemplateKHR and
endif::VK_KHR_descriptor_update_template[]
flink:vkUpdateDescriptorSets.
They can: be updated concurrently with the set being bound to a command
buffer in another thread, but not concurrently with the set being reset
or freed.
* ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT indicates that
descriptors in this binding that are not _dynamically used_ need not
contain valid descriptors at the time the descriptors are consumed.
A descriptor is dynamically used if any shader invocation executes an
instruction that performs any memory access using the descriptor.
* ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
indicates that descriptors in this binding can: be updated after a
command buffer has bound this descriptor set, or while a command buffer
that uses this descriptor set is pending execution, as long as the
descriptors that are updated are not used by those command buffers.
If ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT is also set, then
descriptors can: be updated as long as they are not dynamically used by
any shader invocations.
If ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT is not set, then
descriptors can: be updated as long as they are not statically used by
any shader invocations.
* ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT indicates
that this descriptor binding has a variable size that will be specified
when a descriptor set is allocated using this layout.
The value of pname:descriptorCount is treated as an upper bound on the
size of the binding.
This must: only be used for the last binding in the descriptor set
layout (i.e. the binding with the largest value of pname:binding).
For the purposes of counting against limits such as
pname:maxDescriptorSet* and pname:maxPerStageDescriptor*, the full value
of pname:descriptorCount is counted.
[NOTE]
.Note
====
Note that while ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT and
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT both involve
updates to descriptor sets after they are bound,
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT is a weaker
requirement since it is only about descriptors that are not used, whereas
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT requires the
implementation to observe updates to descriptors that are used.
====
--
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
[open,refpage='vkGetDescriptorSetLayoutSupport',desc='Query whether a descriptor set layout can be created',type='protos']
@ -609,6 +818,45 @@ include::../validity/structs/VkDescriptorSetLayoutSupport.txt[]
endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkDescriptorSetVariableDescriptorCountLayoutSupportEXT',desc='Structure returning information about whether a descriptor set layout can be supported',type='structs']
--
If the pname:pNext chain of a slink:VkDescriptorSetLayoutSupport structure
includes a sname:VkDescriptorSetVariableDescriptorCountLayoutSupportEXT
structure, then that structure returns additional information about whether
the descriptor set layout is supported.
include::../api/structs/VkDescriptorSetVariableDescriptorCountLayoutSupportEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:maxVariableDescriptorCount indicates the maximum number of
descriptors supported in the highest numbered binding of the layout, if
that binding is variable-sized.
If the create info includes a variable-sized descriptor, then
pname:supported is determined assuming the requested size of the
variable-sized descriptor, and pname:maxVariableDescriptorCount is set to
the maximum size of that descriptor that can: be successfully created (which
is greater than or equal to the requested size passed in).
If the create info does not include a variable-sized descriptor or if the
slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT::pname:descriptorBindingVariableDescriptorCount
feature is not enabled, then pname:maxVariableDescriptorCount is set to
zero.
For the purposes of this command, a variable-sized descriptor binding with a
pname:descriptorCount of zero is treated as if the pname:descriptorCount is
one, and thus the binding is not ignored and the maximum descriptor count
will be returned.
If the layout is not supported, then the value written to
pname:maxVariableDescriptorCount is undefined.
include::../validity/structs/VkDescriptorSetVariableDescriptorCountLayoutSupportEXT.txt[]
--
endif::VK_EXT_descriptor_indexing[]
The following examples show a shader snippet using two descriptor sets, and
application code that creates corresponding descriptor set layouts.
@ -855,6 +1103,7 @@ pipelines that is expected to outperform memory-backed resource updates.
* [[VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286]]
pname:setLayoutCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets
ifndef::VK_EXT_descriptor_indexing[]
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00287]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_SAMPLER and
@ -949,6 +1198,237 @@ pipelines that is expected to outperform memory-backed resource updates.
stages and across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_descriptor_indexing[]
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03016]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER and
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03017]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03018]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03019]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03020]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03021]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader
stage across all elements of pname:pSetLayouts must: be less than or
equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorInputAttachments
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03022]]
The total number of descriptors with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_SAMPLER and
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindSamplers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03023]]
The total number of descriptors with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03024]]
The total number of descriptors with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03025]]
The total number of descriptors with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindSampledImages
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03026]]
The total number of descriptors with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindStorageImages
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03027]]
The total number of descriptors with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader
stage across all elements of pname:pSetLayouts must: be less than or
equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindInputAttachments
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03028]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_SAMPLER and
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSamplers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03029]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader
stagess and and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03030]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffersDynamic
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03031]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader
stages and across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffers
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03032]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffersDynamic
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03033]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetSampledImages
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03034]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageImages
* [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03035]]
The total number of descriptors in descriptor set layouts created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set with a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader
stages and across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_SAMPLER and
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindSamplers
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader
stagess and and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindUniformBuffers
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader
stages and across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindStorageBuffers
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindSampledImages
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all
shader stages and across all elements of pname:pSetLayouts must: be less
than or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindStorageImages
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043]]
The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader
stages and across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindInputAttachments
endif::VK_EXT_descriptor_indexing[]
* [[VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292]]
Any two elements of pname:pPushConstantRanges must: not include the same
stage in pname:stageFlags
@ -1060,20 +1540,44 @@ that can: be used in any pipeline stage as described in
|====
| Total Resources Available | Resource Types
.2+<.^| pname:maxDescriptorSetSamplers
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindSamplers
endif::VK_EXT_descriptor_indexing[]
| sampler | combined image sampler
.3+<.^| pname:maxDescriptorSetSampledImages
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindSampledImages
endif::VK_EXT_descriptor_indexing[]
| sampled image | combined image sampler | uniform texel buffer
.2+<.^| pname:maxDescriptorSetStorageImages
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindStorageImages
endif::VK_EXT_descriptor_indexing[]
| storage image | storage texel buffer
.2+<.^| pname:maxDescriptorSetUniformBuffers
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindUniformBuffers
endif::VK_EXT_descriptor_indexing[]
| uniform buffer | uniform buffer dynamic
| pname:maxDescriptorSetUniformBuffersDynamic
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
endif::VK_EXT_descriptor_indexing[]
| uniform buffer dynamic
.2+<.^| pname:maxDescriptorSetStorageBuffers
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindStorageBuffers
endif::VK_EXT_descriptor_indexing[]
| storage buffer | storage buffer dynamic
| pname:maxDescriptorSetStorageBuffersDynamic
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
endif::VK_EXT_descriptor_indexing[]
| storage buffer dynamic
| pname:maxDescriptorSetInputAttachments
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxDescriptorSetUpdateAfterBindInputAttachments
endif::VK_EXT_descriptor_indexing[]
| input attachment
|====
@ -1288,6 +1792,16 @@ If an allocation failure occurs due to fragmentation, an application can:
create an additional descriptor pool to perform further descriptor set
allocations.
ifdef::VK_EXT_descriptor_indexing[]
If pname:flags has the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT bit set,
descriptor pool creation may: fail with the error
ename:VK_ERROR_FRAGMENTATION_EXT if the total number of descriptors across
all pools (including this one) created with this bit set exceeds
pname:maxUpdateAfterBindDescriptorsInAllPools, or if fragmentation of the
underlying hardware resources occurs.
endif::VK_EXT_descriptor_indexing[]
.Valid Usage
****
* [[VUID-VkDescriptorPoolCreateInfo-maxSets-00301]]
@ -1313,6 +1827,15 @@ include::../api/enums/VkDescriptorPoolCreateFlagBits.txt[]
individually freed back to the pool, i.e. only
flink:vkAllocateDescriptorSets and flink:vkResetDescriptorPool are
allowed.
ifdef::VK_EXT_descriptor_indexing[]
* ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT specifies that
descriptor sets allocated from this pool can: include bindings with the
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit set.
It is valid to allocate descriptor sets that have bindings that don't
set the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit from a
pool that has ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
set.
endif::VK_EXT_descriptor_indexing[]
--
@ -1407,13 +1930,24 @@ When a descriptor set is allocated, the initial state is largely
uninitialized and all descriptors are undefined.
However, the descriptor set can: be bound in a command buffer without
causing errors or exceptions.
All entries that are statically used by a pipeline in a drawing or
dispatching command must: have been populated before the descriptor set is
bound for use by that command.
Entries that are not statically used by a pipeline can: have uninitialized
descriptors or descriptors of resources that have been destroyed, and
executing a draw or dispatch with such a descriptor set bound does not cause
undefined behavior.
ifdef::VK_EXT_descriptor_indexing[]
For descriptor set bindings created with the
ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT bit set, all descriptors
in that binding that are dynamically used must: have been populated before
the descriptor set is <<descriptorsets-binding,consumed>>.
For descriptor set bindings created without the
ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT bit set, all descriptors
in that binding that are statically used must: have been populated before
the descriptor set is <<descriptorsets-binding,consumed>>.
endif::VK_EXT_descriptor_indexing[]
ifndef::VK_EXT_descriptor_indexing[]
All descriptors that are statically used must: have been populated before
the descriptor set is consumed.
endif::VK_EXT_descriptor_indexing[]
Entries that are not used by a pipeline can: have uninitialized descriptors
or descriptors of resources that have been destroyed, and executing a draw
or dispatch with such a descriptor set bound does not cause undefined
behavior.
This means applications need not populate unused entries with dummy
descriptors.
@ -1509,11 +2043,66 @@ ifdef::VK_KHR_push_descriptor[]
Each element of pname:pSetLayouts must: not have been created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
endif::VK_KHR_push_descriptor[]
ifdef::VK_EXT_descriptor_indexing[]
* [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044]]
If any element of pname:pSetLayouts was created with the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set, pname:descriptorPool must: have been created with the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT flag set
endif::VK_EXT_descriptor_indexing[]
****
include::../validity/structs/VkDescriptorSetAllocateInfo.txt[]
--
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkDescriptorSetVariableDescriptorCountAllocateInfoEXT',desc='Structure specifying additional allocation parameters for descriptor sets',type='structs']
--
If the pname:pNext chain of a slink:VkDescriptorSetAllocateInfo structure
includes a sname:VkDescriptorSetVariableDescriptorCountAllocateInfoEXT
structure, then that structure includes an array of descriptor counts for
variable descriptor count bindings, one for each descriptor set being
allocated.
The sname:VkDescriptorSetVariableDescriptorCountAllocateInfoEXT structure is
defined as:
include::../api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfoEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:descriptorSetCount is zero or the number of elements in
pname:pDescriptorCounts.
* pname:pDescriptorCounts is an array of descriptor counts, with each
member specifying the number of descriptors in a variable descriptor
count binding in the corresponding descriptor set being allocated.
If pname:descriptorSetCount is zero or this structure is not included in the
pname:pNext chain, then the variable lengths are considered to be zero.
Otherwise, pname:pDescriptorCounts[i] is the number of descriptors in the
variable count descriptor binding in the corresponding descriptor set
layout.
If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] does not include
a variable count descriptor binding, then pname:pDescriptorCounts[i] is
ignored.
.Valid Usage
****
* [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-descriptorSetCount-03045]]
If pname:descriptorSetCount is not zero, pname:descriptorSetCount must:
equal slink:VkDescriptorSetAllocateInfo::pname:descriptorSetCount
* [[VUID-VkDescriptorSetVariableDescriptorCountAllocateInfoEXT-pSetLayouts-03046]]
If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] has a
variable descriptor count binding, then pname:pDescriptorCounts[i] must:
be less than or equal to the descriptor count specified for that binding
when the descriptor set layout was created.
****
include::../validity/structs/VkDescriptorSetVariableDescriptorCountAllocateInfoEXT.txt[]
--
endif::VK_EXT_descriptor_indexing[]
[open,refpage='vkFreeDescriptorSets',desc='Free one or more descriptor sets',type='protos']
--
@ -1627,16 +2216,31 @@ descriptors between sets.
If the pname:dstSet member of any element of pname:pDescriptorWrites or
pname:pDescriptorCopies is bound, accessed, or modified by any command that
was recorded to a command buffer which is currently in the
<<commandbuffers-lifecycle, recording or executable state>>, that command
buffer becomes <<commandbuffers-lifecycle, invalid>>.
<<commandbuffers-lifecycle, recording or executable state>>,
ifdef::VK_EXT_descriptor_indexing[]
and any of the descriptor bindings that are updated were not created with
the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT or
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT bits set,
endif::VK_EXT_descriptor_indexing[]
that command buffer becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
ifndef::VK_EXT_descriptor_indexing[]
* [[VUID-vkUpdateDescriptorSets-dstSet-00314]]
The pname:dstSet member of each element of pname:pDescriptorWrites or
pname:pDescriptorCopies must: not be used by any command that was
recorded to a command buffer which is in the <<commandbuffers-lifecycle,
pending state>>.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_descriptor_indexing[]
* [[VUID-vkUpdateDescriptorSets-None-03047]]
Descriptor bindings updated by this command which were created without
the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT or
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT bits set
must: not be used by any command that was recorded to a command buffer
which is in the <<commandbuffers-lifecycle,pending state>>.
endif::VK_EXT_descriptor_indexing[]
****
include::../validity/protos/vkUpdateDescriptorSets.txt[]
@ -1827,6 +2431,12 @@ bindings as needed to update all pname:descriptorCount descriptors.
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
pname:imageView member of each element of pname:pImageInfo must: have
been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
ifdef::VK_EXT_descriptor_indexing[]
* [[VUID-VkWriteDescriptorSet-descriptorCount-03048]]
All consecutive bindings updated via a single sname:VkWriteDescriptorSet
structure, except those with a pname:descriptorCount of zero, must: have
identical elink:VkDescriptorBindingFlagBitsEXT.
endif::VK_EXT_descriptor_indexing[]
****
include::../validity/structs/VkWriteDescriptorSet.txt[]
@ -2056,6 +2666,33 @@ include::../api/structs/VkCopyDescriptorSet.txt[]
destination ranges of descriptors must: not overlap, where the ranges
may: include array elements from consecutive bindings as described by
<<descriptorsets-updates-consecutive>>
ifdef::VK_EXT_descriptor_indexing[]
* [[VUID-VkCopyDescriptorSet-srcSet-01918]]
If pname:srcSet's layout was created with the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
flag set, then pname:dstSet's layout must: also have been created with
the ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
flag set
* [[VUID-VkCopyDescriptorSet-srcSet-01919]]
If pname:srcSet's layout was created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
flag set, then pname:dstSet's layout must: also have been created
without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
flag set
* [[VUID-VkCopyDescriptorSet-srcSet-01920]]
If the descriptor pool from which pname:srcSet was allocated was created
with the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT flag
set, then the descriptor pool from which pname:dstSet was allocated
must: also have been created with the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT flag set
* [[VUID-VkCopyDescriptorSet-srcSet-01921]]
If the descriptor pool from which pname:srcSet was allocated was created
without the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
flag set, then the descriptor pool from which pname:dstSet was allocated
must: also have been created without the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT flag set
endif::VK_EXT_descriptor_indexing[]
****
include::../validity/structs/VkCopyDescriptorSet.txt[]
@ -2577,11 +3214,24 @@ pipeline used in subsequent graphics or compute commands, as defined in the
<<descriptorsets-compatibility, Pipeline Layout Compatibility>> section.
The descriptor set contents bound by a call to fname:vkCmdBindDescriptorSets
may: be consumed during host execution of the command, or during shader
execution of the resulting draws, or any time in between.
Thus, the contents must: not be altered (overwritten by an update command,
or freed) between when the command is recorded and when the command
completes executing on the queue.
may: be consumed at the following times:
ifdef::VK_EXT_descriptor_indexing[]
* For descriptor bindings created with the
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit set, the
contents may: be consumed when the command buffer is submitted to a
queue, or during shader execution of the resulting draws and dispatches,
or any time in between.
Otherwise,
endif::VK_EXT_descriptor_indexing[]
* during host execution of the command, or during shader execution of the
resulting draws and dispatches, or any time in between.
Thus, the contents of a descriptor set binding must: not be altered
(overwritten by an update command, or freed) between the first point in time
that it may: be consumed, and and when the command completes executing on
the queue.
The contents of pname:pDynamicOffsets are consumed immediately during
execution of fname:vkCmdBindDescriptorSets.
Once all pending uses have completed, it is legal to update and reuse a

View File

@ -8,8 +8,8 @@
_Dispatching commands_ (commands with ftext:Dispatch in the name) provoke
work in a compute pipeline.
Dispatching commands are recorded into a command buffer and when executed by
a queue, will produce work which executes according to the currently bound
compute pipeline.
a queue, will produce work which executes according to the bound compute
pipeline.
A compute pipeline must: be bound to a command buffer before any dispatch
commands are recorded in that command buffer.
@ -45,61 +45,60 @@ is assembled.
pname:groupCountZ must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
* [[VUID-vkCmdDispatch-None-00389]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a sname:VkPipelineLayout that
is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDispatch-None-00390]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDispatch-None-00391]]
A valid compute pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_COMPUTE
* [[VUID-vkCmdDispatch-None-00392]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant
value must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with
a sname:VkPipelineLayout that is compatible for push constants with the
bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a
sname:VkPipelineLayout that is compatible for push constants with the
one used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* [[VUID-vkCmdDispatch-None-00393]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used to sample from any
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDispatch-None-00394]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDispatch-None-00395]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that
includes a LOD bias or any offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDispatch-None-00396]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDispatch-None-00397]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDispatch-linearTilingFeatures-00398]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -128,21 +127,21 @@ endif::VK_IMG_filter_cubic[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDispatch-commandBuffer-01844]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_COMPUTE reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDispatch-commandBuffer-01845]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_POINT_COMPUTE writes to any image or buffer, that
image or buffer must: not be an unprotected image or unprotected buffer.
* [[VUID-vkCmdDispatch-commandBuffer-01846]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the compute pipeline stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_POINT_COMPUTE reads from any
image or buffer, the image or buffer must: not be a protected image or
protected buffer.
object bound to ename:VK_PIPELINE_POINT_COMPUTE reads from any image or
buffer, the image or buffer must: not be a protected image or protected
buffer.
endif::VK_VERSION_1_1[]
****
@ -174,17 +173,16 @@ at pname:offset.
If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* [[VUID-vkCmdDispatchIndirect-None-00402]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a sname:VkPipelineLayout that
is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDispatchIndirect-None-00403]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDispatchIndirect-None-00404]]
A valid compute pipeline must: be bound to the current command buffer
@ -199,44 +197,44 @@ at pname:offset.
must: be less than or equal to the size of pname:buffer
* [[VUID-vkCmdDispatchIndirect-None-00408]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant
value must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with
a sname:VkPipelineLayout that is compatible for push constants with the
bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a
sname:VkPipelineLayout that is compatible for push constants with the
one used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* [[VUID-vkCmdDispatchIndirect-None-00409]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used to sample from any
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDispatchIndirect-None-00410]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDispatchIndirect-None-00411]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that
includes a LOD bias or any offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDispatchIndirect-None-00412]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDispatchIndirect-None-00413]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDispatchIndirect-linearTilingFeatures-00414]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -265,21 +263,21 @@ endif::VK_IMG_filter_cubic[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDispatchIndirect-commandBuffer-01847]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_COMPUTE reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDispatchIndirect-commandBuffer-01848]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_POINT_COMPUTE writes to any image or buffer, that
image or buffer must: not be an unprotected image or unprotected buffer.
* [[VUID-vkCmdDispatchIndirect-commandBuffer-01849]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the compute pipeline stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_POINT_COMPUTE reads from any
image or buffer, the image or buffer must: not be a protected image or
protected buffer.
object bound to ename:VK_PIPELINE_POINT_COMPUTE reads from any image or
buffer, the image or buffer must: not be a protected image or protected
buffer.
endif::VK_VERSION_1_1[]
****
@ -387,8 +385,8 @@ vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ).
pname:baseGroupZ
* [[VUID-vkCmdDispatchBase-baseGroupX-00427]]
If any of pname:baseGroupX, pname:baseGroupY, or pname:baseGroupZ are
not zero, then the currently bound compute pipeline must: have been
created with the ename:VK_PIPELINE_CREATE_DISPATCH_BASE flag.
not zero, then the bound compute pipeline must: have been created with
the ename:VK_PIPELINE_CREATE_DISPATCH_BASE flag.
****
include::../validity/protos/vkCmdDispatchBase.txt[]

View File

@ -8,8 +8,8 @@
_Drawing commands_ (commands with ftext:Draw in the name) provoke work in a
graphics pipeline.
Drawing commands are recorded into a command buffer and when executed by a
queue, will produce work which executes according to the currently bound
graphics pipeline.
queue, will produce work which executes according to the bound graphics
pipeline.
A graphics pipeline must: be bound to a command buffer before any drawing
commands are recorded in that command buffer.
@ -507,7 +507,7 @@ first code:vertexIndex value equal to pname:firstVertex.
The primitives are drawn pname:instanceCount times with code:instanceIndex
starting with pname:firstInstance and increasing sequentially for each
instance.
The assembled primitives execute the currently bound graphics pipeline.
The assembled primitives execute the bound graphics pipeline.
.Valid Usage
****
@ -515,33 +515,30 @@ The assembled primitives execute the currently bound graphics pipeline.
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDraw-subpass-00436]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDraw-None-00437]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDraw-None-00438]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDraw-None-00439]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDraw-None-00440]]
All vertex input bindings accessed via vertex input variables declared
@ -555,7 +552,7 @@ The assembled primitives execute the currently bound graphics pipeline.
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDraw-None-00443]]
If the sname:VkPipeline object currently bound to
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDraw-None-00444]]
@ -563,39 +560,37 @@ The assembled primitives execute the currently bound graphics pipeline.
pipeline via a descriptor set
* [[VUID-vkCmdDraw-None-00445]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D,
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDraw-None-00446]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDraw-None-00447]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDraw-None-00448]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDraw-None-00449]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDraw-linearTilingFeatures-00450]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -633,27 +628,26 @@ endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDraw-commandBuffer-01850]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDraw-commandBuffer-01851]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDraw-commandBuffer-01852]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, the image or buffer must: not be a protected image or
protected buffer.
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDraw-sampleLocationsEnable-01512]]
If the currently bound graphics pipeline was created with
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
@ -688,9 +682,9 @@ of size defined by the flink:vkCmdBindIndexBuffer::pname:indexType parameter
with which the buffer was bound.
The first vertex index is at an offset of pname:firstIndex * code:indexSize
+ pname:offset within the currently bound index buffer, where pname:offset
is the offset specified by fname:vkCmdBindIndexBuffer and code:indexSize is
the byte size of the type specified by pname:indexType.
+ pname:offset within the bound index buffer, where pname:offset is the
offset specified by fname:vkCmdBindIndexBuffer and code:indexSize is the
byte size of the type specified by pname:indexType.
Subsequent index values are retrieved from consecutive locations in the
index buffer.
Indices are first compared to the primitive restart value, then zero
@ -701,7 +695,7 @@ code:vertexIndex value.
The primitives are drawn pname:instanceCount times with code:instanceIndex
starting with pname:firstInstance and increasing sequentially for each
instance.
The assembled primitives execute the currently bound graphics pipeline.
The assembled primitives execute the bound graphics pipeline.
.Valid Usage
****
@ -709,33 +703,30 @@ The assembled primitives execute the currently bound graphics pipeline.
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexed-subpass-00455]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexed-None-00456]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexed-None-00457]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexed-None-00458]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndexed-None-00459]]
All vertex input bindings accessed via vertex input variables declared
@ -749,53 +740,51 @@ The assembled primitives execute the currently bound graphics pipeline.
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndexed-None-00462]]
If the sname:VkPipeline object currently bound to
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndexed-indexSize-00463]]
[eq]#(pname:indexSize * (pname:firstIndex {plus} pname:indexCount)
{plus} pname:offset)# must: be less than or equal to the size of the
currently bound index buffer, with indexSize being based on the type
specified by pname:indexType, where the index buffer, pname:indexType,
and pname:offset are specified via fname:vkCmdBindIndexBuffer
bound index buffer, with indexSize being based on the type specified by
pname:indexType, where the index buffer, pname:indexType, and
pname:offset are specified via fname:vkCmdBindIndexBuffer
* [[VUID-vkCmdDrawIndexed-None-00464]]
Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndexed-None-00465]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D,
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndexed-None-00466]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndexed-None-00467]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndexed-None-00468]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexed-None-00469]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexed-linearTilingFeatures-00470]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -833,27 +822,26 @@ endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndexed-commandBuffer-01853]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndexed-commandBuffer-01854]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndexed-commandBuffer-01855]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, the image or buffer must: not be a protected image or
protected buffer.
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndexed-sampleLocationsEnable-01513]]
If the currently bound graphics pipeline was created with
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
@ -916,33 +904,30 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndirect-subpass-00480]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndirect-None-00481]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndirect-None-00482]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndirect-None-00483]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndirect-None-00484]]
All vertex input bindings accessed via vertex input variables declared
@ -952,7 +937,7 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndirect-None-00486]]
If the sname:VkPipeline object currently bound to
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndirect-drawCount-00487]]
@ -972,39 +957,37 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndirect-None-00491]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D,
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndirect-None-00492]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndirect-None-00493]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndirect-None-00494]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndirect-None-00495]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndirect-linearTilingFeatures-00496]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -1042,27 +1025,26 @@ endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndirect-commandBuffer-01856]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndirect-commandBuffer-01857]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndirect-commandBuffer-01858]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, the image or buffer must: not be a protected image or
protected buffer.
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndirect-sampleLocationsEnable-01514]]
If the currently bound graphics pipeline was created with
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
@ -1170,33 +1152,30 @@ located at pname:countBufferOffset and use this as the draw count.
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndirectCountAMD-subpass-00508]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndirectCountAMD-None-00509]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndirectCountAMD-None-00510]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndirectCountAMD-None-00511]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndirectCountAMD-None-00512]]
All vertex input bindings accessed via vertex input variables declared
@ -1206,7 +1185,7 @@ located at pname:countBufferOffset and use this as the draw count.
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndirectCountAMD-None-00514]]
If the sname:VkPipeline object currently bound to
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndirectCountAMD-countBuffer-00515]]
@ -1226,39 +1205,37 @@ located at pname:countBufferOffset and use this as the draw count.
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndirectCountAMD-None-00519]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D,
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndirectCountAMD-None-00520]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndirectCountAMD-None-00521]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndirectCountAMD-None-00522]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndirectCountAMD-None-00523]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndirectCountAMD-linearTilingFeatures-00524]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -1280,27 +1257,26 @@ endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01859]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01860]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndirectCountAMD-commandBuffer-01861]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, the image or buffer must: not be a protected image or
protected buffer.
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndirectCountAMD-sampleLocationsEnable-01515]]
If the currently bound graphics pipeline was created with
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
@ -1366,33 +1342,30 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexedIndirect-subpass-00532]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexedIndirect-None-00533]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexedIndirect-None-00534]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexedIndirect-None-00535]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndexedIndirect-None-00536]]
All vertex input bindings accessed via vertex input variables declared
@ -1402,7 +1375,7 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndexedIndirect-None-00538]]
If the sname:VkPipeline object currently bound to
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00539]]
@ -1422,39 +1395,37 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndexedIndirect-None-00543]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D,
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndexedIndirect-None-00544]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndexedIndirect-None-00545]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndexedIndirect-None-00546]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexedIndirect-None-00547]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00548]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -1492,27 +1463,26 @@ endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndexedIndirect-commandBuffer-01862]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndexedIndirect-commandBuffer-01863]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndexedIndirect-commandBuffer-01864]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, the image or buffer must: not be a protected image or
protected buffer.
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-01516]]
If the currently bound graphics pipeline was created with
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the
@ -1549,10 +1519,9 @@ the similarly named parameters of flink:vkCmdDrawIndexed.
* [[VUID-VkDrawIndexedIndirectCommand-indexSize-00553]]
[eq]#(pname:indexSize * (pname:firstIndex {plus} pname:indexCount)
{plus} pname:offset)# must: be less than or equal to the size of the
currently bound index buffer, with pname:indexSize being based on the
type specified by pname:indexType, where the index buffer,
pname:indexType, and pname:offset are specified via
fname:vkCmdBindIndexBuffer
bound index buffer, with pname:indexSize being based on the type
specified by pname:indexType, where the index buffer, pname:indexType,
and pname:offset are specified via fname:vkCmdBindIndexBuffer
* [[VUID-VkDrawIndexedIndirectCommand-firstInstance-00554]]
If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
@ -1629,33 +1598,30 @@ located at pname:countBufferOffset and use this as the draw count.
The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-subpass-00561]]
The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
specified when creating the sname:VkPipeline bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00562]]
For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
For each set _n_ that is statically used by the sname:VkPipeline bound
to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor set must: have
been bound to _n_ at ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00563]]
For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push constant value
must: have been set for ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00564]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
used by the bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00565]]
All vertex input bindings accessed via vertex input variables declared
@ -1665,7 +1631,7 @@ located at pname:countBufferOffset and use this as the draw count.
A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00567]]
If the sname:VkPipeline object currently bound to
If the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00568]]
@ -1685,39 +1651,37 @@ located at pname:countBufferOffset and use this as the draw count.
pipeline via a descriptor set
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00572]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
sname:VkImageView of the type ename:VK_IMAGE_VIEW_TYPE_3D,
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00573]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00574]]
If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses
unnormalized coordinates, it must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00575]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a uniform
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00576]]
If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage
buffer, it must: not access values outside of the range of that buffer
specified in the bound descriptor set
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-linearTilingFeatures-00577]]
Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
@ -1739,27 +1703,26 @@ endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1[]
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01865]]
If pname:commandBuffer is an unprotected command buffer, and any
pipeline stage in the sname:VkPipeline object currently bound to
pipeline stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, that image or buffer must: not be a protected image or
protected buffer.
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01866]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage in the sname:VkPipeline object currently bound to
stage in the sname:VkPipeline object bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS writes to any image or buffer,
that image or buffer must: not be an unprotected image or unprotected
buffer.
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-01867]]
If pname:commandBuffer is a protected command buffer, and any pipeline
stage other than the framebuffer-space pipeline stages in the
sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS reads from or writes to any image
or buffer, the image or buffer must: not be a protected image or
protected buffer.
sname:VkPipeline object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
reads from or writes to any image or buffer, the image or buffer must:
not be a protected image or protected buffer.
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_sample_locations[]
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-sampleLocationsEnable-01517]]
If the currently bound graphics pipeline was created with
If the bound graphics pipeline was created with
slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
set to ename:VK_TRUE and the current subpass has a depth/stencil
attachment, then that attachment must: have been created with the

View File

@ -1042,6 +1042,202 @@ include::../validity/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
--
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkPhysicalDeviceDescriptorIndexingFeaturesEXT',desc='Structure describing descriptor indexing features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT structure is defined
as:
include::../api/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.txt[]
The members of the sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT
structure describe the following features:
* [[features-features-shaderInputAttachmentArrayDynamicIndexing]]
pname:shaderInputAttachmentArrayDynamicIndexing indicates whether arrays
of input attachments can: be indexed by dynamically uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:InputAttachmentArrayDynamicIndexingEXT capability.
* [[features-features-shaderUniformTexelBufferArrayDynamicIndexing]]
pname:shaderUniformTexelBufferArrayDynamicIndexing indicates whether
arrays of uniform texel buffers can: be indexed by dynamically uniform
integer expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:UniformTexelBufferArrayDynamicIndexingEXT capability.
* [[features-features-shaderStorageTexelBufferArrayDynamicIndexing]]
pname:shaderStorageTexelBufferArrayDynamicIndexing indicates whether
arrays of storage texel buffers can: be indexed by dynamically uniform
integer expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageTexelBufferArrayDynamicIndexingEXT capability.
* [[features-features-shaderUniformBufferArrayNonUniformIndexing]]
pname:shaderUniformBufferArrayNonUniformIndexing indicates whether
arrays of uniform buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:UniformBufferArrayNonUniformIndexingEXT capability.
* [[features-features-shaderSampledImageArrayNonUniformIndexing]]
pname:shaderSampledImageArrayNonUniformIndexing indicates whether arrays
of samplers or sampled images can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:SampledImageArrayNonUniformIndexingEXT capability.
* [[features-features-shaderStorageBufferArrayNonUniformIndexing]]
pname:shaderStorageBufferArrayNonUniformIndexing indicates whether
arrays of storage buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageBufferArrayNonUniformIndexingEXT capability.
* [[features-features-shaderStorageImageArrayNonUniformIndexing]]
pname:shaderStorageImageArrayNonUniformIndexing indicates whether arrays
of storage images can: be indexed by non-uniform integer expressions in
shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageImageArrayNonUniformIndexingEXT capability.
* [[features-features-shaderInputAttachmentArrayNonUniformIndexing]]
pname:shaderInputAttachmentArrayNonUniformIndexing indicates whether
arrays of input attachments can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:InputAttachmentArrayNonUniformIndexingEXT capability.
* [[features-features-shaderUniformTexelBufferArrayNonUniformIndexing]]
pname:shaderUniformTexelBufferArrayNonUniformIndexing indicates whether
arrays of uniform texel buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:UniformTexelBufferArrayNonUniformIndexingEXT capability.
* [[features-features-shaderStorageTexelBufferArrayNonUniformIndexing]]
pname:shaderStorageTexelBufferArrayNonUniformIndexing indicates whether
arrays of storage texel buffers can: be indexed by non-uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must: not be indexed by
non-uniform integer expressions when aggregated into arrays in shader
code.
This also indicates whether shader modules can: declare the
code:StorageTexelBufferArrayNonUniformIndexingEXT capability.
* [[features-features-descriptorBindingUniformBufferUpdateAfterBind]]
pname:descriptorBindingUniformBufferUpdateAfterBind indicates whether
the implementation supports updating uniform buffer descriptors after a
set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER.
* [[features-features-descriptorBindingSampledImageUpdateAfterBind]]
pname:descriptorBindingSampledImageUpdateAfterBind indicates whether the
implementation supports updating sampled image descriptors after a set
is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE.
* [[features-features-descriptorBindingStorageImageUpdateAfterBind]]
pname:descriptorBindingStorageImageUpdateAfterBind indicates whether the
implementation supports updating storage image descriptors after a set
is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
* [[features-features-descriptorBindingStorageBufferUpdateAfterBind]]
pname:descriptorBindingStorageBufferUpdateAfterBind indicates whether
the implementation supports updating storage buffer descriptors after a
set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER.
* [[features-features-descriptorBindingUniformTexelBufferUpdateAfterBind]]
pname:descriptorBindingUniformTexelBufferUpdateAfterBind indicates
whether the implementation supports updating uniform texel buffer
descriptors after a set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER.
* [[features-features-descriptorBindingStorageTexelBufferUpdateAfterBind]]
pname:descriptorBindingStorageTexelBufferUpdateAfterBind indicates
whether the implementation supports updating storage texel buffer
descriptors after a set is bound.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT must: not be used
with ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER.
* [[features-features-descriptorBindingUpdateUnusedWhilePending]]
pname:descriptorBindingUpdateUnusedWhilePending indicates whether the
implementation supports updating descriptors while the set is in use.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT must:
not be used.
* [[features-features-descriptorBindingPartiallyBound]]
pname:descriptorBindingPartiallyBound indicates whether the
implementation supports statically using a descriptor set binding in
which some descriptors are not valid.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT must: not be used.
* [[features-features-descriptorBindingVariableDescriptorCount]]
pname:descriptorBindingVariableDescriptorCount indicates whether the
implementation supports descriptor sets with a variable-sized last
binding.
If this feature is not enabled,
ename:VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT must: not
be used.
* [[features-features-runtimeDescriptorArray]]
pname:runtimeDescriptorArray indicates whether the implementation
supports the SPIR-V +RuntimeDescriptorArrayEXT+ capability.
If this feature is not enabled, descriptors must: not be declared in
runtime arrays.
If the sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceFeatures2KHR, it
is filled with values indicating whether each feature is supported.
sname:VkPhysicalDeviceDescriptorIndexingFeaturesEXT can: also be used in the
pname:pNext chain of slink:VkDeviceCreateInfo to enable features.
include::../validity/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.txt[]
--
endif::VK_EXT_descriptor_indexing[]
[[features-features-requirements]]
=== Feature Requirements
@ -1057,6 +1253,45 @@ ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
pname:variablePointersStorageBuffer>>, if the
`<<VK_KHR_variable_pointers>>` extension is supported.
endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
ifdef::VK_EXT_descriptor_indexing[]
* If the `<<VK_EXT_descriptor_indexing>>` extension is supported:
** <<features-features-shaderSampledImageArrayDynamicIndexing,
pname:shaderSampledImageArrayDynamicIndexing>>
** <<features-features-shaderStorageBufferArrayDynamicIndexing,
pname:shaderStorageBufferArrayDynamicIndexing>>
** <<features-features-shaderUniformTexelBufferArrayDynamicIndexing,
pname:shaderUniformTexelBufferArrayDynamicIndexing>>
** <<features-features-shaderStorageTexelBufferArrayDynamicIndexing,
pname:shaderStorageTexelBufferArrayDynamicIndexing>>
** <<features-features-shaderSampledImageArrayNonUniformIndexing,
pname:shaderSampledImageArrayNonUniformIndexing>>
** <<features-features-shaderStorageBufferArrayNonUniformIndexing,
pname:shaderStorageBufferArrayNonUniformIndexing>>
** <<features-features-shaderUniformTexelBufferArrayNonUniformIndexing,
pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
** <<features-features-descriptorBindingSampledImageUpdateAfterBind,
pname:descriptorBindingSampledImageUpdateAfterBind>>
** <<features-features-descriptorBindingStorageImageUpdateAfterBind,
pname:descriptorBindingStorageImageUpdateAfterBind>>
** <<features-features-descriptorBindingStorageBufferUpdateAfterBind,
pname:descriptorBindingStorageBufferUpdateAfterBind>> (see also
<<features-limits-robustBufferAccessUpdateAfterBind,
pname:robustBufferAccessUpdateAfterBind>>)
** <<features-features-descriptorBindingUniformTexelBufferUpdateAfterBind,
pname:descriptorBindingUniformTexelBufferUpdateAfterBind>> (see also
<<features-limits-robustBufferAccessUpdateAfterBind,
pname:robustBufferAccessUpdateAfterBind>>)
** <<features-features-descriptorBindingStorageTexelBufferUpdateAfterBind,
pname:descriptorBindingStorageTexelBufferUpdateAfterBind>> (see also
<<features-limits-robustBufferAccessUpdateAfterBind,
pname:robustBufferAccessUpdateAfterBind>>)
** <<features-features-descriptorBindingUpdateUnusedWhilePending,
pname:descriptorBindingUpdateUnusedWhilePending>>
** <<features-features-descriptorBindingPartiallyBound,
pname:descriptorBindingPartiallyBound>>
** <<features-features-runtimeDescriptorArray,
pname:runtimeDescriptorArray>>
endif::VK_EXT_descriptor_indexing[]
All other features defined in the Specification are optional:.
@ -1150,6 +1385,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a shader stage when the pname:stageFlags
member of the sname:VkDescriptorSetLayoutBinding structure has the bit
for that shader stage set.
@ -1162,6 +1402,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a shader stage when the pname:stageFlags
member of the sname:VkDescriptorSetLayoutBinding structure has the bit
for that shader stage set.
@ -1174,6 +1419,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
@ -1187,6 +1437,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
@ -1199,6 +1454,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
@ -1210,6 +1470,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
@ -1229,6 +1494,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
For the fragment shader stage the framebuffer color attachments also
count against this limit.
* [[features-limits-maxDescriptorSetSamplers]]
@ -1238,6 +1508,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-sampler>> and
<<descriptorsets-combinedimagesampler>>.
* [[features-limits-maxDescriptorSetUniformBuffers]]
@ -1247,6 +1522,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-uniformbuffer>> and
<<descriptorsets-uniformbufferdynamic>>.
* [[features-limits-maxDescriptorSetUniformBuffersDynamic]]
@ -1257,6 +1537,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-uniformbufferdynamic>>.
* [[features-limits-maxDescriptorSetStorageBuffers]]
pname:maxDescriptorSetStorageBuffers is the maximum number of storage
@ -1265,6 +1550,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-storagebuffer>> and
<<descriptorsets-storagebufferdynamic>>.
* [[features-limits-maxDescriptorSetStorageBuffersDynamic]]
@ -1275,6 +1565,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-storagebufferdynamic>>.
* [[features-limits-maxDescriptorSetSampledImages]]
pname:maxDescriptorSetSampledImages is the maximum number of sampled
@ -1284,6 +1579,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-combinedimagesampler>>,
<<descriptorsets-sampledimage>>, and
<<descriptorsets-uniformtexelbuffer>>.
@ -1293,6 +1593,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-storageimage>>, and
<<descriptorsets-storagetexelbuffer>>.
* [[features-limits-maxDescriptorSetInputAttachments]]
@ -1301,6 +1606,11 @@ include::../api/structs/VkPhysicalDeviceLimits.txt[]
layout across all pipeline shader stages and descriptor set numbers.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit.
ifdef::VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set count against this limit.
endif::VK_EXT_descriptor_indexing[]
See <<descriptorsets-inputattachment>>.
* [[features-limits-maxVertexInputAttributes]]
pname:maxVertexInputAttributes is the maximum number of vertex input
@ -2117,6 +2427,12 @@ include::../api/enums/VkSubgroupFeatureFlagBits.txt[]
* [[features-features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT
specifies the device will accept SPIR-V shader modules that contain the
code:GroupNonUniformQuad capability.
ifdef::VK_NV_shader_subgroup_partitioned[]
* [[features-features-subgroup-partitioned]]
ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will
accept SPIR-V shader modules that contain the
code:GroupNonUniformPartitionedNV capability.
endif::VK_NV_shader_subgroup_partitioned[]
--
@ -2332,6 +2648,178 @@ include::../validity/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
ifdef::VK_EXT_descriptor_indexing[]
[open,refpage='VkPhysicalDeviceDescriptorIndexingPropertiesEXT',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT structure is
defined as:
include::../api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT
structure describe the following implementation-dependent limits:
* [[features-limits-maxUpdateAfterBindDescriptorsInAllPools]]
pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of
descriptors (summed over all descriptor types) that can: be created
across all pools that are created with the
ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT bit set.
Pool creation may: fail when this limit is exceeded, or when the space
this limit represents can't satisfy a pool creation due to
fragmentation.
* [[features-limits-shaderUniformBufferArrayNonUniformIndexingNative]]
pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean
value indicating whether uniform buffer descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of uniform buffers may:
execute multiple times in order to access all the descriptors.
* [[features-limits-shaderSampledImageArrayNonUniformIndexingNative]]
pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value
indicating whether sampler and image descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of samplers or images
may: execute multiple times in order to access all the descriptors.
* [[features-limits-shaderStorageBufferArrayNonUniformIndexingNative]]
pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean
value indicating whether storage buffer descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of storage buffers may:
execute multiple times in order to access all the descriptors.
* [[features-limits-shaderStorageImageArrayNonUniformIndexingNative]]
pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value
indicating whether storage image descriptors natively support nonuniform
indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of storage images may:
execute multiple times in order to access all the descriptors.
* [[features-limits-shaderInputAttachmentArrayNonUniformIndexingNative]]
pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean
value indicating whether input attachment descriptors natively support
nonuniform indexing.
If this is ename:VK_FALSE, then a single dynamic instance of an
instruction that nonuniformly indexes an array of input attachments may:
execute multiple times in order to access all the descriptors.
* [[features-limits-robustBufferAccessUpdateAfterBind]]
pname:robustBufferAccessUpdateAfterBind is a boolean value indicating
whether <<features-features-robustBufferAccess,
pname:robustBufferAccess>> can: be enabled in a device simultaneously
with pname:descriptorBindingUniformBufferUpdateAfterBind,
pname:descriptorBindingStorageBufferUpdateAfterBind,
pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or
pname:descriptorBindingStorageTexelBufferUpdateAfterBind.
If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be
disabled or all of these update-after-bind features must: be disabled.
* [[features-limits-quadDivergentImplicitLod]]
pname:quadDivergentImplicitLod is a boolean value indicating whether
implicit level of detail calculations for image operations have
well-defined results when the image and/or sampler objects used for the
instruction are not uniform within a quad.
See <<textures-derivative-image-operations,Derivative Image
Operations>>.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindSamplers]]
pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to
pname:maxPerStageDescriptorSamplers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]]
pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to
pname:maxPerStageDescriptorUniformBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]]
pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to
pname:maxPerStageDescriptorStorageBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindSampledImages]]
pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to
pname:maxPerStageDescriptorSampledImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindStorageImages]]
pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to
pname:maxPerStageDescriptorStorageImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]]
pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to
pname:maxPerStageDescriptorInputAttachments but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxPerStageUpdateAfterBindResources]]
pname:maxPerStageUpdateAfterBindResources is similar to
pname:maxPerStageResources but counts descriptors from descriptor sets
created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindSamplers]]
pname:maxDescriptorSetUpdateAfterBindSamplers is similar to
pname:maxDescriptorSetSamplers but counts descriptors from descriptor
sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindUniformBuffers]]
pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to
pname:maxDescriptorSetUniformBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]]
pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to
pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindStorageBuffers]]
pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to
pname:maxDescriptorSetStorageBuffers but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]]
pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to
pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindSampledImages]]
pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to
pname:maxDescriptorSetSampledImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindStorageImages]]
pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to
pname:maxDescriptorSetStorageImages but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
* [[features-limits-maxDescriptorSetUpdateAfterBindInputAttachments]]
pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to
pname:maxDescriptorSetInputAttachments but counts descriptors from
descriptor sets created with or without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit
set.
If the sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2KHR,
it is filled with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
--
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_conservative_rasterization[]
@ -2445,6 +2933,77 @@ implementation-dependent limits and properties.
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_AMD_shader_core_properties[]
[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as:
include::../api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
The members of the sname:VkPhysicalDeviceShaderCorePropertiesAMD structure
describe the following implementation-dependent limits:
* [[features-limits-shaderEngineCount]] pname:shaderEngineCount is an
unsigned integer value indicating the number of shader engines found
inside the shader core of the physical device.
* [[features-limits-shaderArraysPerEngineCount]]
pname:shaderArraysPerEngineCount is an unsigned integer value indicating
the number of shader arrays inside a shader engine.
Each shader array has its own scan converter, set of compute units, and
a render back end (color and depth buffers).
Shader arrays within a shader engine share shader processor input (wave
launcher) and shader export (export buffer) units.
Currently, a shader engine can have one or two shader arrays.
* [[features-limits-computeUnitsPerShaderArray]]
pname:computeUnitsPerShaderArray is an unsigned integer value indicating
the number of compute units within a shader array.
A compute unit houses a set of SIMDs along with a sequencer module and a
local data store.
* [[features-limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an
unsigned integer value indicating the number of SIMDs inside a compute
unit.
Each SIMD processes a single instruction at a time.
* [[features-limits-wavefrontSize]] pname:wavefrontSize is an unsigned
integer value indicating the number of channels (or threads) in a
wavefront.
* [[features-limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned
integer value indicating the number of physical Scalar General Purpose
Registers (SGPRs) per SIMD.
* [[features-limits-minSgprAllocation]] pname:minSgprAllocation is an
unsigned integer value indicating the minimum number of SGPRs allocated
for a wave.
* [[features-limits-maxSgprAllocation]] pname:maxSgprAllocation is an
unsigned integer value indicating the maximum number of SGPRs allocated
for a wave.
* [[features-limits-sgprAllocationGranularity]]
pname:sgprAllocationGranularity is an unsigned integer value indicating
the granularity of SGPR allocation for a wave.
* [[features-limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned
integer value indicating the number of physical Vector General Purpose
Registers (VGPRs) per SIMD.
* [[features-limits-minVgprAllocation]] pname:minVgprAllocation is an
unsigned integer value indicating the minimum number of VGPRs allocated
for a wave.
* [[features-limits-maxVgprAllocation]] pname:maxVgprAllocation is an
unsigned integer value indicating the maximum number of VGPRs allocated
for a wave.
* [[features-limits-vgprAllocationGranularity]]
pname:vgprAllocationGranularity is an unsigned integer value indicating
the granularity of VGPR allocation for a wave.
include::../validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
If the sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is included
in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
with the implementation-dependent limits.
--
endif::VK_AMD_shader_core_properties[]
[[features-limits-minmax]]
=== Limit Requirements
@ -2749,6 +3308,29 @@ ifdef::VK_EXT_conservative_rasterization[]
| pname:fullyCoveredFragmentShaderInputVariable | - |false | implementation dependent
| pname:conservativeRasterizationPostDepthCoverage | - |false | implementation dependent
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_EXT_descriptor_indexing[]
| pname:maxUpdateAfterBindDescriptorsInAllPools | - |500000| min
| pname:shaderUniformBufferArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderSampledImageArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderStorageBufferArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderStorageImageArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:shaderInputAttachmentArrayNonUniformIndexingNative | - |false| implementation dependent
| pname:maxPerStageDescriptorUpdateAfterBindSamplers | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers | - |12 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindSampledImages | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindStorageImages | - |500000 ^9^ | min
| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| - |500000 ^9^ | min
| pname:maxPerStageUpdateAfterBindResources | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindSamplers | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindUniformBuffers | - |96 ^8^ ^9^ | min, _n_ {times} PerStage
| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| - |8 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindStorageBuffers | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| - |4 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindSampledImages | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindStorageImages | - |500000 ^9^ | min
| pname:maxDescriptorSetUpdateAfterBindInputAttachments | - |500000 ^9^ | min
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_vertex_attribute_divisor[]
| pname:maxVertexAttribDivisor | - | 2^16^-1 | min
endif::VK_EXT_vertex_attribute_divisor[]
@ -2809,6 +3391,10 @@ It may: not be possible to reach this limit in every stage.
If all shader stages are supported, _n_ = 6 (vertex, tessellation
control, tessellation evaluation, geometry, fragment, compute).
ifdef::VK_EXT_descriptor_indexing[]
9:: The ptext:UpdateAfterBind descriptor limits must: each be greater than
or equal to the corresponding ptext:non-UpdateAfterBind limit.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_sample_locations[]
@ -5720,7 +6306,7 @@ extended information in a pname:pNext chain of output structures.
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
.Valid Usage
****
* [[VUID-vkGetPhysicalDeviceImageFormatProperties2KHR-pNext-01868]]
* [[VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868]]
If the pname:pNext chain of pname:pImageFormatProperties contains an
instance of slink:VkAndroidHardwareBufferUsageANDROID, the pname:pNext
chain of pname:pImageFormatInfo must: contain an instance of

View File

@ -131,7 +131,7 @@ pname:discardRectangleCount)#.
.Valid Usage
****
* [[VUID-vkCmdSetDiscardRectangleEXT-None-00583]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled
* [[VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585]]
The sum of pname:firstDiscardRectangle and pname:discardRectangleCount
@ -235,7 +235,7 @@ values determining the size in pixels.
.Valid Usage
****
* [[VUID-vkCmdSetScissor-None-00590]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_SCISSOR dynamic state enabled
* [[VUID-vkCmdSetScissor-firstScissor-00591]]
pname:firstScissor must: be less than
@ -358,17 +358,6 @@ Finally, if the fragment was not discarded, it is used to update the
framebuffer at the fragment's framebuffer coordinates for any samples that
remain covered.
ifdef::editing-notes[]
[NOTE]
.editing-note
====
There used to be a sentence of form "These operations are diagrammed in
figure ((fig-fragops,Fragment Operations)), in the order in which they are
performed" following "described in this chapter." above, but the referred
figure does not yet exist.
====
endif::editing-notes[]
The depth bounds test, stencil test, and depth test are performed for each
pixel sample, rather than just once for each fragment.
Stencil and depth operations are performed for a pixel sample only if that
@ -564,7 +553,7 @@ include::../api/protos/vkCmdSetDepthBounds.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetDepthBounds-None-00599]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled
ifdef::VK_EXT_depth_range_unrestricted[]
* [[VUID-vkCmdSetDepthBounds-minDepthBounds-00600]]
@ -681,7 +670,7 @@ include::../api/protos/vkCmdSetStencilCompareMask.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetStencilCompareMask-None-00602]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled
****
@ -735,7 +724,7 @@ include::../api/protos/vkCmdSetStencilWriteMask.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetStencilWriteMask-None-00603]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled
****
@ -761,7 +750,7 @@ include::../api/protos/vkCmdSetStencilReference.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetStencilReference-None-00604]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled
****

View File

@ -287,7 +287,7 @@ include::../api/protos/vkCmdSetBlendConstants.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetBlendConstants-None-00612]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled
****

View File

@ -1103,6 +1103,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_external_memory,VK_KHR_external_semaphore,VK_KHR_ex
* ename:VK_ERROR_INVALID_EXTERNAL_HANDLE An external handle is not a valid
handle of the specified type.
endif::VK_VERSION_1_1,VK_KHR_external_memory,VK_KHR_external_semaphore,VK_KHR_external_fence[]
ifdef::VK_EXT_descriptor_indexing[]
* ename:VK_ERROR_FRAGMENTATION_EXT A descriptor pool creation has failed
due to fragmentation.
endif::VK_EXT_descriptor_indexing[]
If a command returns a run time error, unless otherwise specified any output
parameters will have undefined contents, except that if the output parameter

View File

@ -453,11 +453,13 @@ commands.
include::../validity/protos/vkCmdBindVertexBuffers.txt[]
--
ifdef::VK_EXT_vertex_attribute_divisor[]
== Vertex Attribute Divisor in Instanced Rendering
[open,refpage='VkPipelineVertexInputDivisorStateCreateInfoEXT',desc='Structure specifying vertex attributes assignment during instanced rendering',type='structs']
--
If the pname:pNext chain of slink:VkPipelineVertexInputStateCreateInfo
includes a sname:VkPipelineVertexInputDivisorStateCreateInfoEXT structure,
then that structure controls how vertex attributes are assigned to an
@ -479,6 +481,8 @@ include::../api/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.txt[]
include::../validity/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.txt[]
--
[open,refpage='VkVertexInputBindingDivisorDescriptionEXT',desc='Structure specifying a divisor used in instanced rendering',type='structs']
--
The individual divisor values per binding are specified using the
sname:VkVertexInputBindingDivisorDescriptionEXT structure which is defined
as:
@ -497,6 +501,9 @@ include::../api/structs/VkVertexInputBindingDivisorDescriptionEXT.txt[]
queried using
sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::pname:maxVertexAttribDivisor.
If this structure is not used to define a divisor value for an attribute
then the divisor has a logical default value of 1.
.Valid Usage
****
* [[VUID-VkVertexInputBindingDivisorDescriptionEXT-binding-01869]]
@ -514,9 +521,6 @@ include::../api/structs/VkVertexInputBindingDivisorDescriptionEXT.txt[]
include::../validity/structs/VkVertexInputBindingDivisorDescriptionEXT.txt[]
--
If this structure is not used to define a divisor value for an attribute
then the divisor has a logical default value of 1.
endif::VK_EXT_vertex_attribute_divisor[]
The address of each attribute for each code:vertexIndex and

View File

@ -500,27 +500,6 @@ code:OpTypeSampledImage, or arrays of only these types.
Variables of type code:OpTypeImage must: have a code:Sampled operand of 1
(sampled image) or 2 (storage image).
Any array of these types must: only be indexed with constant integral
expressions, except under the following conditions:
* For arrays of code:OpTypeImage variables with code:Sampled operand of 2,
if the pname:shaderStorageImageArrayDynamicIndexing feature is enabled
and the shader module declares the code:StorageImageArrayDynamicIndexing
capability, the array must: only be indexed by dynamically uniform
expressions.
* For arrays of code:OpTypeSampler, code:OpTypeSampledImage variables, or
code:OpTypeImage variables with code:Sampled operand of 1, if the
pname:shaderSampledImageArrayDynamicIndexing feature is enabled and the
shader module declares the code:SampledImageArrayDynamicIndexing
capability, the array must: only be indexed by dynamically uniform
expressions.
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* If sampler Y'C~B~C~R~ conversion is enabled, the combined image sampler
must: be indexed only by constant integral expressions when aggregated
into arrays in shader code, irrespective of the
pname:shaderSampledImageArrayDynamicIndexing feature.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
The code:Sampled code:Type of an code:OpTypeImage declaration must: match
the same basic data type as the corresponding resource, or the values
obtained by reading or sampling from this image are undefined.
@ -563,25 +542,6 @@ Such variables must: be:
<<interfaces-resources-layout,Offset and Stride Assignment>>.
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
Any array of these types must: only be indexed with constant integral
expressions, except under the following conditions.
* For arrays of code:Block variables in the code:Uniform storage class, if
the pname:shaderUniformBufferArrayDynamicIndexing feature is enabled and
the shader module declares the code:UniformBufferArrayDynamicIndexing
capability, the array must: only be indexed by dynamically uniform
expressions.
* For arrays of code:BufferBlock variables in the code:Uniform storage
class
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
or arrays of code:Block variables in the code:StorageBuffer storage
class
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
, if the pname:shaderStorageBufferArrayDynamicIndexing feature is
enabled and the shader module declares the
code:StorageBufferArrayDynamicIndexing capability, the array must: only
be indexed by dynamically uniform expressions.
ifndef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
The code:Offset decoration for any variable in a code:Block must: not cause
the space required for that variable to extend outside the range [eq]#[0,
@ -620,6 +580,63 @@ SPIR-V variables decorated with a descriptor set and binding that identify a
can: have a type of code:OpTypeImage, code:OpTypeSampler (code:Sampled=1),
or code:OpTypeSampledImage.
Arrays of any of these types can: be indexed with constant integral
expressions.
The following features must: be enabled and capabilities must: be declared
in order to index such arrays with dynamically uniform or non-uniform
indices:
* Storage images (except storage texel buffers and input attachments):
** Dynamically uniform: pname:shaderStorageImageArrayDynamicIndexing and
code:StorageImageArrayDynamicIndexing
ifdef::VK_EXT_descriptor_indexing[]
** Non-uniform: pname:shaderStorageImageArrayNonUniformIndexing and
code:StorageImageArrayNonUniformIndexingEXT
* Storage texel buffers:
** Dynamically uniform: pname:shaderStorageTexelBufferArrayDynamicIndexing
and code:StorageTexelBufferArrayDynamicIndexingEXT
** Non-uniform: pname:shaderStorageTexelBufferArrayNonUniformIndexing and
code:StorageTexelBufferArrayNonUniformIndexingEXT
* Input attachments:
** Dynamically uniform: pname:shaderInputAttachmentArrayDynamicIndexing
and code:InputAttachmentArrayDynamicIndexingEXT
** Non-uniform: pname:shaderInputAttachmentArrayNonUniformIndexing and
code:InputAttachmentArrayNonUniformIndexingEXT
endif::VK_EXT_descriptor_indexing[]
* Sampled images (except uniform texel buffers):
** Dynamically uniform: pname:shaderSampledImageArrayDynamicIndexing and
code:SampledImageArrayDynamicIndexing
ifdef::VK_EXT_descriptor_indexing[]
** Non-uniform: pname:shaderSampledImageArrayNonUniformIndexing and
code:SampledImageArrayNonUniformIndexingEXT
* Uniform texel buffers:
** Dynamically uniform: pname:shaderUniformTexelBufferArrayDynamicIndexing
and code:UniformTexelBufferArrayDynamicIndexingEXT
** Non-uniform: pname:shaderUniformTexelBufferArrayNonUniformIndexing and
code:UniformTexelBufferArrayNonUniformIndexingEXT
endif::VK_EXT_descriptor_indexing[]
* Uniform buffers:
** Dynamically uniform: pname:shaderUniformBufferArrayDynamicIndexing and
code:UniformBufferArrayDynamicIndexing
ifdef::VK_EXT_descriptor_indexing[]
** Non-uniform: pname:shaderUniformBufferArrayNonUniformIndexing and
code:UniformBufferArrayNonUniformIndexingEXT
endif::VK_EXT_descriptor_indexing[]
* Storage buffers:
** Dynamically uniform: pname:shaderStorageBufferArrayDynamicIndexing and
code:StorageBufferArrayDynamicIndexing
ifdef::VK_EXT_descriptor_indexing[]
** Non-uniform: pname:shaderStorageBufferArrayNonUniformIndexing and
code:StorageBufferArrayNonUniformIndexingEXT
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* If sampler Y'C~B~C~R~ conversion is enabled, the combined image sampler
must: be indexed only by constant integral expressions when aggregated
into arrays in shader code, irrespective of the
pname:shaderSampledImageArrayDynamicIndexing feature.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
[[interfaces-resources-correspondence]]
.Shader Resource and Descriptor Type Correspondence
[width="90%",cols="<1,<2",options="header"]
@ -698,6 +715,16 @@ If the code:Binding decoration is used with an array, the entire array is
assigned that binding value.
The size of the array declaration must: be no larger than the
pname:descriptorCount of that sname:VkDescriptorSetLayoutBinding.
ifdef::VK_EXT_descriptor_indexing[]
If the array is runtime-sized, then array elements greater than or equal to
the size of that binding in the bound descriptor set must: not be used.
If the array is runtime-sized, the pname:runtimeDescriptorArray feature
must: be enabled and the code:RuntimeDescriptorArrayEXT capability must: be
declared.
endif::VK_EXT_descriptor_indexing[]
ifndef::VK_EXT_descriptor_indexing[]
The array must: not be runtime-sized.
endif::VK_EXT_descriptor_indexing[]
The index of each element of the array is referred to as the _arrayElement_.
For the purposes of interface matching and descriptor set
<<descriptorsets-updates,operations>>, if a resource variable is not an
@ -738,16 +765,34 @@ descriptor set layout binding.
|====
| Resources per Stage | Resource Types
.2+<.^| pname:maxPerStageDescriptorSamplers
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxPerStageDescriptorUpdateAfterBindSamplers
endif::VK_EXT_descriptor_indexing[]
| sampler | combined image sampler
.3+<.^| pname:maxPerStageDescriptorSampledImages
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxPerStageDescriptorUpdateAfterBindSampledImages
endif::VK_EXT_descriptor_indexing[]
| sampled image | combined image sampler | uniform texel buffer
.2+<.^| pname:maxPerStageDescriptorStorageImages
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxPerStageDescriptorUpdateAfterBindStorageImages
endif::VK_EXT_descriptor_indexing[]
| storage image | storage texel buffer
.2+<.^| pname:maxPerStageDescriptorUniformBuffers
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers
endif::VK_EXT_descriptor_indexing[]
| uniform buffer | uniform buffer dynamic
.2+<.^| pname:maxPerStageDescriptorStorageBuffers
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers
endif::VK_EXT_descriptor_indexing[]
| storage buffer | storage buffer dynamic
| pname:maxPerStageDescriptorInputAttachments
ifdef::VK_EXT_descriptor_indexing[]
or pname:maxPerStageDescriptorUpdateAfterBindInputAttachments
endif::VK_EXT_descriptor_indexing[]
| input attachment^1^
|====

View File

@ -1178,7 +1178,7 @@ endif::VK_KHR_dedicated_allocation[]
been created without ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT set in
slink:VkBufferCreateInfo::pname:flags
ifdef::VK_KHR_external_memory_win32[]
* [[VUID-VkMemoryDedicatedAllocateInfoKHR-image-01876]]
* [[VUID-VkMemoryDedicatedAllocateInfo-image-01876]]
If pname:image is not sname:VK_NULL_HANDLE and
slink:VkMemoryAllocateInfo defines a memory import operation with handle
type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
@ -1190,7 +1190,7 @@ ifdef::VK_KHR_external_memory_win32[]
external handle was created by the Vulkan API, then the memory being
imported must: also be a dedicated image allocation and pname:image must
be identical to the image associated with the imported memory.
* [[VUID-VkMemoryDedicatedAllocateInfoKHR-buffer-01877]]
* [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01877]]
If pname:buffer is not dlink:VK_NULL_HANDLE and
slink:VkMemoryAllocateInfo defines a memory import operation with handle
type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
@ -1204,14 +1204,14 @@ ifdef::VK_KHR_external_memory_win32[]
must be identical to the buffer associated with the imported memory.
endif::VK_KHR_external_memory_win32[]
ifdef::VK_KHR_external_memory_fd[]
* [[VUID-VkMemoryDedicatedAllocateInfoKHR-image-01878]]
* [[VUID-VkMemoryDedicatedAllocateInfo-image-01878]]
If pname:image is not sname:VK_NULL_HANDLE and
slink:VkMemoryAllocateInfo defines a memory import operation with handle
type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory
being imported must: also be a dedicated image allocation and
pname:image must be identical to the image associated with the imported
memory.
* [[VUID-VkMemoryDedicatedAllocateInfoKHR-buffer-01879]]
* [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01879]]
If pname:buffer is not sname:VK_NULL_HANDLE and
slink:VkMemoryAllocateInfo defines a memory import operation with handle
type ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory

View File

@ -1742,7 +1742,7 @@ parameter:
pipeline objects, then that command buffer state becomes undefined.
Dynamic state setting commands must: not be issued for state that is not
specified as dynamic in the currently bound pipeline object.
specified as dynamic in the bound pipeline object.
Dynamic state that does not affect the result of operations can: be left
undefined.

View File

@ -536,8 +536,8 @@ The custom sample locations used for rasterization when
sname:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
is ename:VK_TRUE are specified by the
sname:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsInfo
property of the currently bound graphics pipeline, if the pipeline was not
created with ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT enabled.
property of the bound graphics pipeline, if the pipeline was not created
with ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT enabled.
Otherwise, the sample locations used for rasterization are set by calling
fname:vkCmdSetSampleLocationsEXT:
@ -551,13 +551,13 @@ include::../api/protos/vkCmdSetSampleLocationsEXT.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetSampleLocationsEXT-None-01528]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled
* [[VUID-vkCmdSetSampleLocationsEXT-sampleLocationsPerPixel-01529]]
The pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo
must: equal the pname:rasterizationSamples member of the
slink:VkPipelineMultisampleStateCreateInfo structure the currently bound
graphics pipeline has been created with
slink:VkPipelineMultisampleStateCreateInfo structure the bound graphics
pipeline has been created with
* [[VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530]]
If
slink:VkPhysicalDeviceSampleLocationsPropertiesEXT::pname:variableSampleLocations
@ -710,7 +710,7 @@ include::../api/protos/vkCmdSetLineWidth.txt[]
.Valid Usage
****
* [[VUID-vkCmdSetLineWidth-None-00787]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled
* [[VUID-vkCmdSetLineWidth-lineWidth-00788]]
If the <<features-features-wideLines,wide lines>> feature is not
@ -1213,7 +1213,7 @@ endif::VK_EXT_depth_range_unrestricted[]
.Valid Usage
****
* [[VUID-vkCmdSetDepthBias-None-00789]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled
* [[VUID-vkCmdSetDepthBias-depthBiasClamp-00790]]
If the <<features-features-depthBiasClamp,depth bias clamping>> feature

View File

@ -295,22 +295,17 @@ are executed are considered active for those secondary command buffers.
.Valid Usage
****
* [[VUID-vkCmdBeginQuery-queryPool-00798]]
The query identified by pname:queryPool and pname:query must: currently
not be <<queries-operation-active,active>>
* [[VUID-vkCmdBeginQuery-queryPool-00799]]
The query identified by pname:queryPool and pname:query must: be
unavailable
* [[VUID-vkCmdBeginQuery-queryPool-01922]]
pname:queryPool must: have been created with a pname:queryType that
differs from that of any queries that are
<<queries-operation-active,active>> within pname:commandBuffer
* [[VUID-vkCmdBeginQuery-None-00807]]
All queries used by the command must: be unavailable
* [[VUID-vkCmdBeginQuery-queryType-00800]]
If the <<features-features-occlusionQueryPrecise,precise occlusion
queries>> feature is not enabled, or the pname:queryType used to create
pname:queryPool was not ename:VK_QUERY_TYPE_OCCLUSION, pname:flags must:
not contain ename:VK_QUERY_CONTROL_PRECISE_BIT
* [[VUID-vkCmdBeginQuery-queryPool-00801]]
pname:queryPool must: have been created with a pname:queryType that
differs from that of any other queries that have been made
<<queries-operation-active,active>>, and are currently still active
within pname:commandBuffer
* [[VUID-vkCmdBeginQuery-query-00802]]
pname:query must: be less than the number of queries in pname:queryPool
* [[VUID-vkCmdBeginQuery-queryType-00803]]
@ -334,10 +329,6 @@ ifdef::VK_VERSION_1_1[]
pname:commandBuffer must: not be a protected command buffer
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdBeginQuery-None-00806]]
All queries used by the command must: not be active
* [[VUID-vkCmdBeginQuery-None-00807]]
All queries used by the command must: be unavailable
* [[VUID-vkCmdBeginQuery-query-00808]]
If fname:vkCmdBeginQuery is called within a render pass instance, the
sum of pname:query and the number of bits set in the current subpass's
@ -399,9 +390,9 @@ of the query.
.Valid Usage
****
* [[VUID-vkCmdEndQuery-queryPool-00809]]
The query identified by pname:queryPool and pname:query must: currently
be <<queries-operation-active,active>>
* [[VUID-vkCmdEndQuery-None-01923]]
All queries used by the command must: be
<<queries-operation-active,active>>
* [[VUID-vkCmdEndQuery-query-00810]]
pname:query must: be less than the number of queries in pname:queryPool
ifdef::VK_VERSION_1_1[]
@ -409,8 +400,6 @@ ifdef::VK_VERSION_1_1[]
pname:commandBuffer must: not be a protected command buffer
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[VUID-vkCmdEndQuery-None-00811]]
All queries used by the command must: be active
* [[VUID-vkCmdEndQuery-query-00812]]
If fname:vkCmdEndQuery is called within a render pass instance, the sum
of pname:query and the number of bits set in the current subpass's view

View File

@ -819,7 +819,8 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
If the <<features-features-sparseBinding,sparse bindings>> feature is
not enabled, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
* If the <<features-features-sparseResidencyAliased,sparse aliased
* [[VUID-VkImageCreateInfo-flags-01924]]
If the <<features-features-sparseResidencyAliased,sparse aliased
residency>> feature is not enabled, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
* [[VUID-VkImageCreateInfo-imageType-00970]]
@ -931,7 +932,8 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
* If any of the bits ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
* [[VUID-VkImageCreateInfo-None-01925]]
If any of the bits ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set,
ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT must: not also be set
@ -3153,7 +3155,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
be a slink:VkImagePlaneMemoryRequirementsInfo in the pname:pNext chain
of the slink:VkImageMemoryRequirementsInfo2 structure
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-VkImageMemoryRequirementsInfo2KHR-image-01897]]
* [[VUID-VkImageMemoryRequirementsInfo2-image-01897]]
If pname:image was created with the
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
external memory handle type, then pname:image must: be bound to memory.
@ -3550,7 +3552,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
pname:buffer), pname:memory must: have been created with
slink:VkMemoryDedicatedAllocateInfo::pname:buffer equal to pname:buffer
and pname:memoryOffset must: be zero
* [[VUID-VkBindBufferMemoryInfoKHR-memory-01900]]
* [[VUID-VkBindBufferMemoryInfo-memory-01900]]
If the sname:VkMemoryAllocateInfo provided when pname:memory was
allocated included an instance of slink:VkMemoryDedicatedAllocateInfo in
its pname:pNext chain, and
@ -3892,7 +3894,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
pname:image), pname:memory must: have been created with
slink:VkMemoryDedicatedAllocateInfo::pname:image equal to pname:image
and pname:memoryOffset must: be zero
* [[VUID-VkBindImageMemoryInfoKHR-memory-01903]]
* [[VUID-VkBindImageMemoryInfo-memory-01903]]
If the sname:VkMemoryAllocateInfo provided when pname:memory was
allocated included an instance of slink:VkMemoryDedicatedAllocateInfo in
its pname:pNext chain, and

View File

@ -587,7 +587,7 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
pname:format must: not be ename:VK_FORMAT_UNDEFINED
endif::VK_ANDROID_external_memory_android_hardware_buffer[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* [[VUID-VkSamplerYcbcrConversionCreateInfoKHR-format-01904]]
* [[VUID-VkSamplerYcbcrConversionCreateInfo-format-01904]]
If an external format conversion is being created, pname:format must: be
ename:VK_FORMAT_UNDEFINED, otherwise it must: not be
ename:VK_FORMAT_UNDEFINED.

View File

@ -784,6 +784,9 @@ through the invocations within a subgroup.
The clustered subgroup operations allow invocations to perform an operation
among partitions of a subgroup, such that the operation is only performed
within the subgroup invocations within a partition.
The partitions for clustered subgroup operations are consecutive
power-of-two size groups of invocations and the cluster size must: be known
at pipeline creation time.
The operations supported are add, mul, min, max, and, or, xor.
[[shaders-subgroup-quad]]
@ -792,6 +795,20 @@ The operations supported are add, mul, min, max, and, or, xor.
The quad subgroup operations allow clusters of 4 invocations (a quad), to
share data efficiently with each other.
ifdef::VK_NV_shader_subgroup_partitioned[]
[[shaders-subgroup-partitioned]]
=== Partitioned Subgroup Operations
The partitioned subgroup operations allow invocations to perform an
operation among partitions of a subgroup, such that the operation is only
performed within the subgroup invocations within a partition.
The partitions for partitioned subgroup operations can: group the
invocations into arbitrary subsets and can: be computed at runtime.
The operations supported are add, mul, min, max, and, or, xor.
endif::VK_NV_shader_subgroup_partitioned[]
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_validation_cache[]

View File

@ -1367,6 +1367,7 @@ D_{\textit{ref}} & = \frac{D_{\textit{ref}}}{q}, & \text{if provided}
+++++++++++++++++++
[[textures-derivative-image-operations]]
=== Derivative Image Operations
Derivatives are used for LOD selection.
@ -1404,6 +1405,33 @@ Instead, the floating point scalar coordinate is directly assigned to
[eq]#{lambda}~base~# as described in <<textures-level-of-detail-operation,
Level-of-Detail Operation>>.
For implicit derivative image instructions, the partial derivative values
may: be computed by linear approximation using a 2{times}2 neighborhood of
shader invocations (known as a _quad_), as described above.
If the instruction is in control flow that is not uniform across the quad,
then the derivative values and hence the implicit LOD values are undefined.
ifdef::VK_EXT_descriptor_indexing[]
If the image or sampler object used by an implicit derivative image
instruction is not uniform across the quad and
<<features-limits-quadDivergentImplicitLod,pname:quadDivergentImplicitLod>>
is not supported, then the derivative and LOD values are undefined.
Implicit derivatives are well-defined when the image and sampler and control
flow are uniform across the quad, even if they diverge between different
quads.
If
<<features-limits-quadDivergentImplicitLod,pname:quadDivergentImplicitLod>>
is supported, then derivatives and implicit LOD values are well-defined even
if the image or sampler object are not uniform within a quad.
The derivatives are computed as specified above, and the implicit LOD
calculation proceeds for each shader invocation using its respective image
and sampler object.
For the purposes of implicit derivatives, code:Flat fragment input variables
are uniform within a quad.
endif::VK_EXT_descriptor_indexing[]
=== Cube Map Face Selection and Transformations

View File

@ -622,7 +622,7 @@ replace the current state for the viewport index [eq]#pname:firstViewport
.Valid Usage
****
* [[VUID-vkCmdSetViewport-None-01221]]
The currently bound graphics pipeline must: have been created with the
The bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled
* [[VUID-vkCmdSetViewport-firstViewport-01222]]
pname:firstViewport must: be less than

View File

@ -68,10 +68,13 @@ class ValidUsageToJsonPreprocessor < Extensions::Preprocessor
extension_stack.each do | extension |
returned_lines << ('* ' + extension)
end
returned_lines
returned_lines
elsif in_validusage == :inside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_') and line.end_with?('[]')
# Turn extension ifdefs into list items for when we're processing VU later.
['* ' + line]
elsif in_validusage == :outside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_') and line.end_with?('[]')
# Remove the extension defines from the new lines, as we've dealt with them
[]
elsif line.match(/\[\[(VUID-([^-]+)-[^\]]+)\]\]/)
# Add all the VUIDs into an array to guarantee they're all caught later.
detected_vuid_list << line.match(/(VUID-([^-]+)-[^\]]+)/)[0]
@ -83,7 +86,7 @@ class ValidUsageToJsonPreprocessor < Extensions::Preprocessor
# Stash the detected vuids into a document attribute
document.set_attribute('detected_vuid_list', detected_vuid_list.join("\n"))
# Return a new reader after preprocessing
Reader.new(new_lines)
end

View File

@ -122,32 +122,32 @@
y="4.4979596" />
<path
style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 129.43237,127.5292 h 47.625"
d="m 129.64583,80.041678 h 47.625"
id="path5163"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 129.43237,119.59171 h 47.625"
d="m 129.64583,119.72918 h 47.625"
id="path5165"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 129.43237,111.6542 h 47.625"
d="m 129.64583,111.79168 h 47.625"
id="path5167"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 129.43237,103.7167 h 47.625"
d="m 129.64583,103.85418 h 47.625"
id="path5169"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 129.43237,95.779205 h 47.625"
d="m 129.64583,95.916678 h 47.625"
id="path5171"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.39687496px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 129.43237,87.841705 h 47.625"
d="m 129.64583,87.979178 h 47.625"
id="path5173"
inkscape:connector-curvature="0" />
<text
@ -164,13 +164,13 @@
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
x="153.24486"
y="81.888588"
x="153.45833"
y="127.66668"
id="text2799"><tspan
sodipodi:role="line"
id="tspan2797"
x="153.24486"
y="81.888588"
x="153.45833"
y="127.66668"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">(no edge)</tspan></text>
<text
xml:space="preserve"
@ -341,7 +341,7 @@
id="tspan2797-6-4-0"
x="105.61983"
y="56.091705"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"
@ -352,7 +352,7 @@
id="tspan2797-6-4-0-5"
x="105.61983"
y="2.5135825"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL3</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.39687496">OL1</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.39687496"

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
#define VK_HEADER_VERSION 71
#define VK_HEADER_VERSION 72
#define VK_NULL_HANDLE 0
@ -147,6 +147,7 @@ typedef enum VkResult {
VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
VK_ERROR_INVALID_SHADER_NV = -1000012000,
VK_ERROR_FRAGMENTATION_EXT = -1000161000,
VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
@ -377,10 +378,16 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = 1000161000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = 1000161001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = 1000161002,
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = 1000161003,
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = 1000161004,
VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
@ -1498,12 +1505,14 @@ typedef VkFlags VkSamplerCreateFlags;
typedef enum VkDescriptorSetLayoutCreateFlagBits {
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001,
VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = 0x00000002,
VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkDescriptorSetLayoutCreateFlagBits;
typedef VkFlags VkDescriptorSetLayoutCreateFlags;
typedef enum VkDescriptorPoolCreateFlagBits {
VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = 0x00000002,
VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkDescriptorPoolCreateFlagBits;
typedef VkFlags VkDescriptorPoolCreateFlags;
@ -3738,6 +3747,7 @@ typedef enum VkSubgroupFeatureFlagBits {
VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100,
VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkSubgroupFeatureFlagBits;
typedef VkFlags VkSubgroupFeatureFlags;
@ -7232,6 +7242,95 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT(
void* pData);
#endif
#define VK_EXT_descriptor_indexing 1
#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2
#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing"
typedef enum VkDescriptorBindingFlagBitsEXT {
VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = 0x00000001,
VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = 0x00000002,
VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = 0x00000004,
VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = 0x00000008,
VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkDescriptorBindingFlagBitsEXT;
typedef VkFlags VkDescriptorBindingFlagsEXT;
typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfoEXT {
VkStructureType sType;
const void* pNext;
uint32_t bindingCount;
const VkDescriptorBindingFlagsEXT* pBindingFlags;
} VkDescriptorSetLayoutBindingFlagsCreateInfoEXT;
typedef struct VkPhysicalDeviceDescriptorIndexingFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 shaderInputAttachmentArrayDynamicIndexing;
VkBool32 shaderUniformTexelBufferArrayDynamicIndexing;
VkBool32 shaderStorageTexelBufferArrayDynamicIndexing;
VkBool32 shaderUniformBufferArrayNonUniformIndexing;
VkBool32 shaderSampledImageArrayNonUniformIndexing;
VkBool32 shaderStorageBufferArrayNonUniformIndexing;
VkBool32 shaderStorageImageArrayNonUniformIndexing;
VkBool32 shaderInputAttachmentArrayNonUniformIndexing;
VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing;
VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing;
VkBool32 descriptorBindingUniformBufferUpdateAfterBind;
VkBool32 descriptorBindingSampledImageUpdateAfterBind;
VkBool32 descriptorBindingStorageImageUpdateAfterBind;
VkBool32 descriptorBindingStorageBufferUpdateAfterBind;
VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind;
VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind;
VkBool32 descriptorBindingUpdateUnusedWhilePending;
VkBool32 descriptorBindingPartiallyBound;
VkBool32 descriptorBindingVariableDescriptorCount;
VkBool32 runtimeDescriptorArray;
} VkPhysicalDeviceDescriptorIndexingFeaturesEXT;
typedef struct VkPhysicalDeviceDescriptorIndexingPropertiesEXT {
VkStructureType sType;
void* pNext;
uint32_t maxUpdateAfterBindDescriptorsInAllPools;
VkBool32 shaderUniformBufferArrayNonUniformIndexingNative;
VkBool32 shaderSampledImageArrayNonUniformIndexingNative;
VkBool32 shaderStorageBufferArrayNonUniformIndexingNative;
VkBool32 shaderStorageImageArrayNonUniformIndexingNative;
VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative;
VkBool32 robustBufferAccessUpdateAfterBind;
VkBool32 quadDivergentImplicitLod;
uint32_t maxPerStageDescriptorUpdateAfterBindSamplers;
uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers;
uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers;
uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages;
uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages;
uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments;
uint32_t maxPerStageUpdateAfterBindResources;
uint32_t maxDescriptorSetUpdateAfterBindSamplers;
uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers;
uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers;
uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
uint32_t maxDescriptorSetUpdateAfterBindSampledImages;
uint32_t maxDescriptorSetUpdateAfterBindStorageImages;
uint32_t maxDescriptorSetUpdateAfterBindInputAttachments;
} VkPhysicalDeviceDescriptorIndexingPropertiesEXT;
typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfoEXT {
VkStructureType sType;
const void* pNext;
uint32_t descriptorSetCount;
const uint32_t* pDescriptorCounts;
} VkDescriptorSetVariableDescriptorCountAllocateInfoEXT;
typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupportEXT {
VkStructureType sType;
void* pNext;
uint32_t maxVariableDescriptorCount;
} VkDescriptorSetVariableDescriptorCountLayoutSupportEXT;
#define VK_EXT_shader_viewport_index_layer 1
#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1
#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer"
@ -7310,6 +7409,31 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD(
uint32_t marker);
#endif
#define VK_AMD_shader_core_properties 1
#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 1
#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties"
typedef struct VkPhysicalDeviceShaderCorePropertiesAMD {
VkStructureType sType;
void* pNext;
uint32_t shaderEngineCount;
uint32_t shaderArraysPerEngineCount;
uint32_t computeUnitsPerShaderArray;
uint32_t simdPerComputeUnit;
uint32_t wavefrontsPerSimd;
uint32_t wavefrontSize;
uint32_t sgprsPerSimd;
uint32_t minSgprAllocation;
uint32_t maxSgprAllocation;
uint32_t sgprAllocationGranularity;
uint32_t vgprsPerSimd;
uint32_t minVgprAllocation;
uint32_t maxVgprAllocation;
uint32_t vgprAllocationGranularity;
} VkPhysicalDeviceShaderCorePropertiesAMD;
#define VK_EXT_vertex_attribute_divisor 1
#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 1
#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
@ -7334,6 +7458,11 @@ typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT {
#define VK_NV_shader_subgroup_partitioned 1
#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1
#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned"
#ifdef __cplusplus
}
#endif

View File

@ -5,68 +5,36 @@
<body>
<h1>Vulkan Spec Sandbox</h1>
<p> This is the vulkan spec sandbox, used to view generated Vulkan API and
related documents. It is updated by hand periodically by Jon Leech. </p>
<p> This is the vulkan spec sandbox, used to view generated Vulkan API
Specifications and related documents. Some or all of the links below may
not be present, depending on how the specification was built.</p>
<ul>
<li> The <a href="1.0/styleguide.html">Vulkan API and Documentation
<li> The <a href="styleguide.html">Vulkan API and Documentation
Style Guide</a> defines mandatory and recommended practices
for writing and modifying Specifications, extensions,
and reference page language. </li>
<li> The <a href="1.0/registry.html">Vulkan API Registry</a> document
<li> The <a href="registry.html">Vulkan API Registry</a> document
describes the XML schema used in <tt>vk.xml</tt> in considerable
detail, for use when adding to or modifying the API. </li>
<li> <b> Core API Specifications </b>
<li> <b> Vulkan 1.1 Core API Specifications </b>
<ul>
<li> <a href="1.0/html/vkspec.html">Single document</a> (HTML5) </li>
<li> <a href="1.0/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
</ul>
</li>
<li> <b> Core + Khronos Extensions API Specifications </b>
<ul>
<li> <a href="1.0-wsi_extensions/html/vkspec.html">Single document</a> (HTML5) </li>
<li> <a href="1.0-wsi_extensions/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
</ul>
</li>
<li> <b> Core + All Extensions API Specifications </b>
<ul>
<li> <a href="1.0-extensions/html/vkspec.html">Single document</a> (HTML5) </li>
<li> <a href="1.0-extensions/pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
</ul>
</li>
<li> <b> Khronos Data Format 1.1 Specification </b>
<ul>
<li> <a href="df/df_inline.html">(HTML)</a> </li>
<li> <a href="df/df.pdf">(PDF)</a> </li>
<li> <a href="html/vkspec.html">Single document</a> (HTML5) </li>
<li> <a href="pdf/vkspec.pdf"> Vulkan API spec (PDF)</a> </li>
</ul>
</li>
<li> <b> Validator script output (Core API only)</b>
<ul>
<li> <a href="1.0/checks/notInSpec.txt">List of commands, structs, etc. not included in API spec</a></li>
<li> <a href="1.0/checks/specErrs.txt">Validator script output for API specification</a>
<li> <a href="1.0/checks/manErrs.txt">Validator script output for man pages</a>
<li> <a href="checks/notInSpec.txt">List of commands, structs, etc. not included in API spec</a></li>
<li> <a href="checks/specErrs.txt">Validator script output for API specification</a>
<li> <a href="checks/manErrs.txt">Validator script output for man pages</a>
</ul>
</li>
<li> <b> Reference pages (Core API only)</b>
<ul>
<li> <a href="1.0/apispec.html">Vulkan ref pages</a> (HTML, single document) </li>
<li> <a href="1.0/apispec.pdf">Vulkan ref pages</a> (PDF, single document) </li>
<li> <a href="1.0/man/html/">Vulkan ref pages</a> (HTML, separate files) </li>
</ul>
</li>
<li> <b> The following targets are for internal use only and are probably
not included in, or if included, not up to date in the sandbox
</b> </li>
<ul>
<li> Core API <a href="1.0/html/vkspec.html">Single document</a>
(HTML5 from 'asciidoc') </li>
<li> Core + KHR API <a
href="1.0-wsi_extensions/html/vkspec.html">Single document</a>
(HTML5 from 'asciidoc') </li>
<li> Core + All Extensions API <a
href="1.0-extensions/html/vkspec.html">Single document</a> (HTML5
from 'asciidoc') </li>
<li> <a href="1.0/man/3/">Vulkan ref pages</a> (nroff / Unix man page markup, separate files - <b>deprecated</b>) </li>
<li> <a href="apispec.html">Vulkan ref pages</a> (HTML, single document) </li>
<li> <a href="apispec.pdf">Vulkan ref pages</a> (PDF, single document) </li>
<li> <a href="man/html/">Vulkan ref pages</a> (HTML, separate files) </li>
</ul>
</li>
</ul>

View File

@ -660,7 +660,7 @@ if __name__ == '__main__':
# If no files are specified, reflow the entire specification chapters folder
if len(args.files) == 0:
folder_to_reflow = os.getcwd()
folder_to_reflow += '/doc/specs/vulkan'
# folder_to_reflow += '/doc/specs/vulkan'
reflowAllAdocFiles(folder_to_reflow, args)
else:
for file in args.files:

View File

@ -1,2 +1,2 @@
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 1917
startVUID = 1926

View File

@ -58,7 +58,7 @@ structure and enumerant types, as well as additional types
of registered information specific to Vulkan.
The Vulkan C header files generated from the registry are checked in under
`src/vulkan/`.
`include/vulkan/`.
== Schema Choices
@ -96,7 +96,7 @@ this is unlikely to happen.
= Getting Started
See
https://gitlab.khronos.org/vulkan/vulkan/blob/master/src/spec/README.adoc[`src/spec/README.adoc`]
https://gitlab.khronos.org/vulkan/vulkan/blob/master/xml/README.adoc[`xml/README.adoc`]
in the `Vulkan-Docs` repository for information on required toolchain
components such as Python 3, pass:[g++], and GNU make.
@ -104,26 +104,26 @@ Once you have the right tools installed, perform the following steps:
* Check out the `Vulkan-Docs` repository linked above from Khronos
Github (there are instructions at the link)
* `cd` to the root directory in your checked-out repo
* Switch to the `master` branch.
* Go to `vulkan/src/spec` in your checked-out repo
* Invoke `make clean ; make install ; make test`
This should regenerate `vulkan_core.h` and a variety of platform-specific
headers, install them in `../vulkan/`, and verify that the headers build
headers, install them in `../include/vulkan/`, and verify that the headers build
properly. The result should be identical to the version you just pulled from
Github. They can be compared by, for example:
`git diff ../vulkan/`
`git diff ../include/vulkan/`
The `install` target also generates source code for a simple extension
loader library in `../ext_loader/`.
loader library in `../src/ext_loader/`.
Other Makefile targets in `src/spec` include:
Other Makefile targets in `xml/` include:
* `validate` - validate `vk.xml` against the XML schema. Recommended
if you are making nontrivial changes.
* The asciidoc includes used by the Specification and Reference Pages
are built using the 'make generated' target in `doc/specs/vulkan/`,
are built using the 'make generated' target in the parent directory Makefile,
although they use the scripts and XML in this directory. These files
are generated dynamically when building the specs, since their
contents depend on the exact set of extensions the Specification is
@ -235,6 +235,8 @@ Zero or more of each of the following tags, normally in this order
* <<tag-vendorids,tag:vendorids>> - defines Khronos vendor IDs,
described in detail in the "`Layers and Extensions`" appendix of the
Vulkan Specification.
* <<tag-platforms,tag:platforms>> - defines platform names corresponding
to platform-specific <<tag-extension,API extensions>>.
* <<tag-tags,tag:tags>> - defines author IDs used for
extensions and layers.
Author IDs are described in detail in the "`Layers & Extensions`"

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
specdir=../../../out/
specdir=out
RHOST=kaylee
RPATH=/home/khronos/memberftp/vulkan/

View File

@ -745,7 +745,8 @@ Contents of an implementor's note go here.
There are a variety of common terms that have several equivalent word
choices.
Always use the words in the first column instead of the alternate terms.
Always use the words or phrases in the first column instead of the alternate
terms.
This list may not be comprehensive; when in doubt, be guided by the existing
<<vulkan-spec,Vulkan API Specification>>.
@ -760,6 +761,11 @@ This list may not be comprehensive; when in doubt, be guided by the existing
| bitmask | bit field
| Technically correct. Vulkan bitmasks are just integers and
are not logically addressable at the bit level.
| bound | currently bound
| Appears primarily in valid usage statements, which are
always referring to the current state of the objects
they are validating.
Rare exceptions may be justified in other cases.
| command | function
| Except when talking about function pointers returned by
ftext:vkGet*ProcAddr commands.

View File

@ -162,7 +162,7 @@ include::style/vuid.txt[]
* 2017-10-15 - Describe how to write <<writing-latexmath-in-table-cells,
LaTeX Math in Table Cells>> (internal issue 908).
* 2017-10-15 - Add more details of <<extensions-naming-author-IDs, `KHX`
extensions>> (public issues 536, 580)..
extensions>> (public issues 536, 580).
* 2017-09-10 - Add descriptions of <<writing-arrays, how to use `each` and
`any`>> to refer to properties of elments of arrays (internal issue 884).
* 2017-09-10 - Add <<extensions-interactions-parent, Valid Usage and

View File

@ -23,22 +23,22 @@
PYTHON ?= python3
PYFILES = genheaders.py reg.py
GENOPTS =
OUTDIR = ../../out/1.0
# Generate Vulkan header from XML. Many other files can be generated
# from vk.xml using the scripts, but they are all generated in
# ../../doc/specs/vulkan/ as part of the process of building the
# Specification.
# from vk.xml using the scripts, but they are all generated in ../ as
# part of the process of building the Specification.
#
# Targets:
#
# default / install - regenerate ../vulkan/vulkan_core.h .
# default / install - regenerate headers in ../include/vulkan/.
# validate - run XML validator on vk.xml against the schema.
# test - check if vulkan_core.h compiles.
# clean_dirt - remove intermediate files.
# clean - remove installed and intermediate files.
VULKAN = ../vulkan
INCLUDE = ../include
VULKAN = $(INCLUDE)/vulkan
SRC = ../src
# Vulkan platform-specific headers
PLATFORM_HEADERS = \
@ -53,7 +53,7 @@ PLATFORM_HEADERS = \
$(VULKAN)/vulkan_xlib.h \
$(VULKAN)/vulkan_xlib_xrandr.h
HEADERS = $(VULKAN)/vulkan_core.h $(PLATFORM_HEADERS)
EXTLOADER = ../ext_loader
EXTLOADER = $(SRC)/ext_loader
EXTSRCS = $(EXTLOADER)/vulkan_ext.c
default install: $(HEADERS) $(EXTSRCS)
@ -80,10 +80,10 @@ validate:
TESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR
test: $(HEADERS) $(VULKAN)/vulkan.h $(VULKAN)/vk_platform.h
gcc -Wall -pedantic -std=c99 -c -I.. test.c
g++ -Wall -c -std=c++98 -I.. test.c
g++ -Wall -c -std=c++11 -I.. test.c
gcc $(TESTDEFS) -Wall -pedantic -std=c99 -c -I.. test.c
gcc -Wall -pedantic -std=c99 -c -I$(INCLUDE) test.c
g++ -Wall -c -std=c++98 -I$(INCLUDE) test.c
g++ -Wall -c -std=c++11 -I$(INCLUDE) test.c
gcc $(TESTDEFS) -Wall -pedantic -std=c99 -c -I$(INCLUDE) test.c
rm test.o
################################################

View File

@ -24,10 +24,11 @@ version of the API.
* Create a git branch to work in locally
* Edit `vk.xml`
* `make ; make test`
** This generates headers and source including `../vulkan/vulkan_core.h`;
a set of platform-dependent headers `../vulkan/vulkan_<platform>.h`;
and extension loader code in `../ext_loader/vulkan_ext.[ch]`
* `(cd ../../doc/specs/vulkan && make generated)`
** This generates headers and source in `../include/vulkan` including
`vulkan_core.h`; a set of platform-dependent headers
`vulkan_<platform>.h`; and extension loader code in
`../src/ext_loader/vulkan_ext.[ch]`
* `(cd .. && make generated)`
** This generates asciidoc includes for the spec. There are many ways to
invoke the Makefile in the spec directory; this simple recipe only
generates includes for the core Vulkan API without any extensions.
@ -38,9 +39,9 @@ version of the API.
otherwise), and create a pull or merge request against the specification
branch (`master`) or other appropriate target.
For a detailed description of the schema, go to `../../doc/specs/vulkan` and
`make registry_doc`, which generates $(OUTDIR)/registry.html. This includes
some examples of how to make simple changes in the API via the XML.
For a detailed description of the schema, go to `..` and `make registry`,
which generates $(OUTDIR)/registry.html. This includes some examples of how
to make simple changes in the API via the XML.
The generator scripts are written in Python 3, using the `etree` package for
processing XML.
@ -63,9 +64,11 @@ processing XML.
** hostsyncgenerator.py - Asciidoc host sync table generator.
** pygenerator.py - Generates python encoding of the API description.
** validitygenerator.py - Asciidoc validity language generator.
* ../vulkan/vulkan_core.h - Generated Vulkan non-platform API header.
* ../vulkan/vulkan_<platform>.h - Generated Vulkan platform API headers.
* ../ext_loader/vulkan_ext.[ch] - Extension loader code
* ../include/vulkan/vulkan_core.h - Generated Vulkan non-platform API
header.
* ../include/vulkan/vulkan_<platform>.h - Generated Vulkan platform API
headers.
* ../src/ext_loader/vulkan_ext.[ch] - Extension loader code
* indexExt.py - generate HTML index of all extensions for inclusion into
the Vulkan registry index page.
* extDependency.py - generate extension dependencies in Bash and Python
@ -74,11 +77,11 @@ processing XML.
[[targets]]
== Makefile Targets
* `install` or `../vulkan/vulkan_core.h` (default target) - regenerate
`../vulkan/vulkan_core.h` .
* `test` - make sure `../vulkan/vulkan_core.h` compiles. *Important!* Can
also be used to test if platform headers compile by specifying `make
TESTDEFS=-DVK_USE_PLATFORM_<PLATFORM>_<AUTHORID> test`.
* `install` (default target) - regenerate header files in
`../include/vulkan`.
* `test` - make sure `../include/vulkan/vulkan_core.h` compiles.
*Important!* Can also be used to test if platform headers compile by
specifying `make TESTDEFS=-DVK_USE_PLATFORM_<PLATFORM>_<AUTHORID> test`.
* `validate` - validate `vk.xml` against the schema. Requires installing
`jing` (see <<linux,Software Dependencies>> below). Also important!
* `clean_dirt` - remove intermediate files.
@ -91,11 +94,11 @@ steps will build `vulkan_core.h` and test that it compiles:
[source,sh]
----
# Regenerate header from XML
python3 genvk.py -o ../vulkan vulkan_core.h
python3 genvk.py -o ../include/vulkan vulkan_core.h
# Verify that the resulting header compiles
gcc -Wall -c -I.. testcore.c
g++ -Wall -c -std=c++98 -I.. testcore.c
g++ -Wall -c -std=c++11 -I.. testcore.c
gcc -Wall -c -I../include testcore.c
g++ -Wall -c -std=c++98 -I../include testcore.c
g++ -Wall -c -std=c++11 -I../include testcore.c
----
@ -132,7 +135,9 @@ Windows is:
[[history]]
== Revision History
* 2017/03/06 -
* 2018/03/13 -
Update for new directory structure.
* 2018/03/06 -
Update for Vulkan 1.1 release and `master` branch.
* 2015/09/18 -
Split platform-specific headers into their own vulkan_<platform>.h files,

View File

@ -12,9 +12,9 @@ file = File.open("vk.xml")
Nokogiri::XML(file).xpath('//extension[@name="' + extension_name + '"]').each do | extension |
extension_enum_offset = 1000000000 + ((extension.attribute('number').content.to_i - 1) * 1000)
extension.xpath('require').each do |require|
do_rename = false
if require.attribute('extension')
allowed_dependency_renames.each do |dependency|
if require.attribute('extension').content == dependency
@ -24,20 +24,20 @@ Nokogiri::XML(file).xpath('//extension[@name="' + extension_name + '"]').each do
else
do_rename = true
end
if do_rename == false
puts "Extension interaction with " + require.attribute('extension').content + " needs addressing!"
else
core_block = "\t"*2 + require.to_s.lines[0].strip + "\n"
alias_block = "\t"*3 + require.to_s.lines[0].strip + "\n"
require.children.each do |element|
if element.node_name != 'text' && element.node_name != 'comment'
if element.node_name != 'text' && element.node_name != 'comment'
# Core Block
if /.+_EXTENSION_NAME/.match(element.attribute('name').content) == nil &&
/.+_SPEC_VERSION/.match(element.attribute('name').content) == nil
case element.node_name
when 'enum'
attributes = element.attributes
@ -45,7 +45,7 @@ Nokogiri::XML(file).xpath('//extension[@name="' + extension_name + '"]').each do
attributes['value'] = element.attribute('offset').content.to_i + extension_enum_offset
attributes.delete('offset')
end
core_block << "\t"*3 + '<enum'
attributes.each_pair do |key, value|
core_block << ' ' + key + '="' + value.to_s + '"'
@ -57,13 +57,13 @@ Nokogiri::XML(file).xpath('//extension[@name="' + extension_name + '"]').each do
core_block << "Warning: Unknown type found!\n" << element.node_name
end
end
# Alias Block + Renames
if /.+_EXTENSION_NAME/.match(element.attribute('name').content) ||
/.+_SPEC_VERSION/.match(element.attribute('name').content)
alias_block << "\t"*4 + element.to_s.strip + "\n"
else
else
old_name = element.attribute('name').content
new_name = old_name.sub('_' + extension_suffix,'').sub(extension_suffix,'')
alias_block << "\t"*4 + '<alias name="' + old_name + '" value="' + new_name + '"/>' + "\n"
@ -74,7 +74,7 @@ Nokogiri::XML(file).xpath('//extension[@name="' + extension_name + '"]').each do
end
alias_block << "\t"*3 + require.to_s.lines[-1].strip
core_block << "\t"*2 + require.to_s.lines[-1].strip
puts alias_block
puts
puts core_block
@ -99,14 +99,14 @@ end
def rename_text_files(dir, renames, extension_name)
Dir[dir + '/*.txt'].each do |name|
# Skip renaming in the extension appendix, since this should preserve the old names.
if (name != ('../../doc/specs/vulkan/appendices/' + extension_name + '.txt'))
if (name != ('../appendices/' + extension_name + '.txt'))
old_file = File.read(name)
new_file = old_file.clone
renames.each_pair do |old, new|
new_file.gsub!(old,new)
end
if (old_file != new_file)
File.write(name, new_file)
end
@ -114,8 +114,8 @@ def rename_text_files(dir, renames, extension_name)
end
Dir[dir + '/*/'].each do |subdir|
rename_text_files(subdir, renames, extension_name)
end
end
end
rename_text_files('../../doc/specs/vulkan/chapters', renames, extension_name)
rename_text_files('../../doc/specs/vulkan/appendices', renames, extension_name)
rename_text_files('../chapters', renames, extension_name)
rename_text_files('../appendices', renames, extension_name)

View File

@ -114,6 +114,9 @@ Types = element types {
# structextends - only applicable if category is 'struct'. Lists parent
# structures which this structure may extend via the pNext chain
# of the parent.
# When present it suppresses generation of automatic validity for the
# pNext member of that structure, and instead the structure is added
# to pNext chain validity for the parent structures it extends.
# For types without a category, contents include
# <apientry /> - substitutes for an APIENTRY-style macro on output
# <name> - contains name of the type being defined
@ -407,6 +410,8 @@ Extensions = element extensions {
# name - extension name string
# number - extension number (positive integer, should be unique)
# protect - C preprocessor symbol to conditionally define the interface
# platform - should be one of the platform names defined in the
# <platform> tag. Currently unused.
# author - name of the author (usually a company or project name)
# contact - contact responsible for the tag (name and contact information)
# type - 'device' or 'instance', if present

View File

@ -710,9 +710,7 @@ class ValidityOutputGenerator(OutputGenerator):
for struct in validextensionstructs:
# Unpleasantly breaks encapsulation. Should be a method in the registry class
type = self.registry.lookupElementInfo(struct, self.registry.typedict)
if (type == None):
self.logMsg('warn', 'makeStructureExtensionPointer: struct', struct, 'is in a validextensionstructs= attribute but is not in the registry')
elif (type.required):
if (type.required):
extensionstructs.append('slink:' + struct)
else:
self.logMsg('diag', 'makeStructureExtensionPointer: struct', struct, 'IS NOT required')
@ -764,7 +762,7 @@ class ValidityOutputGenerator(OutputGenerator):
# Generate language to independently validate a parameter
if paramtype.text == 'VkStructureType' and paramname.text == 'sType':
asciidoc += self.makeStructureType(blockname, param)
elif paramtype.text == 'void' and paramname.text == 'pNext':
elif paramname.text == 'pNext' and paramtype.text == 'void' and cmd.attrib.get('structextends') is None:
asciidoc += self.makeStructureExtensionPointer(blockname, param)
# In case there's nothing to report, return None
@ -800,7 +798,8 @@ class ValidityOutputGenerator(OutputGenerator):
if paramtype.text == 'VkStructureType' and paramname.text == 'sType':
asciidoc += self.makeStructureType(blockname, param)
elif paramtype.text == 'void' and paramname.text == 'pNext':
asciidoc += self.makeStructureExtensionPointer(blockname, param)
if cmd.attrib.get('structextends') is None:
asciidoc += self.makeStructureExtensionPointer(blockname, param)
else:
asciidoc += self.createValidationLineForParameter(blockname, param, params, typecategory)

View File

@ -24,7 +24,8 @@ language incorporated into the Specification and reference pages, and other
material which is registered by Khronos, such as tags used by extension and
layer authors. The authoritative public version of vk.xml is maintained in
the master branch of the Khronos Vulkan GitHub project. The authoritative
private version is maintained in the 1.0 branch of the member gitlab server.
private version is maintained in the master branch of the member gitlab
server.
</comment>
<vendorids comment="Vulkan vendor IDs for physical devices without PCI vendor IDs">
@ -136,7 +137,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="define">// Vulkan 1.1 version number
#define <name>VK_API_VERSION_1_1</name> <type>VK_MAKE_VERSION</type>(1, 1, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 71</type>
#define <name>VK_HEADER_VERSION</name> 72</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -294,6 +295,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="bitmask">typedef <type>VkFlags</type> <name>VkDebugUtilsMessengerCreateFlagsEXT</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkDebugUtilsMessengerCallbackDataFlagsEXT</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineRasterizationConservativeStateCreateFlagsEXT</name>;</type>
<type requires="VkDescriptorBindingFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorBindingFlagsEXT</name>;</type>
<comment>Types which can be void pointers or class pointers, selected at compile time</comment>
<type category="handle"><type>VK_DEFINE_HANDLE</type>(<name>VkInstance</name>)</type>
@ -425,6 +427,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type name="VkDescriptorPoolCreateFlagBits" category="enum"/>
<type name="VkDependencyFlagBits" category="enum"/>
<type name="VkObjectType" category="enum"/>
<type name="VkDescriptorBindingFlagBitsEXT" category="enum"/>
<comment>Extensions</comment>
<type name="VkIndirectCommandsLayoutUsageFlagBitsNVX" category="enum"/>
@ -1574,7 +1577,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkDisplayPresentInfoKHR" structextends="VkPresentInfoKHR">
<member values="VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkRect2D</type> <name>srcRect</name><comment>Rectangle within the presentable image to read pixel data from when presenting to the display.</comment></member>
<member><type>VkRect2D</type> <name>dstRect</name><comment>Rectangle within the current display mode's visible region to display srcRectangle in.</comment></member>
<member><type>VkBool32</type> <name>persistent</name><comment>For smart displays, use buffered mode. If the display properties member "persistentMode" is VK_FALSE, this member must always be VK_FALSE.</comment></member>
@ -1687,7 +1690,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkPipelineRasterizationStateRasterizationOrderAMD" structextends="VkPipelineRasterizationStateCreateInfo">
<member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkRasterizationOrderAMD</type> <name>rasterizationOrder</name><comment>Rasterization order to use for the pipeline</comment></member>
</type>
<type category="struct" name="VkDebugMarkerObjectNameInfoEXT">
@ -1714,17 +1717,17 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkDedicatedAllocationImageCreateInfoNV" structextends="VkImageCreateInfo">
<member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>dedicatedAllocation</name><comment>Whether this image uses a dedicated allocation</comment></member>
</type>
<type category="struct" name="VkDedicatedAllocationBufferCreateInfoNV" structextends="VkBufferCreateInfo">
<member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>dedicatedAllocation</name><comment>Whether this buffer uses a dedicated allocation</comment></member>
</type>
<type category="struct" name="VkDedicatedAllocationMemoryAllocateInfoNV" structextends="VkMemoryAllocateInfo">
<member values="VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>VkImage</type> <name>image</name><comment>Image that this allocation will be bound to</comment></member>
<member optional="true"><type>VkBuffer</type> <name>buffer</name><comment>Buffer that this allocation will be bound to</comment></member>
</type>
@ -1758,7 +1761,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoNV" structextends="VkSubmitInfo">
<member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>acquireCount</name></member>
<member len="acquireCount">const <type>VkDeviceMemory</type>* <name>pAcquireSyncs</name></member>
<member len="acquireCount">const <type>uint64_t</type>* <name>pAcquireKeys</name></member>
@ -1936,7 +1939,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkPresentRegionsKHR" structextends="VkPresentInfoKHR">
<member values="VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
<member len="swapchainCount" optional="true">const <type>VkPresentRegionKHR</type>* <name>pRegions</name><comment>The regions that have changed</comment></member>
</type>
@ -1964,7 +1967,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkExternalMemoryPropertiesKHR" alias="VkExternalMemoryProperties"/>
<type category="struct" name="VkPhysicalDeviceExternalImageFormatInfo" structextends="VkPhysicalDeviceImageFormatInfo2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceExternalImageFormatInfoKHR" alias="VkPhysicalDeviceExternalImageFormatInfo"/>
@ -2060,7 +2063,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoKHR" structextends="VkSubmitInfo">
<member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>acquireCount</name></member>
<member len="acquireCount">const <type>VkDeviceMemory</type>* <name>pAcquireSyncs</name></member>
<member len="acquireCount">const <type>uint64_t</type>* <name>pAcquireKeys</name></member>
@ -2107,7 +2110,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkD3D12FenceSubmitInfoKHR" structextends="VkSubmitInfo">
<member values="VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreValuesCount</name></member>
<member optional="true" len="waitSemaphoreValuesCount">const <type>uint64_t</type>* <name>pWaitSemaphoreValues</name></member>
<member optional="true"><type>uint32_t</type> <name>signalSemaphoreValuesCount</name></member>
@ -2260,7 +2263,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkPhysicalDeviceGroupPropertiesKHR" alias="VkPhysicalDeviceGroupProperties"/>
<type category="struct" name="VkMemoryAllocateFlagsInfo" structextends="VkMemoryAllocateInfo">
<member values="VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>VkMemoryAllocateFlags</type> <name>flags</name></member>
<member><type>uint32_t</type> <name>deviceMask</name></member>
</type>
@ -2299,7 +2302,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkBindImageMemoryDeviceGroupInfoKHR" alias="VkBindImageMemoryDeviceGroupInfo"/>
<type category="struct" name="VkDeviceGroupRenderPassBeginInfo" structextends="VkRenderPassBeginInfo">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>deviceMask</name></member>
<member optional="true"><type>uint32_t</type> <name>deviceRenderAreaCount</name></member>
<member len="deviceRenderAreaCount">const <type>VkRect2D</type>* <name>pDeviceRenderAreas</name></member>
@ -2307,13 +2310,13 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkDeviceGroupRenderPassBeginInfoKHR" alias="VkDeviceGroupRenderPassBeginInfo"/>
<type category="struct" name="VkDeviceGroupCommandBufferBeginInfo" structextends="VkCommandBufferBeginInfo">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>deviceMask</name></member>
</type>
<type category="struct" name="VkDeviceGroupCommandBufferBeginInfoKHR" alias="VkDeviceGroupCommandBufferBeginInfo"/>
<type category="struct" name="VkDeviceGroupSubmitInfo" structextends="VkSubmitInfo">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></member>
<member len="waitSemaphoreCount">const <type>uint32_t</type>* <name>pWaitSemaphoreDeviceIndices</name></member>
<member optional="true"><type>uint32_t</type> <name>commandBufferCount</name></member>
@ -2324,7 +2327,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkDeviceGroupSubmitInfoKHR" alias="VkDeviceGroupSubmitInfo"/>
<type category="struct" name="VkDeviceGroupBindSparseInfo" structextends="VkBindSparseInfo">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>resourceDeviceIndex</name></member>
<member><type>uint32_t</type> <name>memoryDeviceIndex</name></member>
</type>
@ -2337,12 +2340,12 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkImageSwapchainCreateInfoKHR" structextends="VkImageCreateInfo">
<member values="VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>VkSwapchainKHR</type> <name>swapchain</name></member>
</type>
<type category="struct" name="VkBindImageMemorySwapchainInfoKHR" structextends="VkBindImageMemoryInfo">
<member values="VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></member>
<member><type>uint32_t</type> <name>imageIndex</name></member>
</type>
@ -2357,21 +2360,21 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkDeviceGroupPresentInfoKHR" structextends="VkPresentInfoKHR">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>swapchainCount</name></member>
<member len="swapchainCount">const <type>uint32_t</type>* <name>pDeviceMasks</name></member>
<member><type>VkDeviceGroupPresentModeFlagBitsKHR</type> <name>mode</name></member>
</type>
<type category="struct" name="VkDeviceGroupDeviceCreateInfo" structextends="VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>physicalDeviceCount</name></member>
<member len="physicalDeviceCount">const <type>VkPhysicalDevice</type>* <name>pPhysicalDevices</name></member>
</type>
<type category="struct" name="VkDeviceGroupDeviceCreateInfoKHR" alias="VkDeviceGroupDeviceCreateInfo"/>
<type category="struct" name="VkDeviceGroupSwapchainCreateInfoKHR" structextends="VkSwapchainCreateInfoKHR">
<member values="VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkDeviceGroupPresentModeFlagsKHR</type> <name>modes</name></member>
</type>
<type category="struct" name="VkDescriptorUpdateTemplateEntry">
@ -2427,7 +2430,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkPresentTimesInfoGOOGLE" structextends="VkPresentInfoKHR">
<member values="VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>swapchainCount</name><comment>Copy of VkPresentInfoKHR::swapchainCount</comment></member>
<member len="swapchainCount" optional="true">const <type>VkPresentTimeGOOGLE</type>* <name>pTimes</name><comment>The earliest times to present images</comment></member>
</type>
@ -2453,7 +2456,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
</type>
<type category="struct" name="VkPipelineViewportWScalingStateCreateInfoNV" structextends="VkPipelineViewportStateCreateInfo">
<member values="VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>viewportWScalingEnable</name></member>
<member><type>uint32_t</type> <name>viewportCount</name></member>
<member noautovalidity="true" len="viewportCount">const <type>VkViewportWScalingNV</type>* <name>pViewportWScalings</name></member>
@ -2603,7 +2606,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkPipelineTessellationDomainOriginStateCreateInfoKHR" alias="VkPipelineTessellationDomainOriginStateCreateInfo"/>
<type category="struct" name="VkSamplerYcbcrConversionInfo" structextends="VkSamplerCreateInfo,VkImageViewCreateInfo">
<member values="VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkSamplerYcbcrConversion</type> <name>conversion</name></member>
</type>
<type category="struct" name="VkSamplerYcbcrConversionInfoKHR" alias="VkSamplerYcbcrConversionInfo"/>
@ -2622,13 +2625,13 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<type category="struct" name="VkSamplerYcbcrConversionCreateInfoKHR" alias="VkSamplerYcbcrConversionCreateInfo"/>
<type category="struct" name="VkBindImagePlaneMemoryInfo" structextends="VkBindImageMemoryInfo">
<member values="VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkImageAspectFlagBits</type> <name>planeAspect</name></member>
</type>
<type category="struct" name="VkBindImagePlaneMemoryInfoKHR" alias="VkBindImagePlaneMemoryInfo"/>
<type category="struct" name="VkImagePlaneMemoryRequirementsInfo" structextends="VkImageMemoryRequirementsInfo2">
<member values="VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkImageAspectFlagBits</type> <name>planeAspect</name></member>
</type>
<type category="struct" name="VkImagePlaneMemoryRequirementsInfoKHR" alias="VkImagePlaneMemoryRequirementsInfo"/>
@ -2904,10 +2907,27 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<member><type>VkBool32</type> <name>conservativePointAndLineRasterization</name><comment>true if conservative rasterization also applies to points and lines</comment></member>
<member><type>VkBool32</type> <name>degenerateTrianglesRasterized</name><comment>true if degenerate triangles (those with zero area after snap) are rasterized</comment></member>
<member><type>VkBool32</type> <name>degenerateLinesRasterized</name><comment>true if degenerate lines (those with zero length after snap) are rasterized</comment></member>
<member><type>VkBool32</type> <name>fullyCoveredFragmentShaderInputVariable</name><comment>true if the implementation supports the FullyCoveredEXT SPIR-V builtin fragment shader input
variable</comment></member>
<member><type>VkBool32</type> <name>fullyCoveredFragmentShaderInputVariable</name><comment>true if the implementation supports the FullyCoveredEXT SPIR-V builtin fragment shader input variable</comment></member>
<member><type>VkBool32</type> <name>conservativeRasterizationPostDepthCoverage</name><comment>true if the implementation supports both conservative rasterization and post depth coverage sample coverage mask</comment></member>
</type>
<type category="struct" name="VkPhysicalDeviceShaderCorePropertiesAMD" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name><comment>Pointer to next structure</comment></member>
<member><type>uint32_t</type> <name>shaderEngineCount</name><comment>number of shader engines</comment></member>
<member><type>uint32_t</type> <name>shaderArraysPerEngineCount</name><comment>number of shader arrays</comment></member>
<member><type>uint32_t</type> <name>computeUnitsPerShaderArray</name><comment>number of CUs per shader array</comment></member>
<member><type>uint32_t</type> <name>simdPerComputeUnit</name><comment>number of SIMDs per compute unit</comment></member>
<member><type>uint32_t</type> <name>wavefrontsPerSimd</name><comment>number of wavefront slots in each SIMD</comment></member>
<member><type>uint32_t</type> <name>wavefrontSize</name><comment>number of threads per wavefront</comment></member>
<member><type>uint32_t</type> <name>sgprsPerSimd</name><comment>number of physical SGPRs per SIMD</comment></member>
<member><type>uint32_t</type> <name>minSgprAllocation</name><comment>minimum number of SGPRs that can be allocated by a wave</comment></member>
<member><type>uint32_t</type> <name>maxSgprAllocation</name><comment>number of available SGPRs</comment></member>
<member><type>uint32_t</type> <name>sgprAllocationGranularity</name><comment>SGPRs are allocated in groups of this size</comment></member>
<member><type>uint32_t</type> <name>vgprsPerSimd</name><comment>number of physical VGPRs per SIMD</comment></member>
<member><type>uint32_t</type> <name>minVgprAllocation</name><comment>minimum number of VGPRs that can be allocated by a wave</comment></member>
<member><type>uint32_t</type> <name>maxVgprAllocation</name><comment>number of available VGPRs</comment></member>
<member><type>uint32_t</type> <name>vgprAllocationGranularity</name><comment>VGPRs are allocated in groups of this size</comment></member>
</type>
<type category="struct" name="VkPipelineRasterizationConservativeStateCreateInfoEXT" structextends="VkPipelineRasterizationStateCreateInfo">
<member values="VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
@ -2915,13 +2935,81 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<member><type>VkConservativeRasterizationModeEXT</type> <name>conservativeRasterizationMode</name></member> <!-- Conservative rasterization mode -->
<member><type>float</type> <name>extraPrimitiveOverestimationSize</name></member> <!-- Extra overestimation to add to the primitive -->
</type>
<type category="struct" name="VkPhysicalDeviceDescriptorIndexingFeaturesEXT" structextends="VkPhysicalDeviceFeatures2KHR,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>shaderInputAttachmentArrayDynamicIndexing</name></member>
<member><type>VkBool32</type> <name>shaderUniformTexelBufferArrayDynamicIndexing</name></member>
<member><type>VkBool32</type> <name>shaderStorageTexelBufferArrayDynamicIndexing</name></member>
<member><type>VkBool32</type> <name>shaderUniformBufferArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>shaderSampledImageArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>shaderStorageBufferArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>shaderStorageImageArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>shaderInputAttachmentArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>shaderUniformTexelBufferArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>shaderStorageTexelBufferArrayNonUniformIndexing</name></member>
<member><type>VkBool32</type> <name>descriptorBindingUniformBufferUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>descriptorBindingSampledImageUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>descriptorBindingStorageImageUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>descriptorBindingStorageBufferUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>descriptorBindingUniformTexelBufferUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>descriptorBindingStorageTexelBufferUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>descriptorBindingUpdateUnusedWhilePending</name></member>
<member><type>VkBool32</type> <name>descriptorBindingPartiallyBound</name></member>
<member><type>VkBool32</type> <name>descriptorBindingVariableDescriptorCount</name></member>
<member><type>VkBool32</type> <name>runtimeDescriptorArray</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceDescriptorIndexingPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2KHR">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxUpdateAfterBindDescriptorsInAllPools</name></member>
<member><type>VkBool32</type> <name>shaderUniformBufferArrayNonUniformIndexingNative</name></member>
<member><type>VkBool32</type> <name>shaderSampledImageArrayNonUniformIndexingNative</name></member>
<member><type>VkBool32</type> <name>shaderStorageBufferArrayNonUniformIndexingNative</name></member>
<member><type>VkBool32</type> <name>shaderStorageImageArrayNonUniformIndexingNative</name></member>
<member><type>VkBool32</type> <name>shaderInputAttachmentArrayNonUniformIndexingNative</name></member>
<member><type>VkBool32</type> <name>robustBufferAccessUpdateAfterBind</name></member>
<member><type>VkBool32</type> <name>quadDivergentImplicitLod</name></member>
<member><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindSamplers</name></member>
<member><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindUniformBuffers</name></member>
<member><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindStorageBuffers</name></member>
<member><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindSampledImages</name></member>
<member><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindStorageImages</name></member>
<member><type>uint32_t</type> <name>maxPerStageDescriptorUpdateAfterBindInputAttachments</name></member>
<member><type>uint32_t</type> <name>maxPerStageUpdateAfterBindResources</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindSamplers</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindUniformBuffers</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindUniformBuffersDynamic</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageBuffers</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageBuffersDynamic</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindSampledImages</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindStorageImages</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetUpdateAfterBindInputAttachments</name></member>
</type>
<type category="struct" name="VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" structextends="VkDescriptorSetLayoutCreateInfo">
<member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>bindingCount</name></member>
<member len="bindingCount">const <type>VkDescriptorBindingFlagsEXT</type>* <name>pBindingFlags</name></member>
</type>
<type category="struct" name="VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" structextends="VkDescriptorSetAllocateInfo">
<member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>descriptorSetCount</name></member>
<member len="descriptorSetCount">const <type>uint32_t</type>* <name>pDescriptorCounts</name></member>
</type>
<type category="struct" name="VkDescriptorSetVariableDescriptorCountLayoutSupportEXT" structextends="VkDescriptorSetLayoutSupport" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxVariableDescriptorCount</name></member>
</type>
<type category="struct" name="VkVertexInputBindingDivisorDescriptionEXT">
<member><type>uint32_t</type> <name>binding</name></member>
<member><type>uint32_t</type> <name>divisor</name></member>
</type>
<type category="struct" name="VkPipelineVertexInputDivisorStateCreateInfoEXT" structextends="VkPipelineVertexInputStateCreateInfo">
<member values="VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true">const <type>void</type>* <name>pNext</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>vertexBindingDivisorCount</name></member>
<member len="vertexBindingDivisorCount">const <type>VkVertexInputBindingDivisorDescriptionEXT</type>* <name>pVertexBindingDivisors</name></member>
</type>
@ -4035,6 +4123,12 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enum value="1" name="VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"/>
<enum value="2" name="VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"/>
</enums>
<enums name="VkDescriptorBindingFlagBitsEXT" type="bitmask">
<enum bitpos="0" name="VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"/>
<enum bitpos="1" name="VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"/>
<enum bitpos="2" name="VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"/>
<enum bitpos="3" name="VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"/>
</enums>
<commands comment="Vulkan command definitions">
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_LAYER_NOT_PRESENT,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INCOMPATIBLE_DRIVER">
@ -4521,7 +4615,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<param optional="true" externsync="true"><type>VkDescriptorSetLayout</type> <name>descriptorSetLayout</name></param>
<param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
</command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_FRAGMENTATION_EXT">
<proto><type>VkResult</type> <name>vkCreateDescriptorPool</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param>const <type>VkDescriptorPoolCreateInfo</type>* <name>pCreateInfo</name></param>
@ -7877,7 +7971,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<command name="vkSubmitDebugUtilsMessageEXT"/>
</require>
</extension>
<extension name="VK_ANDROID_external_memory_android_hardware_buffer" number="130" type="device" author="ANDROID" requires="VK_KHR_sampler_ycbcr_conversion,VK_KHR_external_memory" platform="android" contact="Jesse Hall @jessehall" supported="vulkan">
<extension name="VK_ANDROID_external_memory_android_hardware_buffer" number="130" type="device" author="ANDROID" requires="VK_KHR_sampler_ycbcr_conversion,VK_KHR_external_memory,VK_EXT_queue_family_foreign" platform="android" contact="Jesse Hall @jessehall" supported="vulkan">
<require>
<enum value="3" name="VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION"/>
<enum value="&quot;VK_ANDROID_external_memory_android_hardware_buffer&quot;" name="VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME"/>
@ -8277,10 +8371,23 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<command name="vkGetValidationCacheDataEXT"/>
</require>
</extension>
<extension name="VK_EXT_extension_162" number="162" author="NV" contact="Jeff Bolz @jbolz" supported="disabled">
<extension name="VK_EXT_descriptor_indexing" number="162" type="device" requires="VK_KHR_get_physical_device_properties2,VK_KHR_maintenance3" author="NV" contact="Jeff Bolz @jbolz" supported="vulkan">
<require>
<enum value="0" name="VK_EXT_EXTENSION_162_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_extension_162&quot;" name="VK_EXT_EXTENSION_162_EXTENSION_NAME"/>
<enum value="2" name="VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_descriptor_indexing&quot;" name="VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT"/>
<enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"/>
<enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"/>
<enum bitpos="1" extends="VkDescriptorPoolCreateFlagBits" name="VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"/>
<enum bitpos="1" extends="VkDescriptorSetLayoutCreateFlagBits" name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT"/>
<enum offset="0" dir="-" extends="VkResult" name="VK_ERROR_FRAGMENTATION_EXT"/>
<type name="VkDescriptorSetLayoutBindingFlagsCreateInfoEXT"/>
<type name="VkPhysicalDeviceDescriptorIndexingFeaturesEXT"/>
<type name="VkPhysicalDeviceDescriptorIndexingPropertiesEXT"/>
<type name="VkDescriptorSetVariableDescriptorCountAllocateInfoEXT"/>
<type name="VkDescriptorSetVariableDescriptorCountLayoutSupportEXT"/>
</require>
</extension>
<extension name="VK_EXT_shader_viewport_index_layer" number="163" type="device" author="NV" contact="Daniel Koch @dgkoch" supported="vulkan">
@ -8442,10 +8549,12 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enum value="&quot;VK_AMD_extension_185&quot;" name="VK_KHR_EXTENSION_185_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_AMD_extension_186" number="186" author="AMD" contact="Daniel Rakos @aqnuep" supported="disabled">
<extension name="VK_AMD_shader_core_properties" number="186" type="device" author="AMD" requires="VK_KHR_get_physical_device_properties2" contact="Martin Dinkov @mdinkov" supported="vulkan">
<require>
<enum value="0" name="VK_KHR_EXTENSION_186_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_extension_186&quot;" name="VK_KHR_EXTENSION_186_EXTENSION_NAME"/>
<enum value="1" name="VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_shader_core_properties&quot;" name="VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"/>
<type name="VkPhysicalDeviceShaderCorePropertiesAMD"/>
</require>
</extension>
<extension name="VK_AMD_extension_187" number="187" author="AMD" contact="Daniel Rakos @aqnuep" supported="disabled">
@ -8525,5 +8634,18 @@ private version is maintained in the 1.0 branch of the member gitlab server.
<enum value="&quot;VK_EXT_extension_198&quot;" name="VK_ARM_EXTENSION_198_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_NV_shader_subgroup_partitioned" number="199" type="device" author="NV" contact="Jeff Bolz @jbolz" supported="vulkan">
<require>
<enum value="1" name="VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION"/>
<enum value="&quot;VK_NV_shader_subgroup_partitioned&quot;" name="VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME"/>
<enum bitpos="8" extends="VkSubgroupFeatureFlagBits" name="VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"/>
</require>
</extension>
<extension name="VK_KHR_extension_200" number="200" author="KHR" contact="Jan-Harald Fredriksen @janharald" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_200_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_200&quot;" name="VK_KHR_EXTENSION_200_EXTENSION_NAME"/>
</require>
</extension>
</extensions>
</registry>