1// Copyright 2015-2024 The Khronos Group Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5// This text fragment is used many times in the Devices and Queues, and
6// Limits chapters for different behavior, property, and limit queries.
7ifdef::hidden[]
8// tag::limits_desc[]
9If the sname:{refpage} structure is included in the pname:pNext chain of the
10slink:VkPhysicalDeviceProperties2 structure passed to
11flink:vkGetPhysicalDeviceProperties2, it is filled in with each
12corresponding implementation-dependent property.
13// end::limits_desc[]
14endif::hidden[]
15
16
17[[limits]]
18= Limits
19
20_Limits_ are implementation-dependent minimums, maximums, and other device
21characteristics that an application may: need to be aware of.
22
23ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
24[NOTE]
25.Note
26====
27Limits are reported via the basic slink:VkPhysicalDeviceLimits structure as
28well as the extensible structure sname:VkPhysicalDeviceProperties2, which
29was added in `apiext:VK_KHR_get_physical_device_properties2` and included in
30Vulkan 1.1.
31When limits are added in future Vulkan versions or extensions, each
32extension should: introduce one new limit structure, if needed.
33This structure can: be added to the pname:pNext chain of the
34sname:VkPhysicalDeviceProperties2 structure.
35====
36endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
37
38[open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs']
39--
40The sname:VkPhysicalDeviceLimits structure is defined as:
41
42include::{generated}/api/structs/VkPhysicalDeviceLimits.adoc[]
43
44The sname:VkPhysicalDeviceLimits are properties of the physical device.
45These are available in the pname:limits member of the
46slink:VkPhysicalDeviceProperties structure which is returned from
47flink:vkGetPhysicalDeviceProperties.
48
49  * [[limits-maxImageDimension1D]] pname:maxImageDimension1D is the largest
50    dimension (pname:width) that is guaranteed to be supported for all
51    images created with an pname:imageType of ename:VK_IMAGE_TYPE_1D.
52    Some combinations of image parameters (format, usage, etc.) may: allow
53    support for larger dimensions, which can: be queried using
54    flink:vkGetPhysicalDeviceImageFormatProperties.
55  * [[limits-maxImageDimension2D]] pname:maxImageDimension2D is the largest
56    dimension (pname:width or pname:height) that is guaranteed to be
57    supported for all images created with an pname:imageType of
58    ename:VK_IMAGE_TYPE_2D and without
59    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
60    Some combinations of image parameters (format, usage, etc.) may: allow
61    support for larger dimensions, which can: be queried using
62    flink:vkGetPhysicalDeviceImageFormatProperties.
63  * [[limits-maxImageDimension3D]] pname:maxImageDimension3D is the largest
64    dimension (pname:width, pname:height, or pname:depth) that is guaranteed
65    to be supported for all images created with an pname:imageType of
66    ename:VK_IMAGE_TYPE_3D.
67    Some combinations of image parameters (format, usage, etc.) may: allow
68    support for larger dimensions, which can: be queried using
69    flink:vkGetPhysicalDeviceImageFormatProperties.
70  * [[limits-maxImageDimensionCube]] pname:maxImageDimensionCube is the
71    largest dimension (pname:width or pname:height) that is guaranteed to be
72    supported for all images created with an pname:imageType of
73    ename:VK_IMAGE_TYPE_2D and with
74    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
75    Some combinations of image parameters (format, usage, etc.) may: allow
76    support for larger dimensions, which can: be queried using
77    flink:vkGetPhysicalDeviceImageFormatProperties.
78  * [[limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the maximum
79    number of layers (pname:arrayLayers) for an image.
80  * [[limits-maxTexelBufferElements]] pname:maxTexelBufferElements is the
81    maximum number of addressable texels for a buffer view created on a
82    buffer which was created with the
83    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
84    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage
85    member of the slink:VkBufferCreateInfo structure.
86  * [[limits-maxUniformBufferRange]] pname:maxUniformBufferRange is the
87    maximum value that can: be specified in the pname:range member of a
88    slink:VkDescriptorBufferInfo structure passed to
89    flink:vkUpdateDescriptorSets for descriptors of type
90    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
91    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
92  * [[limits-maxStorageBufferRange]] pname:maxStorageBufferRange is the
93    maximum value that can: be specified in the pname:range member of a
94    slink:VkDescriptorBufferInfo structure passed to
95    flink:vkUpdateDescriptorSets for descriptors of type
96    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
97    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
98  * [[limits-maxPushConstantsSize]] pname:maxPushConstantsSize is the
99    maximum size, in bytes, of the pool of push constant memory.
100    For each of the push constant ranges indicated by the
101    pname:pPushConstantRanges member of the slink:VkPipelineLayoutCreateInfo
102    structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or
103    equal to this limit.
104  * [[limits-maxMemoryAllocationCount]] pname:maxMemoryAllocationCount is
105    the maximum number of device memory allocations, as created by
106    flink:vkAllocateMemory, which can: simultaneously exist.
107  * [[limits-maxSamplerAllocationCount]] pname:maxSamplerAllocationCount is
108    the maximum number of sampler objects, as created by
109    flink:vkCreateSampler, which can: simultaneously exist on a device.
110  * [[limits-bufferImageGranularity]] pname:bufferImageGranularity is the
111    granularity, in bytes, at which buffer or linear image resources, and
112    optimal image resources can: be bound to adjacent offsets in the same
113    sname:VkDeviceMemory object without aliasing.
114    See <<resources-bufferimagegranularity,Buffer-Image Granularity>> for
115    more details.
116  * [[limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize is the
117    total amount of address space available, in bytes, for sparse memory
118    resources.
119    This is an upper bound on the sum of the sizes of all sparse resources,
120    regardless of whether any memory is bound to them.
121ifdef::VK_NV_extended_sparse_address_space[]
122    If the <<features-extendedSparseAddressSpace,
123    pname:extendedSparseAddressSpace>> feature is enabled, then the
124    difference between <<limits-extendedSparseAddressSpaceSize,
125    pname:extendedSparseAddressSpaceSize>> and pname:sparseAddressSpaceSize
126    can also be used, by sname:VkImage created with the pname:usage member
127    of slink:VkImageCreateInfo only containing bits in
128    <<limits-extendedSparseImageUsageFlags,
129    pname:extendedSparseImageUsageFlags>> and sname:VkBuffer created with
130    the pname:usage member of slink:VkBufferCreateInfo only containing bits
131    in <<limits-extendedSparseBufferUsageFlags,
132    pname:extendedSparseBufferUsageFlags>>.
133endif::VK_NV_extended_sparse_address_space[]
134  * [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the
135    maximum number of descriptor sets that can: be simultaneously used by a
136    pipeline.
137    All code:DescriptorSet decorations in shader modules must: have a value
138    less than pname:maxBoundDescriptorSets.
139    See <<descriptorsets-sets>>.
140  * [[limits-maxPerStageDescriptorSamplers]]
141    pname:maxPerStageDescriptorSamplers is the maximum number of samplers
142    that can: be accessible to a single shader stage in a pipeline layout.
143    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
144    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
145    limit.
146ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
147    Only descriptors in descriptor set layouts created without the
148    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
149    count against this limit.
150endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
151    A descriptor is accessible to a shader stage when the pname:stageFlags
152    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
153    for that shader stage set.
154    See <<descriptorsets-sampler>> and
155    <<descriptorsets-combinedimagesampler>>.
156  * [[limits-maxPerStageDescriptorUniformBuffers]]
157    pname:maxPerStageDescriptorUniformBuffers is the maximum number of
158    uniform buffers that can: be accessible to a single shader stage in a
159    pipeline layout.
160    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
161    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
162    limit.
163ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
164    Only descriptors in descriptor set layouts created without the
165    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
166    count against this limit.
167endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
168    A descriptor is accessible to a shader stage when the pname:stageFlags
169    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
170    for that shader stage set.
171    See <<descriptorsets-uniformbuffer>> and
172    <<descriptorsets-uniformbufferdynamic>>.
173  * [[limits-maxPerStageDescriptorStorageBuffers]]
174    pname:maxPerStageDescriptorStorageBuffers is the maximum number of
175    storage buffers that can: be accessible to a single shader stage in a
176    pipeline layout.
177    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
178    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
179    limit.
180ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
181    Only descriptors in descriptor set layouts created without the
182    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
183    count against this limit.
184endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
185    A descriptor is accessible to a pipeline shader stage when the
186    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
187    structure has the bit for that shader stage set.
188    See <<descriptorsets-storagebuffer>> and
189    <<descriptorsets-storagebufferdynamic>>.
190  * [[limits-maxPerStageDescriptorSampledImages]]
191    pname:maxPerStageDescriptorSampledImages is the maximum number of
192    sampled images that can: be accessible to a single shader stage in a
193    pipeline layout.
194    Descriptors with a type of
195    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
196    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
197    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
198ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
199    Only descriptors in descriptor set layouts created without the
200    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
201    count against this limit.
202endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
203    A descriptor is accessible to a pipeline shader stage when the
204    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
205    structure has the bit for that shader stage set.
206    See <<descriptorsets-combinedimagesampler>>,
207    <<descriptorsets-sampledimage>>, and
208    <<descriptorsets-uniformtexelbuffer>>.
209  * [[limits-maxPerStageDescriptorStorageImages]]
210    pname:maxPerStageDescriptorStorageImages is the maximum number of
211    storage images that can: be accessible to a single shader stage in a
212    pipeline layout.
213    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
214    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
215ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
216    Only descriptors in descriptor set layouts created without the
217    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
218    count against this limit.
219endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
220    A descriptor is accessible to a pipeline shader stage when the
221    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
222    structure has the bit for that shader stage set.
223    See <<descriptorsets-storageimage>>, and
224    <<descriptorsets-storagetexelbuffer>>.
225  * [[limits-maxPerStageDescriptorInputAttachments]]
226    pname:maxPerStageDescriptorInputAttachments is the maximum number of
227    input attachments that can: be accessible to a single shader stage in a
228    pipeline layout.
229    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
230    count against this limit.
231ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
232    Only descriptors in descriptor set layouts created without the
233    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
234    count against this limit.
235endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
236    A descriptor is accessible to a pipeline shader stage when the
237    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
238    structure has the bit for that shader stage set.
239    These are only supported for the fragment stage.
240    See <<descriptorsets-inputattachment>>.
241  * [[limits-maxPerStageResources]] pname:maxPerStageResources is the
242    maximum number of resources that can: be accessible to a single shader
243    stage in a pipeline layout.
244    Descriptors with a type of
245    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
246    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
247    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
248    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
249    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
250    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
251    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
252    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
253    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
254    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
255ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
256    Only descriptors in descriptor set layouts created without the
257    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
258    count against this limit.
259endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
260    For the fragment shader stage the framebuffer color attachments also
261    count against this limit.
262  * [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is
263    the maximum number of samplers that can: be included in a pipeline
264    layout.
265    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
266    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
267    limit.
268ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
269    Only descriptors in descriptor set layouts created without the
270    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
271    count against this limit.
272endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
273    See <<descriptorsets-sampler>> and
274    <<descriptorsets-combinedimagesampler>>.
275  * [[limits-maxDescriptorSetUniformBuffers]]
276    pname:maxDescriptorSetUniformBuffers is the maximum number of uniform
277    buffers that can: be included in a pipeline layout.
278    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
279    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
280    limit.
281ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
282    Only descriptors in descriptor set layouts created without the
283    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
284    count against this limit.
285endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
286    See <<descriptorsets-uniformbuffer>> and
287    <<descriptorsets-uniformbufferdynamic>>.
288  * [[limits-maxDescriptorSetUniformBuffersDynamic]]
289    pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of
290    dynamic uniform buffers that can: be included in a pipeline layout.
291    Descriptors with a type of
292    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
293    limit.
294ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
295    Only descriptors in descriptor set layouts created without the
296    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
297    count against this limit.
298endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
299    See <<descriptorsets-uniformbufferdynamic>>.
300  * [[limits-maxDescriptorSetStorageBuffers]]
301    pname:maxDescriptorSetStorageBuffers is the maximum number of storage
302    buffers that can: be included in a pipeline layout.
303    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
304    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
305    limit.
306ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
307    Only descriptors in descriptor set layouts created without the
308    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
309    count against this limit.
310endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
311    See <<descriptorsets-storagebuffer>> and
312    <<descriptorsets-storagebufferdynamic>>.
313  * [[limits-maxDescriptorSetStorageBuffersDynamic]]
314    pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of
315    dynamic storage buffers that can: be included in a pipeline layout.
316    Descriptors with a type of
317    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
318    limit.
319ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
320    Only descriptors in descriptor set layouts created without the
321    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
322    count against this limit.
323endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
324    See <<descriptorsets-storagebufferdynamic>>.
325  * [[limits-maxDescriptorSetSampledImages]]
326    pname:maxDescriptorSetSampledImages is the maximum number of sampled
327    images that can: be included in a pipeline layout.
328    Descriptors with a type of
329    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
330    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
331    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
332ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
333    Only descriptors in descriptor set layouts created without the
334    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
335    count against this limit.
336endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
337    See <<descriptorsets-combinedimagesampler>>,
338    <<descriptorsets-sampledimage>>, and
339    <<descriptorsets-uniformtexelbuffer>>.
340  * [[limits-maxDescriptorSetStorageImages]]
341    pname:maxDescriptorSetStorageImages is the maximum number of storage
342    images that can: be included in a pipeline layout.
343    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
344    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
345ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
346    Only descriptors in descriptor set layouts created without the
347    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
348    count against this limit.
349endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
350    See <<descriptorsets-storageimage>>, and
351    <<descriptorsets-storagetexelbuffer>>.
352  * [[limits-maxDescriptorSetInputAttachments]]
353    pname:maxDescriptorSetInputAttachments is the maximum number of input
354    attachments that can: be included in a pipeline layout.
355    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
356    count against this limit.
357ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
358    Only descriptors in descriptor set layouts created without the
359    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
360    count against this limit.
361endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
362    See <<descriptorsets-inputattachment>>.
363  * [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is
364    the maximum number of vertex input attributes that can: be specified for
365    a graphics pipeline.
366    These are described in the array of
367    sname:VkVertexInputAttributeDescription structures that are provided at
368    graphics pipeline creation time via the
369    pname:pVertexAttributeDescriptions member of the
370    slink:VkPipelineVertexInputStateCreateInfo structure.
371    See <<fxvertex-attrib>> and <<fxvertex-input>>.
372  * [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the
373    maximum number of vertex buffers that can: be specified for providing
374    vertex attributes to a graphics pipeline.
375    These are described in the array of
376    sname:VkVertexInputBindingDescription structures that are provided at
377    graphics pipeline creation time via the pname:pVertexBindingDescriptions
378    member of the slink:VkPipelineVertexInputStateCreateInfo structure.
379    The pname:binding member of sname:VkVertexInputBindingDescription must:
380    be less than this limit.
381    See <<fxvertex-input>>.
382  * [[limits-maxVertexInputAttributeOffset]]
383    pname:maxVertexInputAttributeOffset is the maximum vertex input
384    attribute offset that can: be added to the vertex input binding stride.
385    The pname:offset member of the sname:VkVertexInputAttributeDescription
386    structure must: be less than or equal to this limit.
387    See <<fxvertex-input>>.
388  * [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride
389    is the maximum vertex input binding stride that can: be specified in a
390    vertex input binding.
391    The pname:stride member of the sname:VkVertexInputBindingDescription
392    structure must: be less than or equal to this limit.
393    See <<fxvertex-input>>.
394  * [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is
395    the maximum number of components of output variables which can: be
396    output by a vertex shader.
397    See <<shaders-vertex>>.
398  * [[limits-maxTessellationGenerationLevel]]
399    pname:maxTessellationGenerationLevel is the maximum tessellation
400    generation level supported by the fixed-function tessellation primitive
401    generator.
402    See <<tessellation>>.
403  * [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is
404    the maximum patch size, in vertices, of patches that can: be processed
405    by the tessellation control shader and tessellation primitive generator.
406    The pname:patchControlPoints member of the
407    slink:VkPipelineTessellationStateCreateInfo structure specified at
408    pipeline creation time and the value provided in the code:OutputVertices
409    execution mode of shader modules must: be less than or equal to this
410    limit.
411    See <<tessellation>>.
412  * [[limits-maxTessellationControlPerVertexInputComponents]]
413    pname:maxTessellationControlPerVertexInputComponents is the maximum
414    number of components of input variables which can: be provided as
415    per-vertex inputs to the tessellation control shader stage.
416  * [[limits-maxTessellationControlPerVertexOutputComponents]]
417    pname:maxTessellationControlPerVertexOutputComponents is the maximum
418    number of components of per-vertex output variables which can: be output
419    from the tessellation control shader stage.
420  * [[limits-maxTessellationControlPerPatchOutputComponents]]
421    pname:maxTessellationControlPerPatchOutputComponents is the maximum
422    number of components of per-patch output variables which can: be output
423    from the tessellation control shader stage.
424  * [[limits-maxTessellationControlTotalOutputComponents]]
425    pname:maxTessellationControlTotalOutputComponents is the maximum total
426    number of components of per-vertex and per-patch output variables which
427    can: be output from the tessellation control shader stage.
428  * [[limits-maxTessellationEvaluationInputComponents]]
429    pname:maxTessellationEvaluationInputComponents is the maximum number of
430    components of input variables which can: be provided as per-vertex
431    inputs to the tessellation evaluation shader stage.
432  * [[limits-maxTessellationEvaluationOutputComponents]]
433    pname:maxTessellationEvaluationOutputComponents is the maximum number of
434    components of per-vertex output variables which can: be output from the
435    tessellation evaluation shader stage.
436  * [[limits-maxGeometryShaderInvocations]]
437    pname:maxGeometryShaderInvocations is the maximum invocation count
438    supported for instanced geometry shaders.
439    The value provided in the code:Invocations execution mode of shader
440    modules must: be less than or equal to this limit.
441    See <<geometry>>.
442  * [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents
443    is the maximum number of components of input variables which can: be
444    provided as inputs to the geometry shader stage.
445  * [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents
446    is the maximum number of components of output variables which can: be
447    output from the geometry shader stage.
448  * [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is
449    the maximum number of vertices which can: be emitted by any geometry
450    shader.
451  * [[limits-maxGeometryTotalOutputComponents]]
452    pname:maxGeometryTotalOutputComponents is the maximum total number of
453    components of output variables, across all emitted vertices, which can:
454    be output from the geometry shader stage.
455  * [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents
456    is the maximum number of components of input variables which can: be
457    provided as inputs to the fragment shader stage.
458  * [[limits-maxFragmentOutputAttachments]]
459    pname:maxFragmentOutputAttachments is the maximum number of output
460    attachments which can: be written to by the fragment shader stage.
461  * [[limits-maxFragmentDualSrcAttachments]]
462    pname:maxFragmentDualSrcAttachments is the maximum number of output
463    attachments which can: be written to by the fragment shader stage when
464    blending is enabled and one of the dual source blend modes is in use.
465    See <<framebuffer-dsb>> and <<features-dualSrcBlend,
466    pname:dualSrcBlend>>.
467  * [[limits-maxFragmentCombinedOutputResources]]
468    pname:maxFragmentCombinedOutputResources is the total number of storage
469    buffers, storage images, and output code:Location decorated color
470    attachments (described in <<interfaces-fragmentoutput, Fragment Output
471    Interface>>) which can: be used in the fragment shader stage.
472  * [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize
473    is the maximum total storage size, in bytes, available for variables
474    declared with the code:Workgroup storage class in shader modules (or
475    with the code:shared storage qualifier in GLSL) in the compute shader
476    stage.
477  * [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is
478    the maximum number of local workgroups that can: be dispatched by a
479    single dispatching command.
480    These three values represent the maximum number of local workgroups for
481    the X, Y, and Z dimensions, respectively.
482    The workgroup count parameters to the dispatching commands must: be less
483    than or equal to the corresponding limit.
484    See <<dispatch>>.
485  * [[limits-maxComputeWorkGroupInvocations]]
486    pname:maxComputeWorkGroupInvocations is the maximum total number of
487    compute shader invocations in a single local workgroup.
488    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
489ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
490    execution mode in shader modules or by the object decorated by the
491    code:WorkgroupSize decoration, must: be less than or equal to this
492    limit.
493  * [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is
494    the maximum size of a local compute workgroup, per dimension.
495    These three values represent the maximum local workgroup size in the X,
496    Y, and Z dimensions, respectively.
497    The pname:x, pname:y, and pname:z sizes, as specified by the
498    code:LocalSize
499ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
500    execution mode or by the object decorated by the code:WorkgroupSize
501    decoration in shader modules, must: be less than or equal to the
502    corresponding limit.
503  * [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the
504    number of bits of subpixel precision in framebuffer coordinates
505    [eq]#x~f~# and [eq]#y~f~#.
506    See <<primsrast>>.
507  * [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the
508    number of bits of precision in the division along an axis of an image
509    used for minification and magnification filters.
510    [eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions
511    along each axis of the image represented.
512    Sub-texel values calculated during image sampling will snap to these
513    locations when generating the filtered results.
514  * [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number
515    of bits of division that the LOD calculation for mipmap fetching get
516    snapped to when determining the contribution from each mip level to the
517    mip filtered results.
518    [eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions.
519  * [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is
520    the maximum index value that can: be used for indexed draw calls when
521    using 32-bit indices.
522    This excludes the primitive restart index value of 0xFFFFFFFF.
523    See <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>>.
524  * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the
525    maximum draw count that is supported for indirect drawing calls.
526    See <<features-multiDrawIndirect, pname:multiDrawIndirect>>.
527  * [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum
528    absolute sampler LOD bias.
529    The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo
530    structure and the code:Bias operand of image sampling operations in
531    shader modules (or 0 if no code:Bias operand is provided to an image
532    sampling operation) are clamped to the range
533    [eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#.
534    See <<samplers-mipLodBias>>.
535  * [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the
536    maximum degree of sampler anisotropy.
537    The maximum degree of anisotropic filtering used for an image sampling
538    operation is the minimum of the pname:maxAnisotropy member of the
539    slink:VkSamplerCreateInfo structure and this limit.
540    See <<samplers-maxAnisotropy>>.
541  * [[limits-maxViewports]] pname:maxViewports is the maximum number of
542    active viewports.
543    The pname:viewportCount member of the
544    slink:VkPipelineViewportStateCreateInfo structure that is provided at
545    pipeline creation must: be less than or equal to this limit.
546  * [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the
547    maximum viewport dimensions in the X (width) and Y (height) dimensions,
548    respectively.
549    The maximum viewport dimensions must: be greater than or equal to the
550    largest image which can: be created and used as a framebuffer
551    attachment.
552    See <<vertexpostproc-viewport,Controlling the Viewport>>.
553  * [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the
554    [eq]#[minimum, maximum]# range that the corners of a viewport must: be
555    contained in.
556    This range must: be at least [eq]#[-2 {times} pname:size, 2 {times}
557    pname:size - 1]#, where [eq]#pname:size =
558    max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#.
559    See <<vertexpostproc-viewport,Controlling the Viewport>>.
560+
561[NOTE]
562.Note
563====
564The intent of the pname:viewportBoundsRange limit is to allow a maximum
565sized viewport to be arbitrarily shifted relative to the output target as
566long as at least some portion intersects.
567This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times}
568pname:size - 1]# which would allow all possible non-empty-set intersections
569of the output target and the viewport.
570Since these numbers are typically powers of two, picking the signed number
571range using the smallest possible number of bits ends up with the specified
572range.
573====
574  * [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number
575    of bits of subpixel precision for viewport bounds.
576    The subpixel precision that floating-point viewport bounds are
577    interpreted at is given by this limit.
578  * [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the
579    minimum required: alignment, in bytes, of host visible memory
580    allocations within the host address space.
581    When mapping a memory allocation with flink:vkMapMemory, subtracting
582    pname:offset bytes from the returned pointer will always produce an
583    integer multiple of this limit.
584    See <<memory-device-hostaccess>>.
585    The value must: be a power of two.
586  * [[limits-minTexelBufferOffsetAlignment]]
587    pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
588    in bytes, for the pname:offset member of the
589    slink:VkBufferViewCreateInfo structure for texel buffers.
590    The value must: be a power of two.
591ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
592    If <<features-texelBufferAlignment, pname:texelBufferAlignment>> is
593    enabled, this limit is equivalent to the maximum of the
594    <<limits-uniformTexelBufferOffsetAlignmentBytes,
595    pname:uniformTexelBufferOffsetAlignmentBytes>> and
596    <<limits-storageTexelBufferOffsetAlignmentBytes,
597    pname:storageTexelBufferOffsetAlignmentBytes>> members of
598    slink:VkPhysicalDeviceTexelBufferAlignmentProperties, but smaller
599    alignment is optionally: allowed by
600    <<limits-storageTexelBufferOffsetSingleTexelAlignment,
601    pname:storageTexelBufferOffsetSingleTexelAlignment>> and
602    <<limits-uniformTexelBufferOffsetSingleTexelAlignment,
603    pname:uniformTexelBufferOffsetSingleTexelAlignment>>.
604    If <<features-texelBufferAlignment, pname:texelBufferAlignment>> is not
605    enabled,
606endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
607    slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this
608    value.
609  * [[limits-minUniformBufferOffsetAlignment]]
610    pname:minUniformBufferOffsetAlignment is the minimum required:
611    alignment, in bytes, for the pname:offset member of the
612    sname:VkDescriptorBufferInfo structure for uniform buffers.
613    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
614    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the
615    pname:offset must: be an integer multiple of this limit.
616    Similarly, dynamic offsets for uniform buffers must: be multiples of
617    this limit.
618    The value must: be a power of two.
619  * [[limits-minStorageBufferOffsetAlignment]]
620    pname:minStorageBufferOffsetAlignment is the minimum required:
621    alignment, in bytes, for the pname:offset member of the
622    sname:VkDescriptorBufferInfo structure for storage buffers.
623    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
624    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the
625    pname:offset must: be an integer multiple of this limit.
626    Similarly, dynamic offsets for storage buffers must: be multiples of
627    this limit.
628    The value must: be a power of two.
629  * [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset
630    value for the code:ConstOffset image operand of any of the
631    code:OpImageSample* or code:OpImageFetch* image instructions.
632  * [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset
633    value for the code:ConstOffset image operand of any of the
634    code:OpImageSample* or code:OpImageFetch* image instructions.
635  * [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the
636    minimum offset value for the code:Offset, code:ConstOffset, or
637    code:ConstOffsets image operands of any of the code:OpImage*Gather image
638    instructions.
639  * [[limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the
640    maximum offset value for the code:Offset, code:ConstOffset, or
641    code:ConstOffsets image operands of any of the code:OpImage*Gather image
642    instructions.
643  * [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the
644    base minimum (inclusive) negative offset value for the code:Offset
645    operand of the code:InterpolateAtOffset extended instruction.
646  * [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the
647    base maximum (inclusive) positive offset value for the code:Offset
648    operand of the code:InterpolateAtOffset extended instruction.
649  * [[limits-subPixelInterpolationOffsetBits]]
650    pname:subPixelInterpolationOffsetBits is the number of fractional bits
651    that the code:x and code:y offsets to the code:InterpolateAtOffset
652    extended instruction may: be rounded to as fixed-point values.
653  * [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum
654    width for a framebuffer.
655    The pname:width member of the slink:VkFramebufferCreateInfo structure
656    must: be less than or equal to this limit.
657  * [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the
658    maximum height for a framebuffer.
659    The pname:height member of the slink:VkFramebufferCreateInfo structure
660    must: be less than or equal to this limit.
661  * [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the
662    maximum layer count for a layered framebuffer.
663    The pname:layers member of the slink:VkFramebufferCreateInfo structure
664    must: be less than or equal to this limit.
665ifdef::VKSC_VERSION_1_0[]
666ifdef::hidden[]
667// tag::scdeviation[]
668  * slink:VkPhysicalDeviceLimits::pname:maxFramebufferLayers may: be 1 if
669    neither pname:geometryShader or pname:shaderOutputLayer are supported
670    <<SCID-8>>.
671// end::scdeviation[]
672endif::hidden[]
673endif::VKSC_VERSION_1_0[]
674  * [[limits-framebufferColorSampleCounts]]
675    pname:framebufferColorSampleCounts is a bitmask^1^ of
676    elink:VkSampleCountFlagBits indicating the color sample counts that are
677    supported for all framebuffer color attachments with floating- or
678    fixed-point formats.
679ifndef::VK_VERSION_1_2[]
680    There is no limit specifying the color sample counts that are supported
681    for all color attachments with integer formats.
682endif::VK_VERSION_1_2[]
683ifdef::VK_VERSION_1_2[]
684    For color attachments with integer formats, see
685    <<limits-framebufferIntegerColorSampleCounts,
686    pname:framebufferIntegerColorSampleCounts>>.
687endif::VK_VERSION_1_2[]
688  * [[limits-framebufferDepthSampleCounts]]
689    pname:framebufferDepthSampleCounts is a bitmask^1^ of
690    elink:VkSampleCountFlagBits indicating the supported depth sample counts
691    for all framebuffer depth/stencil attachments, when the format includes
692    a depth component.
693  * [[limits-framebufferStencilSampleCounts]]
694    pname:framebufferStencilSampleCounts is a bitmask^1^ of
695    elink:VkSampleCountFlagBits indicating the supported stencil sample
696    counts for all framebuffer depth/stencil attachments, when the format
697    includes a stencil component.
698  * [[limits-framebufferNoAttachmentsSampleCounts]]
699    pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of
700    elink:VkSampleCountFlagBits indicating the supported sample counts for a
701    <<renderpass-noattachments, subpass which uses no attachments>>.
702  * [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum
703    number of color attachments that can: be used by a subpass in a render
704    pass.
705    The pname:colorAttachmentCount member of the sname:VkSubpassDescription
706ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
707    or sname:VkSubpassDescription2
708endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
709    structure must: be less than or equal to this limit.
710  * [[limits-sampledImageColorSampleCounts]]
711    pname:sampledImageColorSampleCounts is a bitmask^1^ of
712    elink:VkSampleCountFlagBits indicating the sample counts supported for
713    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
714    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color
715    format.
716  * [[limits-sampledImageIntegerSampleCounts]]
717    pname:sampledImageIntegerSampleCounts is a bitmask^1^ of
718    elink:VkSampleCountFlagBits indicating the sample counts supported for
719    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
720    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color
721    format.
722  * [[limits-sampledImageDepthSampleCounts]]
723    pname:sampledImageDepthSampleCounts is a bitmask^1^ of
724    elink:VkSampleCountFlagBits indicating the sample counts supported for
725    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
726    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format.
727  * [[limits-sampledImageStencilSampleCounts]]
728    pname:sampledImageStencilSampleCounts is a bitmask^1^ of
729    elink:VkSampleCountFlagBits indicating the sample counts supported for
730    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
731    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format.
732  * [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a
733    bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts
734    supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL,
735    and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT.
736  * [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum
737    number of array elements of a variable decorated with the
738    code:SampleMask built-in decoration.
739  * [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics
740    specifies support for timestamps on all graphics and compute queues.
741    If this limit is set to ename:VK_TRUE, all queues that advertise the
742    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the
743    sname:VkQueueFamilyProperties::pname:queueFlags support
744    sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36.
745    See <<queries-timestamps, Timestamp Queries>>.
746  * [[limits-timestampPeriod]] pname:timestampPeriod is the number of
747    nanoseconds required: for a timestamp query to be incremented by 1.
748    See <<queries-timestamps, Timestamp Queries>>.
749  * [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number
750    of clip distances that can: be used in a single shader stage.
751    The size of any array declared with the code:ClipDistance built-in
752    decoration in a shader module must: be less than or equal to this limit.
753  * [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number
754    of cull distances that can: be used in a single shader stage.
755    The size of any array declared with the code:CullDistance built-in
756    decoration in a shader module must: be less than or equal to this limit.
757  * [[limits-maxCombinedClipAndCullDistances]]
758    pname:maxCombinedClipAndCullDistances is the maximum combined number of
759    clip and cull distances that can: be used in a single shader stage.
760    The sum of the sizes of any pair of arrays declared with the
761    code:ClipDistance and code:CullDistance built-in decoration used by a
762    single shader stage in a shader module must: be less than or equal to
763    this limit.
764  * [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the
765    number of discrete priorities that can: be assigned to a queue based on
766    the value of each member of
767    slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities.
768    This must: be at least 2, and levels must: be spread evenly over the
769    range, with at least one level at 1.0, and another at 0.0.
770    See <<devsandqueues-priority>>.
771  * [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range
772    [eq]#[pname:minimum,pname:maximum]# of supported sizes for points.
773    Values written to variables decorated with the code:PointSize built-in
774    decoration are clamped to this range.
775  * [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range
776    [eq]#[pname:minimum,pname:maximum]# of supported widths for lines.
777    Values specified by the pname:lineWidth member of the
778    slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth
779    parameter to fname:vkCmdSetLineWidth are clamped to this range.
780  * [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the
781    granularity of supported point sizes.
782    Not all point sizes in the range defined by pname:pointSizeRange are
783    supported.
784    This limit specifies the granularity (or increment) between successive
785    supported point sizes.
786  * [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the
787    granularity of supported line widths.
788    Not all line widths in the range defined by pname:lineWidthRange are
789    supported.
790    This limit specifies the granularity (or increment) between successive
791    supported line widths.
792  * [[limits-strictLines]] pname:strictLines specifies whether lines are
793    rasterized according to the preferred method of rasterization.
794    If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set
795    of rules.
796    If set to ename:VK_TRUE, lines are rasterized as per the strict
797    definition.
798    See <<primsrast-lines-basic,Basic Line Segment Rasterization>>.
799  * [[limits-standardSampleLocations]] pname:standardSampleLocations
800    specifies whether rasterization uses the standard sample locations as
801    documented in <<primsrast-multisampling,Multisampling>>.
802    If set to ename:VK_TRUE, the implementation uses the documented sample
803    locations.
804    If set to ename:VK_FALSE, the implementation may: use different sample
805    locations.
806  * [[limits-optimalBufferCopyOffsetAlignment]]
807    pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset
808    alignment in bytes for
809ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
810    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
811endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
812ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
813    flink:vkCmdCopyBufferToImage2, flink:vkCmdCopyBufferToImage,
814    flink:vkCmdCopyImageToBuffer2, and flink:vkCmdCopyImageToBuffer.
815endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
816ifdef::VK_EXT_host_image_copy[]
817    This value is also the optimal host memory offset alignment in bytes for
818    flink:vkCopyMemoryToImageEXT and flink:vkCopyImageToMemoryEXT.
819endif::VK_EXT_host_image_copy[]
820    The per texel alignment requirements are enforced, but applications
821    should: use the optimal alignment for optimal performance and power use.
822    The value must: be a power of two.
823  * [[limits-optimalBufferCopyRowPitchAlignment]]
824    pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
825    alignment in bytes for
826ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
827    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
828endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
829ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[]
830    flink:vkCmdCopyBufferToImage2, flink:vkCmdCopyBufferToImage,
831    flink:vkCmdCopyImageToBuffer2, and flink:vkCmdCopyImageToBuffer.
832endif::VK_VERSION_1_3,VK_KHR_copy_commands2[]
833ifdef::VK_EXT_host_image_copy[]
834    This value is also the optimal host memory row pitch alignment in bytes
835    for flink:vkCopyMemoryToImageEXT and flink:vkCopyImageToMemoryEXT.
836endif::VK_EXT_host_image_copy[]
837    Row pitch is the number of bytes between texels with the same X
838    coordinate in adjacent rows (Y coordinates differ by one).
839    The per texel alignment requirements are enforced, but applications
840    should: use the optimal alignment for optimal performance and power use.
841    The value must: be a power of two.
842  * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and
843    alignment in bytes that bounds concurrent access to
844    <<memory-device-hostaccess, host-mapped device memory>>.
845    The value must: be a power of two.
846
8471::
848    For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits
849    defined above represent the minimum supported sample counts for each
850    image type.
851    Individual images may: support additional sample counts, which are
852    queried using flink:vkGetPhysicalDeviceImageFormatProperties as
853    described in <<features-supported-sample-counts, Supported Sample
854    Counts>>.
855
856include::{generated}/validity/structs/VkPhysicalDeviceLimits.adoc[]
857--
858
859
860[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums']
861--
862Bits which may: be set in the sample count limits returned by
863slink:VkPhysicalDeviceLimits, as well as in other queries and structures
864representing image sample counts, are:
865
866include::{generated}/api/enums/VkSampleCountFlagBits.adoc[]
867
868  * ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per
869    pixel.
870  * ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel.
871  * ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel.
872  * ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel.
873  * ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per
874    pixel.
875  * ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per
876    pixel.
877  * ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per
878    pixel.
879--
880
881[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags']
882--
883include::{generated}/api/flags/VkSampleCountFlags.adoc[]
884
885tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or
886more elink:VkSampleCountFlagBits.
887--
888
889ifdef::VK_KHR_push_descriptor[]
890[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
891--
892The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined
893as:
894
895include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.adoc[]
896
897  * pname:sType is a elink:VkStructureType value identifying this structure.
898  * pname:pNext is `NULL` or a pointer to a structure extending this
899    structure.
900  * [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum
901    number of descriptors that can: be used in a descriptor set layout
902    created with
903    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
904
905:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR
906include::{chapters}/limits.adoc[tag=limits_desc]
907
908include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.adoc[]
909--
910endif::VK_KHR_push_descriptor[]
911
912ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
913[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
914--
915The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
916
917include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.adoc[]
918
919ifdef::VK_KHR_multiview[]
920or the equivalent
921
922include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.adoc[]
923endif::VK_KHR_multiview[]
924
925  * pname:sType is a elink:VkStructureType value identifying this structure.
926  * pname:pNext is `NULL` or a pointer to a structure extending this
927    structure.
928
929// Must have preceding whitespace
930ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
931ifndef::VK_VERSION_1_2[:anchor-prefix:]
932// tag::VK_KHR_multiview-properties[]
933  * [[{anchor-prefix}limits-maxMultiviewViewCount]]
934    pname:maxMultiviewViewCount is one greater than the maximum view index
935    that can: be used in a subpass.
936  * [[{anchor-prefix}limits-maxMultiviewInstanceIndex]]
937    pname:maxMultiviewInstanceIndex is the maximum valid value of instance
938    index allowed to be generated by a drawing command recorded within a
939    subpass of a multiview render pass instance.
940// end::VK_KHR_multiview-properties[]
941
942:refpage: VkPhysicalDeviceMultiviewProperties
943include::{chapters}/limits.adoc[tag=limits_desc]
944
945include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.adoc[]
946--
947endif::VK_VERSION_1_1,VK_KHR_multiview[]
948
949ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
950[open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR']
951--
952The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as:
953
954include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.adoc[]
955
956ifdef::VK_KHR_shader_float_controls[]
957or the equivalent
958
959include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.adoc[]
960endif::VK_KHR_shader_float_controls[]
961
962  * pname:sType is a elink:VkStructureType value identifying this structure.
963  * pname:pNext is `NULL` or a pointer to a structure extending this
964    structure.
965
966// Must have preceding whitespace
967ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
968ifndef::VK_VERSION_1_2[:anchor-prefix:]
969// tag::VK_KHR_shader_float_controls-properties[]
970  * [[{anchor-prefix}features-denormBehaviorIndependence]]
971    pname:denormBehaviorIndependence is a
972    elink:VkShaderFloatControlsIndependence value indicating whether, and
973    how, denorm behavior can be set independently for different bit widths.
974  * [[{anchor-prefix}features-roundingModeIndependence]]
975    pname:roundingModeIndependence is a
976    elink:VkShaderFloatControlsIndependence value indicating whether, and
977    how, rounding modes can be set independently for different bit widths.
978  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]]
979    pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
980    indicating whether sign of a zero, [eq]##Nan##s and
981    latexmath:[\pm\infty] can: be preserved in 16-bit floating-point
982    computations.
983    It also indicates whether the code:SignedZeroInfNanPreserve execution
984    mode can: be used for 16-bit floating-point types.
985  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]]
986    pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value
987    indicating whether sign of a zero, [eq]##Nan##s and
988    latexmath:[\pm\infty] can: be preserved in 32-bit floating-point
989    computations.
990    It also indicates whether the code:SignedZeroInfNanPreserve execution
991    mode can: be used for 32-bit floating-point types.
992  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]]
993    pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value
994    indicating whether sign of a zero, [eq]##Nan##s and
995    latexmath:[\pm\infty] can: be preserved in 64-bit floating-point
996    computations.
997    It also indicates whether the code:SignedZeroInfNanPreserve execution
998    mode can: be used for 64-bit floating-point types.
999  * [[{anchor-prefix}limits-shaderDenormPreserveFloat16]]
1000    pname:shaderDenormPreserveFloat16 is a boolean value indicating whether
1001    denormals can: be preserved in 16-bit floating-point computations.
1002    It also indicates whether the code:DenormPreserve execution mode can: be
1003    used for 16-bit floating-point types.
1004  * [[{anchor-prefix}limits-shaderDenormPreserveFloat32]]
1005    pname:shaderDenormPreserveFloat32 is a boolean value indicating whether
1006    denormals can: be preserved in 32-bit floating-point computations.
1007    It also indicates whether the code:DenormPreserve execution mode can: be
1008    used for 32-bit floating-point types.
1009  * [[{anchor-prefix}limits-shaderDenormPreserveFloat64]]
1010    pname:shaderDenormPreserveFloat64 is a boolean value indicating whether
1011    denormals can: be preserved in 64-bit floating-point computations.
1012    It also indicates whether the code:DenormPreserve execution mode can: be
1013    used for 64-bit floating-point types.
1014  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]]
1015    pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating
1016    whether denormals can: be flushed to zero in 16-bit floating-point
1017    computations.
1018    It also indicates whether the code:DenormFlushToZero execution mode can:
1019    be used for 16-bit floating-point types.
1020  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]]
1021    pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating
1022    whether denormals can: be flushed to zero in 32-bit floating-point
1023    computations.
1024    It also indicates whether the code:DenormFlushToZero execution mode can:
1025    be used for 32-bit floating-point types.
1026  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat64]]
1027    pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating
1028    whether denormals can: be flushed to zero in 64-bit floating-point
1029    computations.
1030    It also indicates whether the code:DenormFlushToZero execution mode can:
1031    be used for 64-bit floating-point types.
1032  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat16]]
1033    pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether
1034    an implementation supports the round-to-nearest-even rounding mode for
1035    16-bit floating-point arithmetic and conversion instructions.
1036    It also indicates whether the code:RoundingModeRTE execution mode can:
1037    be used for 16-bit floating-point types.
1038  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat32]]
1039    pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether
1040    an implementation supports the round-to-nearest-even rounding mode for
1041    32-bit floating-point arithmetic and conversion instructions.
1042    It also indicates whether the code:RoundingModeRTE execution mode can:
1043    be used for 32-bit floating-point types.
1044  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat64]]
1045    pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether
1046    an implementation supports the round-to-nearest-even rounding mode for
1047    64-bit floating-point arithmetic and conversion instructions.
1048    It also indicates whether the code:RoundingModeRTE execution mode can:
1049    be used for 64-bit floating-point types.
1050  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat16]]
1051    pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether
1052    an implementation supports the round-towards-zero rounding mode for
1053    16-bit floating-point arithmetic and conversion instructions.
1054    It also indicates whether the code:RoundingModeRTZ execution mode can:
1055    be used for 16-bit floating-point types.
1056  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat32]]
1057    pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether
1058    an implementation supports the round-towards-zero rounding mode for
1059    32-bit floating-point arithmetic and conversion instructions.
1060    It also indicates whether the code:RoundingModeRTZ execution mode can:
1061    be used for 32-bit floating-point types.
1062  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat64]]
1063    pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether
1064    an implementation supports the round-towards-zero rounding mode for
1065    64-bit floating-point arithmetic and conversion instructions.
1066    It also indicates whether the code:RoundingModeRTZ execution mode can:
1067    be used for 64-bit floating-point types.
1068// end::VK_KHR_shader_float_controls-properties[]
1069
1070ifdef::editing-notes[]
1071[NOTE]
1072.editing-note
1073====
1074Implementations may not be able to control behavior of denorms for
1075floating-point atomics.
1076This needs to be taken into account when such atomics will be added to
1077Vulkan.
1078====
1079endif::editing-notes[]
1080
1081:refpage: VkPhysicalDeviceFloatControlsProperties
1082include::{chapters}/limits.adoc[tag=limits_desc]
1083
1084include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.adoc[]
1085--
1086
1087[open,refpage='VkShaderFloatControlsIndependence',desc='Bitmask specifying whether, and how, shader float controls can be set separately',type='enums',alias='VkShaderFloatControlsIndependenceKHR']
1088--
1089Values which may: be returned in the pname:denormBehaviorIndependence and
1090pname:roundingModeIndependence fields of
1091sname:VkPhysicalDeviceFloatControlsProperties are:
1092
1093include::{generated}/api/enums/VkShaderFloatControlsIndependence.adoc[]
1094
1095ifdef::VK_KHR_shader_float_controls[]
1096or the equivalent
1097
1098include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.adoc[]
1099endif::VK_KHR_shader_float_controls[]
1100
1101  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY specifies that
1102    shader float controls for 32-bit floating point can: be set
1103    independently; other bit widths must: be set identically to each other.
1104  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL specifies that shader
1105    float controls for all bit widths can: be set independently.
1106  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE specifies that shader
1107    float controls for all bit widths must: be set identically.
1108--
1109endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1110
1111ifdef::VK_EXT_discard_rectangles[]
1112[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs']
1113--
1114The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined
1115as:
1116
1117include::{generated}/api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.adoc[]
1118
1119  * pname:sType is a elink:VkStructureType value identifying this structure.
1120  * pname:pNext is `NULL` or a pointer to a structure extending this
1121    structure.
1122  * [[limits-maxDiscardRectangles]] pname:maxDiscardRectangles is the
1123    maximum number of active discard rectangles that can: be specified.
1124
1125:refpage: VkPhysicalDeviceDiscardRectanglePropertiesEXT
1126include::{chapters}/limits.adoc[tag=limits_desc]
1127
1128include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.adoc[]
1129--
1130endif::VK_EXT_discard_rectangles[]
1131
1132ifdef::VK_EXT_sample_locations[]
1133[open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs']
1134--
1135The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined
1136as:
1137
1138include::{generated}/api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.adoc[]
1139
1140  * pname:sType is a elink:VkStructureType value identifying this structure.
1141  * pname:pNext is `NULL` or a pointer to a structure extending this
1142    structure.
1143  * [[limits-sampleLocationSampleCounts]] pname:sampleLocationSampleCounts
1144    is a bitmask of elink:VkSampleCountFlagBits indicating the sample counts
1145    supporting custom sample locations.
1146  * [[limits-maxSampleLocationGridSize]] pname:maxSampleLocationGridSize is
1147    the maximum size of the pixel grid in which sample locations can: vary
1148    that is supported for all sample counts in
1149    pname:sampleLocationSampleCounts.
1150  * [[limits-sampleLocationCoordinateRange]]
1151    pname:sampleLocationCoordinateRange[2] is the range of supported sample
1152    location coordinates.
1153  * [[limits-sampleLocationSubPixelBits]] pname:sampleLocationSubPixelBits
1154    is the number of bits of subpixel precision for sample locations.
1155  * [[limits-variableSampleLocations]] pname:variableSampleLocations
1156    specifies whether the sample locations used by all pipelines that will
1157    be bound to a command buffer during a subpass must: match.
1158    If set to ename:VK_TRUE, the implementation supports variable sample
1159    locations in a subpass.
1160    If set to ename:VK_FALSE, then the sample locations must: stay constant
1161    in each subpass.
1162
1163:refpage: VkPhysicalDeviceSampleLocationsPropertiesEXT
1164include::{chapters}/limits.adoc[tag=limits_desc]
1165
1166include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.adoc[]
1167--
1168endif::VK_EXT_sample_locations[]
1169
1170ifdef::VK_EXT_external_memory_host[]
1171[open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs']
1172--
1173The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is
1174defined as:
1175
1176include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.adoc[]
1177
1178  * pname:sType is a elink:VkStructureType value identifying this structure.
1179  * pname:pNext is `NULL` or a pointer to a structure extending this
1180    structure.
1181  * [[limits-minImportedHostPointerAlignment]]
1182    pname:minImportedHostPointerAlignment is the minimum required:
1183    alignment, in bytes, for the base address and size of host pointers that
1184    can: be imported to a Vulkan memory object.
1185    The value must: be a power of two.
1186
1187:refpage: VkPhysicalDeviceExternalMemoryHostPropertiesEXT
1188include::{chapters}/limits.adoc[tag=limits_desc]
1189
1190include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.adoc[]
1191--
1192endif::VK_EXT_external_memory_host[]
1193
1194ifdef::VK_NVX_multiview_per_view_attributes[]
1195[open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
1196--
1197The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure
1198is defined as:
1199
1200include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.adoc[]
1201
1202  * pname:sType is a elink:VkStructureType value identifying this structure.
1203  * pname:pNext is `NULL` or a pointer to a structure extending this
1204    structure.
1205  * [[limits-perViewPositionAllComponents]]
1206    pname:perViewPositionAllComponents is ename:VK_TRUE if the
1207    implementation supports per-view position values that differ in
1208    components other than the X component.
1209
1210:refpage: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
1211include::{chapters}/limits.adoc[tag=limits_desc]
1212
1213include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.adoc[]
1214--
1215endif::VK_NVX_multiview_per_view_attributes[]
1216
1217ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
1218[open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs']
1219--
1220The sname:VkPhysicalDevicePointClippingProperties structure is defined as:
1221
1222include::{generated}/api/structs/VkPhysicalDevicePointClippingProperties.adoc[]
1223
1224ifdef::VK_KHR_maintenance2[]
1225or the equivalent
1226
1227include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.adoc[]
1228endif::VK_KHR_maintenance2[]
1229
1230  * pname:sType is a elink:VkStructureType value identifying this structure.
1231  * pname:pNext is `NULL` or a pointer to a structure extending this
1232    structure.
1233
1234// Must have preceding whitespace
1235ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1236ifndef::VK_VERSION_1_2[:anchor-prefix:]
1237// tag::VK_KHR_maintenance2-properties[]
1238  * [[{anchor-prefix}limits-pointClipping]] pname:pointClippingBehavior is a
1239    elink:VkPointClippingBehavior value specifying the point clipping
1240    behavior supported by the implementation.
1241// end::VK_KHR_maintenance2-properties[]
1242
1243:refpage: VkPhysicalDevicePointClippingProperties
1244include::{chapters}/limits.adoc[tag=limits_desc]
1245
1246include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.adoc[]
1247--
1248endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
1249
1250ifdef::VK_VERSION_1_1[]
1251[open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs']
1252--
1253The sname:VkPhysicalDeviceSubgroupProperties structure is defined as:
1254
1255include::{generated}/api/structs/VkPhysicalDeviceSubgroupProperties.adoc[]
1256
1257  * pname:sType is a elink:VkStructureType value identifying this structure.
1258  * pname:pNext is `NULL` or a pointer to a structure extending this
1259    structure.
1260
1261// Must have preceding whitespace
1262ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1263ifndef::VK_VERSION_1_2[:anchor-prefix:]
1264// tag::VK_KHR_subgroup-properties[]
1265  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
1266    default number of invocations in each subgroup.
1267    pname:subgroupSize is at least 1 if any of the physical device's queues
1268    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
1269    pname:subgroupSize is a power-of-two.
1270  * [[limits-subgroup-supportedStages]] pname:supportedStages is a bitfield
1271    of elink:VkShaderStageFlagBits describing the shader stages that
1272    <<shaders-group-operations, group operations>> with
1273    <<shaders-scope-subgroup, subgroup scope>> are supported in.
1274    pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT
1275    bit set if any of the physical device's queues support
1276    ename:VK_QUEUE_COMPUTE_BIT.
1277  * [[limits-subgroupSupportedOperations]] pname:supportedOperations is a
1278    bitmask of elink:VkSubgroupFeatureFlagBits specifying the sets of
1279    <<shaders-group-operations, group operations>> with
1280    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
1281    pname:supportedOperations will have the
1282    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
1283    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
1284    ename:VK_QUEUE_COMPUTE_BIT.
1285  * [[limits-subgroup-quadOperationsInAllStages]]
1286    pname:quadOperationsInAllStages is a boolean specifying whether
1287    <<shaders-quad-operations,quad group operations>> are available in all
1288    stages, or are restricted to fragment and compute stages.
1289// end::VK_KHR_subgroup-properties[]
1290
1291:refpage: VkPhysicalDeviceSubgroupProperties
1292include::{chapters}/limits.adoc[tag=limits_desc]
1293
1294If pname:supportedOperations includes <<features-subgroup-quad,
1295ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>,
1296ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
1297or <<features-shaderSubgroupUniformControlFlow,
1298pname:shaderSubgroupUniformControlFlow>> is enabled,
1299endif::VK_KHR_shader_subgroup_uniform_control_flow[]
1300pname:subgroupSize must: be greater than or equal to 4.
1301
1302include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.adoc[]
1303--
1304
1305[open,refpage='VkSubgroupFeatureFlagBits',desc='Bitmask describing what group operations are supported with subgroup scope',type='enums']
1306--
1307Bits which can: be set in
1308slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
1309ifdef::VK_VERSION_1_2[]
1310and
1311slink:VkPhysicalDeviceVulkan11Properties::pname:subgroupSupportedOperations
1312endif::VK_VERSION_1_2[]
1313to specify supported <<shaders-group-operations, group operations>> with
1314<<shaders-scope-subgroup, subgroup scope>> are:
1315
1316include::{generated}/api/enums/VkSubgroupFeatureFlagBits.adoc[]
1317
1318  * [[features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT
1319    specifies the device will accept SPIR-V shader modules containing the
1320    code:GroupNonUniform capability.
1321  * [[features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT specifies
1322    the device will accept SPIR-V shader modules containing the
1323    code:GroupNonUniformVote capability.
1324  * [[features-subgroup-arithmetic]]
1325    ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will
1326    accept SPIR-V shader modules containing the
1327    code:GroupNonUniformArithmetic capability.
1328  * [[features-subgroup-ballot]] ename:VK_SUBGROUP_FEATURE_BALLOT_BIT
1329    specifies the device will accept SPIR-V shader modules containing the
1330    code:GroupNonUniformBallot capability.
1331  * [[features-subgroup-shuffle]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT
1332    specifies the device will accept SPIR-V shader modules containing the
1333    code:GroupNonUniformShuffle capability.
1334  * [[features-subgroup-shuffle-relative]]
1335    ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will
1336    accept SPIR-V shader modules containing the
1337    code:GroupNonUniformShuffleRelative capability.
1338  * [[features-subgroup-clustered]] ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT
1339    specifies the device will accept SPIR-V shader modules containing the
1340    code:GroupNonUniformClustered capability.
1341  * [[features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT specifies
1342    the device will accept SPIR-V shader modules containing the
1343    code:GroupNonUniformQuad capability.
1344ifdef::VK_NV_shader_subgroup_partitioned[]
1345  * [[features-subgroup-partitioned]]
1346    ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will
1347    accept SPIR-V shader modules containing the
1348    code:GroupNonUniformPartitionedNV capability.
1349endif::VK_NV_shader_subgroup_partitioned[]
1350--
1351
1352[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags']
1353--
1354include::{generated}/api/flags/VkSubgroupFeatureFlags.adoc[]
1355
1356tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
1357more elink:VkSubgroupFeatureFlagBits.
1358--
1359
1360ifdef::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
1361[open,refpage='VkPhysicalDeviceSubgroupSizeControlProperties',desc='Structure describing the control subgroup size properties of an implementation',type='structs',alias='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT']
1362--
1363The sname:VkPhysicalDeviceSubgroupSizeControlProperties structure is defined
1364as:
1365
1366include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlProperties.adoc[]
1367
1368ifdef::VK_EXT_subgroup_size_control[]
1369or the equivalent
1370
1371include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.adoc[]
1372endif::VK_EXT_subgroup_size_control[]
1373
1374  * pname:sType is a elink:VkStructureType value identifying this structure.
1375  * pname:pNext is `NULL` or a pointer to a structure extending this
1376    structure.
1377
1378// Must have preceding whitespace
1379ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
1380ifndef::VK_VERSION_1_3[:anchor-prefix:]
1381// tag::VK_EXT_subgroup_size_control-properties[]
1382  * [[{anchor-prefix}limits-minSubgroupSize]] pname:minSubgroupSize is the
1383    minimum subgroup size supported by this device.
1384    pname:minSubgroupSize is at least one if any of the physical device's
1385    queues support ename:VK_QUEUE_GRAPHICS_BIT or
1386    ename:VK_QUEUE_COMPUTE_BIT.
1387    pname:minSubgroupSize is a power-of-two.
1388    pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize.
1389    pname:minSubgroupSize is less than or equal to <<limits-subgroup-size,
1390    pname:subgroupSize>>.
1391  * [[{anchor-prefix}limits-maxSubgroupSize]] pname:maxSubgroupSize is the
1392    maximum subgroup size supported by this device.
1393    pname:maxSubgroupSize is at least one if any of the physical device's
1394    queues support ename:VK_QUEUE_GRAPHICS_BIT or
1395    ename:VK_QUEUE_COMPUTE_BIT.
1396    pname:maxSubgroupSize is a power-of-two.
1397    pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize.
1398    pname:maxSubgroupSize is greater than or equal to
1399    <<limits-subgroup-size, pname:subgroupSize>>.
1400  * [[{anchor-prefix}limits-maxComputeWorkgroupSubgroups]]
1401    pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups
1402    supported by the implementation within a workgroup.
1403  * [[{anchor-prefix}limits-requiredSubgroupSizeStages]]
1404    pname:requiredSubgroupSizeStages is a bitfield of what shader stages
1405    support having a required subgroup size specified.
1406// end::VK_EXT_subgroup_size_control-properties[]
1407
1408:refpage: VkPhysicalDeviceSubgroupSizeControlProperties
1409include::{chapters}/limits.adoc[tag=limits_desc]
1410
1411If slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
1412includes <<features-subgroup-quad, ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>,
1413pname:minSubgroupSize must: be greater than or equal to 4.
1414
1415include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlProperties.adoc[]
1416--
1417endif::VK_VERSION_1_3,VK_EXT_subgroup_size_control[]
1418endif::VK_VERSION_1_1[]
1419
1420ifdef::VK_EXT_blend_operation_advanced[]
1421[open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs']
1422--
1423The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is
1424defined as:
1425
1426include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.adoc[]
1427
1428  * pname:sType is a elink:VkStructureType value identifying this structure.
1429  * pname:pNext is `NULL` or a pointer to a structure extending this
1430    structure.
1431  * [[limits-advancedBlendMaxColorAttachments]]
1432    pname:advancedBlendMaxColorAttachments is one greater than the highest
1433    color attachment index that can: be used in a subpass, for a pipeline
1434    that uses an <<framebuffer-blend-advanced,advanced blend operation>>.
1435  * [[limits-advancedBlendIndependentBlend]]
1436    pname:advancedBlendIndependentBlend specifies whether advanced blend
1437    operations can: vary per-attachment.
1438  * [[limits-advancedBlendNonPremultipliedSrcColor]]
1439    pname:advancedBlendNonPremultipliedSrcColor specifies whether the source
1440    color can: be treated as non-premultiplied.
1441    If this is ename:VK_FALSE, then
1442    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied
1443    must: be ename:VK_TRUE.
1444  * [[limits-advancedBlendNonPremultipliedDstColor]]
1445    pname:advancedBlendNonPremultipliedDstColor specifies whether the
1446    destination color can: be treated as non-premultiplied.
1447    If this is ename:VK_FALSE, then
1448    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied
1449    must: be ename:VK_TRUE.
1450  * [[limits-advancedBlendCorrelatedOverlap]]
1451    pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode
1452    can: be treated as correlated.
1453    If this is ename:VK_FALSE, then
1454    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
1455    must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
1456  * [[limits-advancedBlendAllOperations]] pname:advancedBlendAllOperations
1457    specifies whether all advanced blend operation enums are supported.
1458    See the valid usage of slink:VkPipelineColorBlendAttachmentState.
1459
1460:refpage: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
1461include::{chapters}/limits.adoc[tag=limits_desc]
1462
1463include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.adoc[]
1464--
1465endif::VK_EXT_blend_operation_advanced[]
1466
1467ifdef::VK_EXT_vertex_attribute_divisor[]
1468[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs']
1469--
1470The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is
1471defined as:
1472
1473include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.adoc[]
1474
1475  * pname:sType is a elink:VkStructureType value identifying this structure.
1476  * pname:pNext is `NULL` or a pointer to a structure extending this
1477    structure.
1478
1479// Must have preceding whitespace
1480ifdef::VK_KHR_vertex_attribute_divisor[:anchor-prefix: extension-]
1481ifndef::VK_KHR_vertex_attribute_divisor[:anchor-prefix:]
1482// tag::VK_KHR_vertex_attribute_divisor-properties[]
1483  * [[{anchor-prefix}limits-maxVertexAttribDivisor]]
1484    pname:maxVertexAttribDivisor is the maximum value of the number of
1485    instances that will repeat the value of vertex attribute data when
1486    instanced rendering is enabled.
1487
1488:refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
1489include::{chapters}/limits.adoc[tag=limits_desc]
1490
1491include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.adoc[]
1492--
1493endif::VK_EXT_vertex_attribute_divisor[]
1494
1495ifdef::VK_KHR_vertex_attribute_divisor[]
1496[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs']
1497--
1498The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR structure is
1499defined as:
1500
1501include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR.adoc[]
1502
1503  * pname:sType is a elink:VkStructureType value identifying this structure.
1504  * pname:pNext is `NULL` or a pointer to a structure extending this
1505    structure.
1506  * [[limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor is the
1507    maximum value of the number of instances that will repeat the value of
1508    vertex attribute data when instanced rendering is enabled.
1509  * [[limits-supportsNonZeroFirstInstance]]
1510    pname:supportsNonZeroFirstInstance specifies whether a non-zero value
1511    for the pname:firstInstance parameter of <<drawing, drawing commands>>
1512    is supported when
1513    slink:VkVertexInputBindingDivisorDescriptionKHR::pname:divisor is not
1514    `1`.
1515
1516:refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR
1517include::{chapters}/limits.adoc[tag=limits_desc]
1518
1519include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR.adoc[]
1520--
1521endif::VK_KHR_vertex_attribute_divisor[]
1522
1523ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
1524[open,refpage='VkPhysicalDeviceSamplerFilterMinmaxProperties',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT']
1525--
1526The sname:VkPhysicalDeviceSamplerFilterMinmaxProperties structure is defined
1527as:
1528
1529include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.adoc[]
1530
1531ifdef::VK_EXT_sampler_filter_minmax[]
1532or the equivalent
1533
1534include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.adoc[]
1535endif::VK_EXT_sampler_filter_minmax[]
1536
1537  * pname:sType is a elink:VkStructureType value identifying this structure.
1538  * pname:pNext is `NULL` or a pointer to a structure extending this
1539    structure.
1540
1541// Must have preceding whitespace
1542ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1543ifndef::VK_VERSION_1_2[:anchor-prefix:]
1544// tag::VK_EXT_sampler_filter_minmax-properties[]
1545  * [[{anchor-prefix}limits-filterMinmaxSingleComponentFormats]]
1546    pname:filterMinmaxSingleComponentFormats is a boolean value indicating
1547    whether a minimum set of required formats support min/max filtering.
1548  * [[{anchor-prefix}limits-filterMinmaxImageComponentMapping]]
1549    pname:filterMinmaxImageComponentMapping is a boolean value indicating
1550    whether the implementation supports non-identity component mapping of
1551    the image when doing min/max filtering.
1552// end::VK_EXT_sampler_filter_minmax-properties[]
1553
1554:refpage: VkPhysicalDeviceSamplerFilterMinmaxProperties
1555include::{chapters}/limits.adoc[tag=limits_desc]
1556
1557[[limits-filterMinmaxSingleComponentFormats-minimum-requirements]]
1558If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following
1559formats must: support the
1560ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with
1561ename:VK_IMAGE_TILING_OPTIMAL, if they support
1562ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT:
1563
1564  * ename:VK_FORMAT_R8_UNORM
1565  * ename:VK_FORMAT_R8_SNORM
1566  * ename:VK_FORMAT_R16_UNORM
1567  * ename:VK_FORMAT_R16_SNORM
1568  * ename:VK_FORMAT_R16_SFLOAT
1569  * ename:VK_FORMAT_R32_SFLOAT
1570  * ename:VK_FORMAT_D16_UNORM
1571  * ename:VK_FORMAT_X8_D24_UNORM_PACK32
1572  * ename:VK_FORMAT_D32_SFLOAT
1573  * ename:VK_FORMAT_D16_UNORM_S8_UINT
1574  * ename:VK_FORMAT_D24_UNORM_S8_UINT
1575  * ename:VK_FORMAT_D32_SFLOAT_S8_UINT
1576
1577If the format is a depth/stencil format, this bit only specifies that the
1578depth aspect (not the stencil aspect) of an image of this format supports
1579min/max filtering, and that min/max filtering of the depth aspect is
1580supported when depth compare is disabled in the sampler.
1581
1582If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component
1583mapping of the image view used with min/max filtering must: have been
1584created with the pname:r component set to the
1585<<resources-image-views-identity-mappings,identity swizzle>>.
1586Only the pname:r component of the sampled image value is defined and the
1587other component values are undefined:.
1588If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction
1589does not apply and image component mapping works as normal.
1590
1591include::{generated}/validity/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.adoc[]
1592--
1593endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
1594
1595ifdef::VK_VERSION_1_1[]
1596[open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs']
1597--
1598The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as:
1599
1600include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryProperties.adoc[]
1601
1602  * pname:sType is a elink:VkStructureType value identifying this structure.
1603  * pname:pNext is `NULL` or a pointer to a structure extending this
1604    structure.
1605
1606// Must have preceding whitespace
1607ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1608ifndef::VK_VERSION_1_2[:anchor-prefix:]
1609// tag::VK_KHR_protected_memory-properties[]
1610  * [[{anchor-prefix}limits-protectedNoFault]] pname:protectedNoFault
1611    specifies how an implementation behaves when an application attempts to
1612    write to unprotected memory in a protected queue operation, read from
1613    protected memory in an unprotected queue operation, or perform a query
1614    in a protected queue operation.
1615    If this limit is ename:VK_TRUE, such writes will be discarded or have
1616    undefined: values written, reads and queries will return undefined:
1617    values.
1618    If this limit is ename:VK_FALSE, applications must: not perform these
1619    operations.
1620    See <<memory-protected-access-rules>> for more information.
1621// end::VK_KHR_protected_memory-properties[]
1622
1623:refpage: VkPhysicalDeviceProtectedMemoryProperties
1624include::{chapters}/limits.adoc[tag=limits_desc]
1625
1626include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.adoc[]
1627--
1628endif::VK_VERSION_1_1[]
1629
1630ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
1631[open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs']
1632--
1633The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as:
1634
1635include::{generated}/api/structs/VkPhysicalDeviceMaintenance3Properties.adoc[]
1636
1637ifdef::VK_KHR_maintenance3[]
1638or the equivalent
1639
1640include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.adoc[]
1641endif::VK_KHR_maintenance3[]
1642
1643  * pname:sType is a elink:VkStructureType value identifying this structure.
1644  * pname:pNext is `NULL` or a pointer to a structure extending this
1645    structure.
1646
1647// Must have preceding whitespace
1648ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1649ifndef::VK_VERSION_1_2[:anchor-prefix:]
1650// tag::VK_KHR_maintenance3-properties[]
1651  * [[{anchor-prefix}limits-maxPerSetDescriptors]]
1652    pname:maxPerSetDescriptors is a maximum number of descriptors (summed
1653    over all descriptor types) in a single descriptor set that is guaranteed
1654    to satisfy any implementation-dependent constraints on the size of a
1655    descriptor set itself.
1656    Applications can: query whether a descriptor set that goes beyond this
1657    limit is supported using flink:vkGetDescriptorSetLayoutSupport.
1658  * [[{anchor-prefix}limits-maxMemoryAllocationSize]]
1659    pname:maxMemoryAllocationSize is the maximum size of a memory allocation
1660    that can: be created, even if there is more space available in the heap.
1661// end::VK_KHR_maintenance3-properties[]
1662
1663:refpage: VkPhysicalDeviceMaintenance3Properties
1664include::{chapters}/limits.adoc[tag=limits_desc]
1665
1666include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.adoc[]
1667--
1668endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
1669
1670ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
1671[open,refpage='VkPhysicalDeviceMaintenance4Properties',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs',alias='VkPhysicalDeviceMaintenance4PropertiesKHR']
1672--
1673The sname:VkPhysicalDeviceMaintenance4Properties structure is defined as:
1674
1675include::{generated}/api/structs/VkPhysicalDeviceMaintenance4Properties.adoc[]
1676
1677ifdef::VK_KHR_maintenance4[]
1678or the equivalent
1679
1680include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.adoc[]
1681endif::VK_KHR_maintenance4[]
1682
1683  * pname:sType is a elink:VkStructureType value identifying this structure.
1684  * pname:pNext is `NULL` or a pointer to a structure extending this
1685    structure.
1686
1687// Must have preceding whitespace
1688ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
1689ifndef::VK_VERSION_1_3[:anchor-prefix:]
1690// tag::VK_KHR_maintenance4-properties[]
1691  * [[{anchor-prefix}limits-maxBufferSize]] pname:maxBufferSize is the
1692    maximum size sname:VkBuffer that can: be created.
1693// end::VK_KHR_maintenance4-properties[]
1694
1695:refpage: VkPhysicalDeviceMaintenance4Properties
1696include::{chapters}/limits.adoc[tag=limits_desc]
1697
1698include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4Properties.adoc[]
1699--
1700endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
1701
1702ifdef::VK_KHR_maintenance5[]
1703[open,refpage='VkPhysicalDeviceMaintenance5PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance5',type='structs',alias='VkPhysicalDeviceMaintenance5PropertiesKHR']
1704--
1705The sname:VkPhysicalDeviceMaintenance5PropertiesKHR structure is defined as:
1706
1707include::{generated}/api/structs/VkPhysicalDeviceMaintenance5PropertiesKHR.adoc[]
1708
1709  * pname:sType is a elink:VkStructureType value identifying this structure.
1710  * pname:pNext is `NULL` or a pointer to a structure extending this
1711    structure.
1712  * pname:earlyFragmentMultisampleCoverageAfterSampleCounting is a boolean
1713    value indicating whether the <<fragops-shader,fragment shading>> and
1714    <<fragops-covg, multisample coverage>> operations are performed after
1715    <<fragops-samplecount, sample counting>> for <<fragops-shader, fragment
1716    shaders>> with code:EarlyFragmentTests execution mode.
1717  * pname:earlyFragmentSampleMaskTestBeforeSampleCounting is a boolean value
1718    indicating whether the <<fragops-samplemask,sample mask test>> operation
1719    is performed before <<fragops-samplecount, sample counting>> for
1720    <<fragops-shader, fragment shaders>> using the code:EarlyFragmentTests
1721    execution mode.
1722  * pname:depthStencilSwizzleOneSupport is a boolean indicating that
1723    depth/stencil texturing operations with ename:VK_COMPONENT_SWIZZLE_ONE
1724    have defined behavior.
1725  * pname:polygonModePointSize is a boolean value indicating whether the
1726    point size of the final rasterization of polygons with
1727    ename:VK_POLYGON_MODE_POINT is controlled by code:PointSize.
1728  * pname:nonStrictSinglePixelWideLinesUseParallelogram is a boolean value
1729    indicating whether non-strict lines with a width of 1.0 are rasterized
1730    as parallelograms or using Bresenham's algorithm.
1731  * pname:nonStrictWideLinesUseParallelogram is a boolean value indicating
1732    whether non-strict lines with a width greater than 1.0 are rasterized as
1733    parallelograms or using Bresenham's algorithm.
1734
1735:refpage: VkPhysicalDeviceMaintenance5PropertiesKHR
1736include::{chapters}/limits.adoc[tag=limits_desc]
1737
1738include::{generated}/validity/structs/VkPhysicalDeviceMaintenance5PropertiesKHR.adoc[]
1739--
1740endif::VK_KHR_maintenance5[]
1741
1742ifdef::VK_KHR_maintenance6[]
1743[open,refpage='VkPhysicalDeviceMaintenance6PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance6',type='structs',alias='VkPhysicalDeviceMaintenance6PropertiesKHR']
1744--
1745The sname:VkPhysicalDeviceMaintenance6PropertiesKHR structure is defined as:
1746
1747include::{generated}/api/structs/VkPhysicalDeviceMaintenance6PropertiesKHR.adoc[]
1748
1749  * pname:sType is a elink:VkStructureType value identifying this structure.
1750  * pname:pNext is `NULL` or a pointer to a structure extending this
1751    structure.
1752  * pname:blockTexelViewCompatibleMultipleLayers is a boolean value
1753     indicating that an implementation supports creating image views with
1754     ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT where the
1755     pname:layerCount member of pname:subresourceRange is greater than `1`.
1756  * pname:maxCombinedImageSamplerDescriptorCount is the maximum number of
1757    combined image sampler descriptors that the implementation uses to
1758    access any of the <<formats-requiring-sampler-ycbcr-conversion, formats
1759    that require a sampler {YCbCr} conversion>> supported by the
1760    implementation.
1761  * pname:fragmentShadingRateClampCombinerInputs is a boolean value
1762    indicating that an implementation clamps the inputs to
1763    <<primsrast-fragment-shading-rate-combining, combiner operations>>.
1764
1765:refpage: VkPhysicalDeviceMaintenance6PropertiesKHR
1766include::{chapters}/limits.adoc[tag=limits_desc]
1767
1768include::{generated}/validity/structs/VkPhysicalDeviceMaintenance6PropertiesKHR.adoc[]
1769--
1770endif::VK_KHR_maintenance6[]
1771
1772ifdef::VK_NV_mesh_shader[]
1773[open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs']
1774--
1775The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as:
1776
1777include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.adoc[]
1778
1779  * pname:sType is a elink:VkStructureType value identifying this structure.
1780  * pname:pNext is `NULL` or a pointer to a structure extending this
1781    structure.
1782  * pname:maxDrawMeshTasksCount is the maximum number of local workgroups
1783    that can: be launched by a single draw mesh tasks command.
1784    See <<drawing-mesh-shading>>.
1785  * pname:maxTaskWorkGroupInvocations is the maximum total number of task
1786    shader invocations in a single local workgroup.
1787    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
1788ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
1789    execution mode in shader modules or by the object decorated by the
1790    code:WorkgroupSize decoration, must: be less than or equal to this
1791    limit.
1792  * pname:maxTaskWorkGroupSize[3] is the maximum size of a local task
1793    workgroup.
1794    These three values represent the maximum local workgroup size in the X,
1795    Y, and Z dimensions, respectively.
1796    The pname:x, pname:y, and pname:z sizes, as specified by the
1797    code:LocalSize
1798ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
1799    execution mode or by the object decorated by the code:WorkgroupSize
1800    decoration in shader modules, must: be less than or equal to the
1801    corresponding limit.
1802  * pname:maxTaskTotalMemorySize is the maximum number of bytes that the
1803    task shader can use in total for shared and output memory combined.
1804  * pname:maxTaskOutputCount is the maximum number of output tasks a single
1805    task shader workgroup can emit.
1806  * pname:maxMeshWorkGroupInvocations is the maximum total number of mesh
1807    shader invocations in a single local workgroup.
1808    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
1809ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
1810    execution mode in shader modules or by the object decorated by the
1811    code:WorkgroupSize decoration, must: be less than or equal to this
1812    limit.
1813  * pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh
1814    workgroup.
1815    These three values represent the maximum local workgroup size in the X,
1816    Y, and Z dimensions, respectively.
1817    The pname:x, pname:y, and pname:z sizes, as specified by the
1818    code:LocalSize
1819ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
1820    execution mode or by the object decorated by the code:WorkgroupSize
1821    decoration in shader modules, must: be less than or equal to the
1822    corresponding limit.
1823  * pname:maxMeshTotalMemorySize is the maximum number of bytes that the
1824    mesh shader can use in total for shared and output memory combined.
1825  * pname:maxMeshOutputVertices is the maximum number of vertices a mesh
1826    shader output can store.
1827  * pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh
1828    shader output can store.
1829  * pname:maxMeshMultiviewViewCount is the maximum number of multiview views
1830    a mesh shader can use.
1831  * pname:meshOutputPerVertexGranularity is the granularity with which mesh
1832    vertex outputs are allocated.
1833    The value can be used to compute the memory size used by the mesh
1834    shader, which must be less than or equal to
1835    pname:maxMeshTotalMemorySize.
1836  * pname:meshOutputPerPrimitiveGranularity is the granularity with which
1837    mesh outputs qualified as per-primitive are allocated.
1838    The value can be used to compute the memory size used by the mesh
1839    shader, which must be less than or equal to
1840    pname:maxMeshTotalMemorySize.
1841
1842:refpage: VkPhysicalDeviceMeshShaderPropertiesNV
1843include::{chapters}/limits.adoc[tag=limits_desc]
1844
1845include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.adoc[]
1846--
1847endif::VK_NV_mesh_shader[]
1848
1849ifdef::VK_EXT_mesh_shader[]
1850
1851[open,refpage='VkPhysicalDeviceMeshShaderPropertiesEXT',desc='Structure describing mesh shading properties',type='structs']
1852--
1853The sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure is defined as:
1854
1855include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesEXT.adoc[]
1856
1857The members of the sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure
1858describe the following implementation-dependent limits:
1859
1860  * pname:sType is a elink:VkStructureType value identifying this structure.
1861  * pname:pNext is `NULL` or a pointer to a structure extending this
1862    structure.
1863  * [[limits-maxTaskWorkGroupTotalCount]] pname:maxTaskWorkGroupTotalCount
1864    is the maximum number of total local workgroups that can: be launched by
1865    a single mesh tasks drawing command.
1866    See <<drawing-mesh-shading>>.
1867  * [[limits-maxTaskWorkGroupCount]] pname:maxTaskWorkGroupCount[3] is the
1868    maximum number of local workgroups that can: be launched by a single
1869    mesh tasks drawing command.
1870    These three values represent the maximum number of local workgroups for
1871    the X, Y, and Z dimensions, respectively.
1872    The workgroup count parameters to the drawing commands must: be less
1873    than or equal to the corresponding limit.
1874    The product of these dimensions must: be less than or equal to
1875    pname:maxTaskWorkGroupTotalCount.
1876  * [[limits-maxTaskWorkGroupInvocations]] pname:maxTaskWorkGroupInvocations
1877    is the maximum total number of task shader invocations in a single local
1878    workgroup.
1879    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
1880ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1881    execution mode in shader modules or by the object decorated by the
1882    code:WorkgroupSize decoration, must: be less than or equal to this
1883    limit.
1884  * [[limits-maxTaskWorkGroupSize]] pname:maxTaskWorkGroupSize[3] is the
1885    maximum size of a local task workgroup, per dimension.
1886    These three values represent the maximum local workgroup size in the X,
1887    Y, and Z dimensions, respectively.
1888    The pname:x, pname:y, and pname:z sizes, as specified by the
1889    code:LocalSize
1890ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1891    execution mode or by the object decorated by the code:WorkgroupSize
1892    decoration in shader modules, must: be less than or equal to the
1893    corresponding limit.
1894  * [[limits-maxTaskPayloadSize]] pname:maxTaskPayloadSize is the maximum
1895    total storage size, in bytes, available for variables declared with the
1896    code:TaskPayloadWorkgroupEXT storage class in shader modules in the task
1897    shader stage.
1898  * [[limits-maxTaskSharedMemorySize]] pname:maxTaskSharedMemorySize is the
1899    maximum total storage size, in bytes, available for variables declared
1900    with the code:Workgroup storage class in shader modules in the task
1901    shader stage.
1902  * [[limits-maxTaskPayloadAndSharedMemorySize]]
1903    pname:maxTaskPayloadAndSharedMemorySize is the maximum total storage
1904    size, in bytes, available for variables that are declared with the
1905    code:TaskPayloadWorkgroupEXT or code:Workgroup storage class, in shader
1906    modules in the task shader stage.
1907  * [[limits-maxMeshWorkGroupTotalCount]] pname:maxMeshWorkGroupTotalCount
1908    is the maximum number of local output tasks a single task shader
1909    workgroup can emit.
1910  * [[limits-maxMeshWorkGroupCount]] pname:maxMeshWorkGroupCount[3] is the
1911    maximum number of local output tasks a single task shader workgroup can
1912    emit, per dimension.
1913    These three values represent the maximum number of local output tasks
1914    for the X, Y, and Z dimensions, respectively.
1915    The workgroup count parameters to the code:OpEmitMeshTasksEXT must: be
1916    less than or equal to the corresponding limit.
1917    The product of these dimensions must: be less than or equal to
1918    pname:maxMeshWorkGroupTotalCount.
1919  * [[limits-maxMeshWorkGroupInvocations]] pname:maxMeshWorkGroupInvocations
1920    is the maximum total number of mesh shader invocations in a single local
1921    workgroup.
1922    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
1923ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1924    execution mode in shader modules or by the object decorated by the
1925    code:WorkgroupSize decoration, must: be less than or equal to this
1926    limit.
1927  * [[limits-maxMeshWorkGroupSize]] pname:maxMeshWorkGroupSize[3] is the
1928    maximum size of a local mesh workgroup, per dimension.
1929    These three values represent the maximum local workgroup size in the X,
1930    Y, and Z dimensions, respectively.
1931    The pname:x, pname:y, and pname:z sizes, as specified by the
1932    code:LocalSize
1933ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1934    execution mode or by the object decorated by the code:WorkgroupSize
1935    decoration in shader modules, must: be less than or equal to the
1936    corresponding limit.
1937  * [[limits-maxMeshSharedMemorySize]] pname:maxMeshSharedMemorySize is the
1938    maximum total storage size, in bytes, available for variables declared
1939    with the code:Workgroup storage class in shader modules in the mesh
1940    shader stage.
1941  * [[limits-maxMeshPayloadAndSharedMemorySize]]
1942    pname:maxMeshPayloadAndSharedMemorySize is the maximum total storage
1943    size, in bytes, available for variables that are declared with the
1944    code:TaskPayloadWorkgroupEXT or code:Workgroup storage class in shader
1945    modules in the mesh shader stage.
1946  * [[limits-maxMeshOutputMemorySize]] pname:maxMeshOutputMemorySize is the
1947    maximum total storage size, in bytes, available for output variables in
1948    shader modules in the mesh shader stage, according to the formula in
1949    <<mesh-output, Mesh Shader Output>>.
1950  * [[limits-maxMeshPayloadAndOutputMemorySize]]
1951    pname:maxMeshPayloadAndOutputMemorySize is the maximum total storage
1952    size, in bytes, available for variables that are declared with the
1953    code:TaskPayloadWorkgroupEXT storage class, or output variables in
1954    shader modules in the mesh shader stage, according to the formula in
1955    <<mesh-output, Mesh Shader Output>>.
1956  * [[limits-maxMeshOutputComponents]] pname:maxMeshOutputComponents is the
1957    maximum number of components of output variables which can: be output
1958    from the mesh shader stage.
1959  * [[limits-maxMeshOutputVertices]] pname:maxMeshOutputVertices is the
1960    maximum number of vertices which can: be emitted by a single mesh shader
1961    workgroup.
1962  * [[limits-maxMeshOutputPrimitives]] pname:maxMeshOutputPrimitives is the
1963    maximum number of primitives which can: be emitted by a single mesh
1964    shader workgroup.
1965  * [[limits-maxMeshOutputLayers]] pname:maxMeshOutputLayers is one greater
1966    than the maximum layer index that can: be output from the mesh shader
1967    stage.
1968  * [[limits-maxMeshMultiviewViewCount]] pname:maxMeshMultiviewViewCount is
1969    one greater than the maximum view index that can: be used by any mesh
1970    shader.
1971  * [[limits-meshOutputPerVertexGranularity]]
1972    pname:meshOutputPerVertexGranularity is the granularity of vertex
1973    allocation.
1974    The number of output vertices allocated for the mesh shader stage is
1975    padded to a multiple of this number.
1976    The value can be used to calculate the required storage size for output
1977    variables in shader modules in the mesh shader stage, which must: be
1978    less than or equal to pname:maxMeshOutputMemorySize.
1979  * [[limits-meshOutputPerPrimitiveGranularity]]
1980    pname:meshOutputPerPrimitiveGranularity is the granularity of primitive
1981    allocation.
1982    The number of output primitives allocated for the mesh shader stage is
1983    padded to a multiple of this number.
1984    The value can be used to calculate the required storage size for output
1985    variables in shader modules in the mesh shader stage, which must: be
1986    less than or equal to pname:maxMeshOutputMemorySize.
1987  * [[limits-maxPreferredTaskWorkGroupInvocations]]
1988    pname:maxPreferredTaskWorkGroupInvocations is the maximum number of task
1989    shader invocations in a single workgroup that is preferred by the
1990    implementation for optimal performance.
1991    The value is guaranteed to be a multiple of a supported subgroup size
1992    for the task shader stage.
1993  * [[limits-maxPreferredMeshWorkGroupInvocations]]
1994    pname:maxPreferredMeshWorkGroupInvocations is the maximum number of mesh
1995    shader invocations in a single workgroup that is preferred by the
1996    implementation for optimal performance.
1997    The value is guaranteed to be a multiple of a supported subgroup size
1998    for the mesh shader stage.
1999  * [[limits-prefersLocalInvocationVertexOutput]]
2000    pname:prefersLocalInvocationVertexOutput specifies whether writes to the
2001    vertex output array in a mesh shader yield best performance when the
2002    array index matches code:LocalInvocationIndex.
2003  * [[limits-prefersLocalInvocationPrimitiveOutput]]
2004    pname:prefersLocalInvocationPrimitiveOutput specifies whether writes to
2005    the primitive output array in a mesh shader yield best performance when
2006    the array index matches code:LocalInvocationIndex.
2007  * [[limits-prefersCompactVertexOutput]] pname:prefersCompactVertexOutput
2008    specifies whether output vertices should be compacted after custom
2009    culling in the mesh shader for best performance, otherwise keeping the
2010    vertices at their original location may be better.
2011  * [[limits-prefersCompactPrimitiveOutput]]
2012    pname:prefersCompactPrimitiveOutput specifies whether output primitives
2013    should be compacted after custom culling in the mesh shader for best
2014    performance, otherwise the use of code:CullPrimitiveEXT may be better.
2015
2016If the sname:VkPhysicalDeviceMeshShaderPropertiesEXT structure is included
2017in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it is filled
2018with the implementation-dependent limits.
2019
2020include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesEXT.adoc[]
2021--
2022
2023endif::VK_EXT_mesh_shader[]
2024
2025ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2026[open,refpage='VkPhysicalDeviceDescriptorIndexingProperties',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingPropertiesEXT']
2027--
2028The sname:VkPhysicalDeviceDescriptorIndexingProperties structure is defined
2029as:
2030
2031include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingProperties.adoc[]
2032
2033ifdef::VK_EXT_descriptor_indexing[]
2034or the equivalent
2035
2036include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.adoc[]
2037endif::VK_EXT_descriptor_indexing[]
2038
2039  * pname:sType is a elink:VkStructureType value identifying this structure.
2040  * pname:pNext is `NULL` or a pointer to a structure extending this
2041    structure.
2042
2043// Must have preceding whitespace
2044ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
2045ifndef::VK_VERSION_1_2[:anchor-prefix:]
2046// tag::VK_EXT_descriptor_indexing-properties[]
2047  * [[{anchor-prefix}limits-maxUpdateAfterBindDescriptorsInAllPools]]
2048    pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of
2049    descriptors (summed over all descriptor types) that can: be created
2050    across all pools that are created with the
2051    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set.
2052    Pool creation may: fail when this limit is exceeded, or when the space
2053    this limit represents is unable to satisfy a pool creation due to
2054    fragmentation.
2055  * [[{anchor-prefix}limits-shaderUniformBufferArrayNonUniformIndexingNative]]
2056    pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean
2057    value indicating whether uniform buffer descriptors natively support
2058    nonuniform indexing.
2059    If this is ename:VK_FALSE, then a single dynamic instance of an
2060    instruction that nonuniformly indexes an array of uniform buffers may:
2061    execute multiple times in order to access all the descriptors.
2062  * [[{anchor-prefix}limits-shaderSampledImageArrayNonUniformIndexingNative]]
2063    pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value
2064    indicating whether sampler and image descriptors natively support
2065    nonuniform indexing.
2066    If this is ename:VK_FALSE, then a single dynamic instance of an
2067    instruction that nonuniformly indexes an array of samplers or images
2068    may: execute multiple times in order to access all the descriptors.
2069  * [[{anchor-prefix}limits-shaderStorageBufferArrayNonUniformIndexingNative]]
2070    pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean
2071    value indicating whether storage buffer descriptors natively support
2072    nonuniform indexing.
2073    If this is ename:VK_FALSE, then a single dynamic instance of an
2074    instruction that nonuniformly indexes an array of storage buffers may:
2075    execute multiple times in order to access all the descriptors.
2076  * [[{anchor-prefix}limits-shaderStorageImageArrayNonUniformIndexingNative]]
2077    pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value
2078    indicating whether storage image descriptors natively support nonuniform
2079    indexing.
2080    If this is ename:VK_FALSE, then a single dynamic instance of an
2081    instruction that nonuniformly indexes an array of storage images may:
2082    execute multiple times in order to access all the descriptors.
2083  * [[{anchor-prefix}limits-shaderInputAttachmentArrayNonUniformIndexingNative]]
2084    pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean
2085    value indicating whether input attachment descriptors natively support
2086    nonuniform indexing.
2087    If this is ename:VK_FALSE, then a single dynamic instance of an
2088    instruction that nonuniformly indexes an array of input attachments may:
2089    execute multiple times in order to access all the descriptors.
2090  * [[{anchor-prefix}limits-robustBufferAccessUpdateAfterBind]]
2091    pname:robustBufferAccessUpdateAfterBind is a boolean value indicating
2092    whether <<features-robustBufferAccess, pname:robustBufferAccess>> can:
2093    be enabled on a device simultaneously with
2094    pname:descriptorBindingUniformBufferUpdateAfterBind,
2095    pname:descriptorBindingStorageBufferUpdateAfterBind,
2096    pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or
2097    pname:descriptorBindingStorageTexelBufferUpdateAfterBind.
2098    If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be
2099    disabled or all of these update-after-bind features must: be disabled.
2100  * [[{anchor-prefix}limits-quadDivergentImplicitLod]]
2101    pname:quadDivergentImplicitLod is a boolean value indicating whether
2102    implicit LOD calculations for image operations have well-defined results
2103    when the image and/or sampler objects used for the instruction are not
2104    uniform within a quad.
2105    See <<textures-derivative-image-operations,Derivative Image
2106    Operations>>.
2107  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSamplers]]
2108    pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to
2109    pname:maxPerStageDescriptorSamplers but counts descriptors from
2110    descriptor sets created with or without the
2111    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2112    set.
2113  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]]
2114    pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to
2115    pname:maxPerStageDescriptorUniformBuffers but counts descriptors from
2116    descriptor sets created with or without the
2117    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2118    set.
2119  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]]
2120    pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to
2121    pname:maxPerStageDescriptorStorageBuffers but counts descriptors from
2122    descriptor sets created with or without the
2123    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2124    set.
2125  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSampledImages]]
2126    pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to
2127    pname:maxPerStageDescriptorSampledImages but counts descriptors from
2128    descriptor sets created with or without the
2129    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2130    set.
2131  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageImages]]
2132    pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to
2133    pname:maxPerStageDescriptorStorageImages but counts descriptors from
2134    descriptor sets created with or without the
2135    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2136    set.
2137  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]]
2138    pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to
2139    pname:maxPerStageDescriptorInputAttachments but counts descriptors from
2140    descriptor sets created with or without the
2141    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2142    set.
2143  * [[{anchor-prefix}limits-maxPerStageUpdateAfterBindResources]]
2144    pname:maxPerStageUpdateAfterBindResources is similar to
2145    pname:maxPerStageResources but counts descriptors from descriptor sets
2146    created with or without the
2147    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2148    set.
2149  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSamplers]]
2150    pname:maxDescriptorSetUpdateAfterBindSamplers is similar to
2151    pname:maxDescriptorSetSamplers but counts descriptors from descriptor
2152    sets created with or without the
2153    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2154    set.
2155  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffers]]
2156    pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to
2157    pname:maxDescriptorSetUniformBuffers but counts descriptors from
2158    descriptor sets created with or without the
2159    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2160    set.
2161  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]]
2162    pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to
2163    pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from
2164    descriptor sets created with or without the
2165    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2166    set.
2167    While an application can: allocate dynamic uniform buffer descriptors
2168    from a pool created with the
2169    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
2170    bindings for these descriptors must: not be present in any descriptor
2171    set layout that includes bindings created with
2172    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
2173  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffers]]
2174    pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to
2175    pname:maxDescriptorSetStorageBuffers but counts descriptors from
2176    descriptor sets created with or without the
2177    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2178    set.
2179  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]]
2180    pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to
2181    pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from
2182    descriptor sets created with or without the
2183    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2184    set.
2185    While an application can: allocate dynamic storage buffer descriptors
2186    from a pool created with the
2187    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
2188    bindings for these descriptors must: not be present in any descriptor
2189    set layout that includes bindings created with
2190    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
2191  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSampledImages]]
2192    pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to
2193    pname:maxDescriptorSetSampledImages but counts descriptors from
2194    descriptor sets created with or without the
2195    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2196    set.
2197  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageImages]]
2198    pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to
2199    pname:maxDescriptorSetStorageImages but counts descriptors from
2200    descriptor sets created with or without the
2201    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2202    set.
2203  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInputAttachments]]
2204    pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to
2205    pname:maxDescriptorSetInputAttachments but counts descriptors from
2206    descriptor sets created with or without the
2207    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2208    set.
2209// end::VK_EXT_descriptor_indexing-properties[]
2210
2211:refpage: VkPhysicalDeviceDescriptorIndexingProperties
2212include::{chapters}/limits.adoc[tag=limits_desc]
2213
2214include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.adoc[]
2215--
2216endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2217
2218ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
2219[open,refpage='VkPhysicalDeviceInlineUniformBlockProperties',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceInlineUniformBlockPropertiesEXT']
2220--
2221The sname:VkPhysicalDeviceInlineUniformBlockProperties structure is defined
2222as:
2223
2224include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockProperties.adoc[]
2225
2226ifdef::VK_EXT_inline_uniform_block[]
2227or the equivalent
2228
2229include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.adoc[]
2230endif::VK_EXT_inline_uniform_block[]
2231
2232  * pname:sType is a elink:VkStructureType value identifying this structure.
2233  * pname:pNext is `NULL` or a pointer to a structure extending this
2234    structure.
2235
2236// Must have preceding whitespace
2237ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
2238ifndef::VK_VERSION_1_3[:anchor-prefix:]
2239// tag::VK_EXT_inline_uniform_block-properties[]
2240  * [[{anchor-prefix}limits-maxInlineUniformBlockSize]]
2241    pname:maxInlineUniformBlockSize is the maximum size in bytes of an
2242    <<descriptorsets-inlineuniformblock, inline uniform block>> binding.
2243  * [[{anchor-prefix}limits-maxPerStageDescriptorInlineUniformBlocks]]
2244    pname:maxPerStageDescriptorInlineUniformBlocks is the maximum number of
2245    inline uniform block bindings that can: be accessible to a single shader
2246    stage in a pipeline layout.
2247    Descriptor bindings with a descriptor type of
2248    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit.
2249ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2250    Only descriptor bindings in descriptor set layouts created without the
2251    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2252    count against this limit.
2253endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2254  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]]
2255    pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
2256ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2257    equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved
2258    for future use.
2259endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2260ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2261    is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts
2262    descriptor bindings from descriptor sets created with or without the
2263    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2264    set.
2265endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2266  * [[{anchor-prefix}limits-maxDescriptorSetInlineUniformBlocks]]
2267    pname:maxDescriptorSetInlineUniformBlocks is the maximum number of
2268    inline uniform block bindings that can: be included in descriptor
2269    bindings in a pipeline layout across all pipeline shader stages and
2270    descriptor set numbers.
2271    Descriptor bindings with a descriptor type of
2272    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK count against this limit.
2273ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2274    Only descriptor bindings in descriptor set layouts created without the
2275    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2276    count against this limit.
2277endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2278  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]]
2279    pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
2280ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2281    equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for
2282    future use.
2283endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2284ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2285    is similar to pname:maxDescriptorSetInlineUniformBlocks but counts
2286    descriptor bindings from descriptor sets created with or without the
2287    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2288    set.
2289endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
2290// end::VK_EXT_inline_uniform_block-properties[]
2291
2292:refpage: VkPhysicalDeviceInlineUniformBlockProperties
2293include::{chapters}/limits.adoc[tag=limits_desc]
2294
2295include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockProperties.adoc[]
2296--
2297endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
2298
2299ifdef::VK_EXT_conservative_rasterization[]
2300[open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs']
2301--
2302The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure
2303is defined as:
2304
2305include::{generated}/api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.adoc[]
2306
2307  * pname:sType is a elink:VkStructureType value identifying this structure.
2308  * pname:pNext is `NULL` or a pointer to a structure extending this
2309    structure.
2310  * [[limits-primitiveOverestimationSize]] pname:primitiveOverestimationSize
2311    is the size in pixels the generating primitive is increased at each of
2312    its edges during conservative rasterization overestimation mode.
2313    Even with a size of 0.0, conservative rasterization overestimation rules
2314    still apply and if any part of the pixel rectangle is covered by the
2315    generating primitive, fragments are generated for the entire pixel.
2316    However implementations may: make the pixel coverage area even more
2317    conservative by increasing the size of the generating primitive.
2318  * [[limits-maxExtraPrimitiveOverestimationSize]]
2319    pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels
2320    of extra overestimation the implementation supports in the pipeline
2321    state.
2322    A value of 0.0 means the implementation does not support any additional
2323    overestimation of the generating primitive during conservative
2324    rasterization.
2325    A value above 0.0 allows the application to further increase the size of
2326    the generating primitive during conservative rasterization
2327    overestimation.
2328  * [[limits-extraPrimitiveOverestimationSizeGranularity]]
2329    pname:extraPrimitiveOverestimationSizeGranularity is the granularity of
2330    extra overestimation that can be specified in the pipeline state between
2331    0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive.
2332    A value of 0.0 means the implementation can use the smallest
2333    representable non-zero value in the screen space pixel fixed-point grid.
2334  * [[limits-primitiveUnderestimation]] pname:primitiveUnderestimation is
2335    ename:VK_TRUE if the implementation supports the
2336    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative
2337    rasterization mode in addition to
2338    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
2339    Otherwise the implementation only supports
2340    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
2341  * [[limits-conservativePointAndLineRasterization]]
2342    pname:conservativePointAndLineRasterization is ename:VK_TRUE if the
2343    implementation supports conservative rasterization of point and line
2344    primitives as well as triangle primitives.
2345    Otherwise the implementation only supports triangle primitives.
2346  * [[limits-degenerateTrianglesRasterized]]
2347    pname:degenerateTrianglesRasterized is ename:VK_FALSE if the
2348    implementation culls primitives generated from triangles that become
2349    zero area after they are quantized to the fixed-point rasterization
2350    pixel grid.
2351    pname:degenerateTrianglesRasterized is ename:VK_TRUE if these primitives
2352    are not culled and the provoking vertex attributes and depth value are
2353    used for the fragments.
2354    The primitive area calculation is done on the primitive generated from
2355    the clipped triangle if applicable.
2356    Zero area primitives are backfacing and the application can: enable
2357    backface culling if desired.
2358  * [[limits-degenerateLinesRasterized]] pname:degenerateLinesRasterized is
2359    ename:VK_FALSE if the implementation culls lines that become zero length
2360    after they are quantized to the fixed-point rasterization pixel grid.
2361    pname:degenerateLinesRasterized is ename:VK_TRUE if zero length lines
2362    are not culled and the provoking vertex attributes and depth value are
2363    used for the fragments.
2364  * [[limits-fullyCoveredFragmentShaderInputVariable]]
2365    pname:fullyCoveredFragmentShaderInputVariable is ename:VK_TRUE if the
2366    implementation supports the SPIR-V builtin fragment shader input
2367    variable code:FullyCoveredEXT specifying that conservative rasterization
2368    is enabled and the fragment area is fully covered by the generating
2369    primitive.
2370  * [[limits-conservativeRasterizationPostDepthCoverage]]
2371ifdef::VK_EXT_post_depth_coverage[]
2372    pname:conservativeRasterizationPostDepthCoverage is ename:VK_TRUE if the
2373    implementation supports conservative rasterization with the
2374    code:PostDepthCoverage execution mode enabled.
2375    Otherwise the code:PostDepthCoverage execution mode must: not be used
2376    when conservative rasterization is enabled.
2377endif::VK_EXT_post_depth_coverage[]
2378ifndef::VK_EXT_post_depth_coverage[]
2379    pname:conservativeRasterizationPostDepthCoverage must: be
2380    ename:VK_FALSE.
2381endif::VK_EXT_post_depth_coverage[]
2382
2383:refpage: VkPhysicalDeviceConservativeRasterizationPropertiesEXT
2384include::{chapters}/limits.adoc[tag=limits_desc]
2385
2386include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.adoc[]
2387--
2388endif::VK_EXT_conservative_rasterization[]
2389
2390ifdef::VK_EXT_fragment_density_map[]
2391[open,refpage='VkPhysicalDeviceFragmentDensityMapPropertiesEXT',desc='Structure describing fragment density map properties that can be supported by an implementation',type='structs']
2392--
2393The sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT structure is
2394defined as:
2395
2396include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.adoc[]
2397
2398  * pname:sType is a elink:VkStructureType value identifying this structure.
2399  * pname:pNext is `NULL` or a pointer to a structure extending this
2400    structure.
2401  * [[limits-minFragmentDensityTexelSize]] pname:minFragmentDensityTexelSize
2402    is the minimum <<glossary-fragment-density-texel-size,fragment density
2403    texel size>>.
2404  * [[limits-maxFragmentDensityTexelSize]] pname:maxFragmentDensityTexelSize
2405    is the maximum fragment density texel size.
2406  * [[limits-fragmentDensityInvocations]] pname:fragmentDensityInvocations
2407    specifies whether the implementation may: invoke additional fragment
2408    shader invocations for each covered sample.
2409
2410:refpage: VkPhysicalDeviceFragmentDensityMapPropertiesEXT
2411include::{chapters}/limits.adoc[tag=limits_desc]
2412
2413include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.adoc[]
2414--
2415
2416ifdef::VK_EXT_fragment_density_map2[]
2417[open,refpage='VkPhysicalDeviceFragmentDensityMap2PropertiesEXT',desc='Structure describing additional fragment density map properties that can be supported by an implementation',type='structs']
2418--
2419The sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT structure is
2420defined as:
2421
2422include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.adoc[]
2423
2424  * pname:sType is a elink:VkStructureType value identifying this structure.
2425  * pname:pNext is `NULL` or a pointer to a structure extending this
2426    structure.
2427  * [[limits-subsampledLoads]] pname:subsampledLoads specifies if performing
2428    image data read with load operations on subsampled attachments will be
2429    resampled to the fragment density of the render pass
2430  * [[limits-subsampledCoarseReconstructionEarlyAccess]]
2431    pname:subsampledCoarseReconstructionEarlyAccess specifies if performing
2432    image data read with samplers created with pname:flags containing
2433    ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT in
2434    fragment shader will trigger additional reads during
2435    ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
2436  * [[limits-maxSubsampledArrayLayers]] pname:maxSubsampledArrayLayers is
2437    the maximum number of slink:VkImageView array layers for usages
2438    supporting subsampled samplers
2439  * [[limits-maxDescriptorSetSubsampledSamplers]]
2440    pname:maxDescriptorSetSubsampledSamplers is the maximum number of
2441    subsampled samplers that can: be included in a slink:VkPipelineLayout
2442
2443:refpage: VkPhysicalDeviceFragmentDensityMap2PropertiesEXT
2444include::{chapters}/limits.adoc[tag=limits_desc]
2445
2446include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.adoc[]
2447--
2448endif::VK_EXT_fragment_density_map2[]
2449
2450ifdef::VK_QCOM_fragment_density_map_offset[]
2451[open,refpage='VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM',desc='Structure describing fragment density map offset properties that can be supported by an implementation',type='structs']
2452--
2453The sname:VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM structure
2454is defined as:
2455
2456include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.adoc[]
2457
2458  * pname:sType is a elink:VkStructureType value identifying this structure.
2459  * pname:pNext is `NULL` or a pointer to a structure extending this
2460    structure.
2461  * [[limits-fragmentdensityoffsetgranularity]]
2462    pname:fragmentDensityOffsetGranularity is the granularity for
2463    <<renderpass-fragmentdensitymapoffsets,fragment density offsets>>.
2464
2465:refpage: VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM
2466include::{chapters}/limits.adoc[tag=limits_desc]
2467
2468include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.adoc[]
2469--
2470endif::VK_QCOM_fragment_density_map_offset[]
2471endif::VK_EXT_fragment_density_map[]
2472
2473ifdef::VK_AMD_shader_core_properties[]
2474[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
2475--
2476The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as:
2477
2478include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.adoc[]
2479
2480  * pname:sType is a elink:VkStructureType value identifying this structure.
2481  * pname:pNext is `NULL` or a pointer to a structure extending this
2482    structure.
2483  * [[limits-shaderEngineCount]] pname:shaderEngineCount is an unsigned
2484    integer value indicating the number of shader engines found inside the
2485    shader core of the physical device.
2486  * [[limits-shaderArraysPerEngineCount]] pname:shaderArraysPerEngineCount
2487    is an unsigned integer value indicating the number of shader arrays
2488    inside a shader engine.
2489    Each shader array has its own scan converter, set of compute units, and
2490    a render back end (color and depth attachments).
2491    Shader arrays within a shader engine share shader processor input (wave
2492    launcher) and shader export (export buffer) units.
2493    Currently, a shader engine can have one or two shader arrays.
2494  * [[limits-computeUnitsPerShaderArray]] pname:computeUnitsPerShaderArray
2495    is an unsigned integer value indicating the physical number of compute
2496    units within a shader array.
2497    The active number of compute units in a shader array may: be lower.
2498    A compute unit houses a set of SIMDs along with a sequencer module and a
2499    local data store.
2500  * [[limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an unsigned
2501    integer value indicating the number of SIMDs inside a compute unit.
2502    Each SIMD processes a single instruction at a time.
2503  * [[limits-wavefrontSize]] pname:wavefrontSize is an unsigned integer
2504    value indicating the maximum size of a subgroup.
2505  * [[limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned integer value
2506    indicating the number of physical Scalar General-Purpose Registers
2507    (SGPRs) per SIMD.
2508  * [[limits-minSgprAllocation]] pname:minSgprAllocation is an unsigned
2509    integer value indicating the minimum number of SGPRs allocated for a
2510    wave.
2511  * [[limits-maxSgprAllocation]] pname:maxSgprAllocation is an unsigned
2512    integer value indicating the maximum number of SGPRs allocated for a
2513    wave.
2514  * [[limits-sgprAllocationGranularity]] pname:sgprAllocationGranularity is
2515    an unsigned integer value indicating the granularity of SGPR allocation
2516    for a wave.
2517  * [[limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned integer value
2518    indicating the number of physical Vector General-Purpose Registers
2519    (VGPRs) per SIMD.
2520  * [[limits-minVgprAllocation]] pname:minVgprAllocation is an unsigned
2521    integer value indicating the minimum number of VGPRs allocated for a
2522    wave.
2523  * [[limits-maxVgprAllocation]] pname:maxVgprAllocation is an unsigned
2524    integer value indicating the maximum number of VGPRs allocated for a
2525    wave.
2526  * [[limits-vgprAllocationGranularity]] pname:vgprAllocationGranularity is
2527    an unsigned integer value indicating the granularity of VGPR allocation
2528    for a wave.
2529
2530:refpage: VkPhysicalDeviceShaderCorePropertiesAMD
2531include::{chapters}/limits.adoc[tag=limits_desc]
2532
2533include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.adoc[]
2534--
2535endif::VK_AMD_shader_core_properties[]
2536
2537ifdef::VK_AMD_shader_core_properties2[]
2538[open,refpage='VkPhysicalDeviceShaderCoreProperties2AMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
2539--
2540The sname:VkPhysicalDeviceShaderCoreProperties2AMD structure is defined as:
2541
2542include::{generated}/api/structs/VkPhysicalDeviceShaderCoreProperties2AMD.adoc[]
2543
2544  * pname:sType is a elink:VkStructureType value identifying this structure.
2545  * pname:pNext is `NULL` or a pointer to a structure extending this
2546    structure.
2547  * [[features-shaderCoreFeatures]] pname:shaderCoreFeatures is a bitmask of
2548    elink:VkShaderCorePropertiesFlagBitsAMD indicating the set of features
2549    supported by the shader core.
2550  * [[limits-activeComputeUnitCount]] pname:activeComputeUnitCount is an
2551    unsigned integer value indicating the number of compute units that have
2552    been enabled.
2553
2554:refpage: VkPhysicalDeviceShaderCoreProperties2AMD
2555include::{chapters}/limits.adoc[tag=limits_desc]
2556
2557include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.adoc[]
2558--
2559
2560[open,refpage='VkShaderCorePropertiesFlagBitsAMD',desc='Bitmask specifying shader core properties',type='enums',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagsAMD']
2561--
2562Bits for this type may: be defined by future extensions, or new versions of
2563the `apiext:VK_AMD_shader_core_properties2` extension.
2564Possible values of the pname:flags member of
2565tlink:VkShaderCorePropertiesFlagsAMD are:
2566
2567include::{generated}/api/enums/VkShaderCorePropertiesFlagBitsAMD.adoc[]
2568--
2569
2570[open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD']
2571--
2572include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.adoc[]
2573
2574tname:VkShaderCorePropertiesFlagsAMD is a bitmask type for providing zero or
2575more elink:VkShaderCorePropertiesFlagBitsAMD.
2576--
2577endif::VK_AMD_shader_core_properties2[]
2578
2579ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
2580[open,refpage='VkPhysicalDeviceDepthStencilResolveProperties',desc='Structure describing depth/stencil resolve properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDepthStencilResolvePropertiesKHR']
2581--
2582The sname:VkPhysicalDeviceDepthStencilResolveProperties structure is defined
2583as:
2584
2585include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolveProperties.adoc[]
2586
2587ifdef::VK_KHR_depth_stencil_resolve[]
2588or the equivalent
2589
2590include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.adoc[]
2591endif::VK_KHR_depth_stencil_resolve[]
2592
2593  * pname:sType is a elink:VkStructureType value identifying this structure.
2594  * pname:pNext is `NULL` or a pointer to a structure extending this
2595    structure.
2596
2597// Must have preceding whitespace
2598ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
2599ifndef::VK_VERSION_1_2[:anchor-prefix:]
2600// tag::VK_KHR_depth_stencil_resolve-properties[]
2601  * [[{anchor-prefix}features-depthResolveModes]]
2602    pname:supportedDepthResolveModes is a bitmask of
2603    elink:VkResolveModeFlagBits indicating the set of supported depth
2604    resolve modes.
2605ifdef::VKSC_VERSION_1_0[]
2606    A value of ename:VK_RESOLVE_MODE_NONE indicates that depth resolve
2607    operations are disallowed <<SCID-8>>.
2608    If any bits are set then
2609ifdef::hidden[]
2610// tag::scdeviation[]
2611  * slink:VkPhysicalDeviceVulkan12Properties::pname:supportedDepthResolveModes
2612    may: be only ename:VK_RESOLVE_MODE_NONE <<SCID-8>>.
2613// end::scdeviation[]
2614endif::hidden[]
2615endif::VKSC_VERSION_1_0[]
2616    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
2617    implementations may: support additional modes.
2618  * [[{anchor-prefix}features-stencilResolveModes]]
2619    pname:supportedStencilResolveModes is a bitmask of
2620    elink:VkResolveModeFlagBits indicating the set of supported stencil
2621    resolve modes.
2622ifdef::VKSC_VERSION_1_0[]
2623    A value of ename:VK_RESOLVE_MODE_NONE indicates that stencil resolve
2624    operations are disallowed <<SCID-8>>.
2625    If any bits are set then
2626ifdef::hidden[]
2627// tag::scdeviation[]
2628  * slink:VkPhysicalDeviceVulkan12Properties::pname:supportedStencilResolveModes
2629    may: be only ename:VK_RESOLVE_MODE_NONE <<SCID-8>>.
2630// end::scdeviation[]
2631endif::hidden[]
2632endif::VKSC_VERSION_1_0[]
2633    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
2634    implementations may: support additional modes.
2635    ename:VK_RESOLVE_MODE_AVERAGE_BIT must: not be included in the set.
2636  * [[{anchor-prefix}features-independentResolveNone]]
2637    pname:independentResolveNone is ename:VK_TRUE if the implementation
2638    supports setting the depth and stencil resolve modes to different values
2639    when one of those modes is ename:VK_RESOLVE_MODE_NONE.
2640    Otherwise the implementation only supports setting both modes to the
2641    same value.
2642  * [[{anchor-prefix}features-independentResolve]] pname:independentResolve
2643    is ename:VK_TRUE if the implementation supports all combinations of the
2644    supported depth and stencil resolve modes, including setting either
2645    depth or stencil resolve mode to ename:VK_RESOLVE_MODE_NONE.
2646    An implementation that supports pname:independentResolve must: also
2647    support pname:independentResolveNone.
2648// end::VK_KHR_depth_stencil_resolve-properties[]
2649
2650:refpage: VkPhysicalDeviceDepthStencilResolveProperties
2651include::{chapters}/limits.adoc[tag=limits_desc]
2652
2653include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.adoc[]
2654--
2655endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
2656
2657ifdef::VK_KHR_performance_query[]
2658include::{chapters}/VK_KHR_performance_query/props.adoc[]
2659endif::VK_KHR_performance_query[]
2660
2661ifdef::VK_NV_shading_rate_image[]
2662[open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs']
2663--
2664The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined
2665as:
2666
2667include::{generated}/api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.adoc[]
2668
2669  * pname:sType is a elink:VkStructureType value identifying this structure.
2670  * pname:pNext is `NULL` or a pointer to a structure extending this
2671    structure.
2672  * [[limits-shadingRateTexelSize]] pname:shadingRateTexelSize indicates the
2673    width and height of the portion of the framebuffer corresponding to each
2674    texel in the shading rate image.
2675  * [[limits-shadingRatePaletteSize]] pname:shadingRatePaletteSize indicates
2676    the maximum number of palette entries supported for the shading rate
2677    image.
2678  * [[limits-shadingRateMaxCoarseSamples]] pname:shadingRateMaxCoarseSamples
2679    specifies the maximum number of coverage samples supported in a single
2680    fragment.
2681    If the product of the fragment size derived from the base shading rate
2682    and the number of coverage samples per pixel exceeds this limit, the
2683    final shading rate will be adjusted so that its product does not exceed
2684    the limit.
2685
2686:refpage: VkPhysicalDeviceShadingRateImagePropertiesNV
2687include::{chapters}/limits.adoc[tag=limits_desc]
2688
2689These properties are related to the <<primsrast-shading-rate-image, shading
2690rate image>> feature.
2691
2692include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.adoc[]
2693--
2694endif::VK_NV_shading_rate_image[]
2695
2696ifdef::VK_NV_memory_decompression[]
2697[open,refpage='VkPhysicalDeviceMemoryDecompressionPropertiesNV',desc='Structure describing supported memory decompression methods by an implementation',type='structs']
2698--
2699The sname:VkPhysicalDeviceMemoryDecompressionPropertiesNV structure is
2700defined as:
2701
2702include::{generated}/api/structs/VkPhysicalDeviceMemoryDecompressionPropertiesNV.adoc[]
2703
2704  * pname:sType is a elink:VkStructureType value identifying this structure.
2705  * pname:pNext is `NULL` or a pointer to a structure extending this
2706    structure.
2707  * pname:decompressionMethods is a bitmask of
2708    elink:VkMemoryDecompressionMethodFlagBitsNV specifying memory
2709    decompression methods supported by the implementation.
2710  * pname:maxDecompressionIndirectCount specifies the maximum supported
2711    count value in the pname:countBuffer of
2712    flink:vkCmdDecompressMemoryIndirectCountNV
2713
2714:refpage: VkPhysicalDeviceMemoryDecompressionPropertiesNV
2715include::{chapters}/limits.adoc[tag=limits_desc]
2716
2717include::{generated}/validity/structs/VkPhysicalDeviceMemoryDecompressionPropertiesNV.adoc[]
2718--
2719endif::VK_NV_memory_decompression[]
2720
2721ifdef::VK_EXT_transform_feedback[]
2722[open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs']
2723--
2724The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is
2725defined as:
2726
2727include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.adoc[]
2728
2729  * pname:sType is a elink:VkStructureType value identifying this structure.
2730  * pname:pNext is `NULL` or a pointer to a structure extending this
2731    structure.
2732  * [[limits-maxTransformFeedbackStreams]] pname:maxTransformFeedbackStreams
2733    is the maximum number of vertex streams that can be output from geometry
2734    shaders declared with the code:GeometryStreams capability.
2735    If the implementation does not support
2736    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
2737    then pname:maxTransformFeedbackStreams must: be set to `1`.
2738  * [[limits-maxTransformFeedbackBuffers]] pname:maxTransformFeedbackBuffers
2739    is the maximum number of transform feedback buffers that can be bound
2740    for capturing shader outputs from the last
2741    <<pipelines-graphics-subsets-pre-rasterization,pre-rasterization shader
2742    stage>>.
2743  * [[limits-maxTransformFeedbackBufferSize]]
2744    pname:maxTransformFeedbackBufferSize is the maximum size that can be
2745    specified when binding a buffer for transform feedback in
2746    flink:vkCmdBindTransformFeedbackBuffersEXT.
2747  * [[limits-maxTransformFeedbackStreamDataSize]]
2748    pname:maxTransformFeedbackStreamDataSize is the maximum amount of data
2749    in bytes for each vertex that captured to one or more transform feedback
2750    buffers associated with a specific vertex stream.
2751  * [[limits-maxTransformFeedbackBufferDataSize]]
2752    pname:maxTransformFeedbackBufferDataSize is the maximum amount of data
2753    in bytes for each vertex that can be captured to a specific transform
2754    feedback buffer.
2755  * [[limits-maxTransformFeedbackBufferDataStride]]
2756    pname:maxTransformFeedbackBufferDataStride is the maximum stride between
2757    each capture of vertex data to the buffer.
2758  * [[limits-transformFeedbackQueries]] pname:transformFeedbackQueries is
2759    ename:VK_TRUE if the implementation supports the
2760    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type.
2761    pname:transformFeedbackQueries is ename:VK_FALSE if queries of this type
2762    cannot: be created.
2763  * [[limits-transformFeedbackStreamsLinesTriangles]]
2764    pname:transformFeedbackStreamsLinesTriangles is ename:VK_TRUE if the
2765    implementation supports the geometry shader code:OpExecutionMode of
2766    code:OutputLineStrip and code:OutputTriangleStrip in addition to
2767    code:OutputPoints when more than one vertex stream is output.
2768    If pname:transformFeedbackStreamsLinesTriangles is ename:VK_FALSE the
2769    implementation only supports an code:OpExecutionMode of
2770    code:OutputPoints when more than one vertex stream is output from the
2771    geometry shader.
2772  * [[limits-transformFeedbackRasterizationStreamSelect]]
2773    pname:transformFeedbackRasterizationStreamSelect is ename:VK_TRUE if the
2774    implementation supports the code:GeometryStreams SPIR-V capability and
2775    the application can use
2776    slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which
2777    vertex stream output is used for rasterization.
2778    Otherwise vertex stream `0` must: always be used for rasterization.
2779  * [[limits-transformFeedbackDraw]] pname:transformFeedbackDraw is
2780    ename:VK_TRUE if the implementation supports the
2781    flink:vkCmdDrawIndirectByteCountEXT function otherwise the function
2782    must: not be called.
2783
2784:refpage: VkPhysicalDeviceTransformFeedbackPropertiesEXT
2785include::{chapters}/limits.adoc[tag=limits_desc]
2786
2787include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.adoc[]
2788--
2789endif::VK_EXT_transform_feedback[]
2790
2791ifdef::VK_NV_copy_memory_indirect[]
2792[open,refpage='VkPhysicalDeviceCopyMemoryIndirectPropertiesNV',desc='Structure describing supported queues for indirect copy',type='structs']
2793--
2794The sname:VkPhysicalDeviceCopyMemoryIndirectPropertiesNV structure is
2795defined as:
2796
2797include::{generated}/api/structs/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.adoc[]
2798
2799  * pname:sType is a elink:VkStructureType value identifying this structure.
2800  * pname:pNext is `NULL` or a pointer to a structure extending this
2801    structure.
2802  * pname:supportedQueues is a bitmask of elink:VkQueueFlagBits indicating
2803    the queues on which <<indirect-copies, indirect copy commands>> are
2804    supported.
2805
2806If the <<features-indirectCopy, pname:indirectCopy>> feature is supported,
2807pname:supportedQueues must: return at least one supported queue.
2808
2809:refpage: VkPhysicalDeviceCopyMemoryIndirectPropertiesNV
2810include::{chapters}/limits.adoc[tag=limits_desc]
2811
2812include::{generated}/validity/structs/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.adoc[]
2813--
2814endif::VK_NV_copy_memory_indirect[]
2815
2816ifdef::VK_NV_ray_tracing[]
2817[open,refpage='VkPhysicalDeviceRayTracingPropertiesNV',desc='Properties of the physical device for ray tracing',type='structs']
2818--
2819The sname:VkPhysicalDeviceRayTracingPropertiesNV structure is defined as:
2820
2821include::{generated}/api/structs/VkPhysicalDeviceRayTracingPropertiesNV.adoc[]
2822
2823  * pname:sType is a elink:VkStructureType value identifying this structure.
2824  * pname:pNext is `NULL` or a pointer to a structure extending this
2825    structure.
2826  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
2827  * [[limits-maxRecursionDepth]] pname:maxRecursionDepth is the maximum
2828    number of levels of recursion allowed in a trace command.
2829  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
2830    between shader groups in the shader binding table.
2831  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
2832    the base of the shader binding table.
2833  * pname:maxGeometryCount is the maximum number of geometries in the bottom
2834    level acceleration structure.
2835  * pname:maxInstanceCount is the maximum number of instances in the top
2836    level acceleration structure.
2837  * pname:maxTriangleCount is the maximum number of triangles in all
2838    geometries in the bottom level acceleration structure.
2839  * pname:maxDescriptorSetAccelerationStructures is the maximum number of
2840    acceleration structure descriptors that are allowed in a descriptor set.
2841
2842Due to the fact that the geometry, instance, and triangle counts are
2843specified at acceleration structure creation as 32-bit values,
2844pname:maxGeometryCount, pname:maxInstanceCount, and pname:maxTriangleCount
2845must: not exceed [eq]#2^32^-1#.
2846
2847:refpage: VkPhysicalDeviceRayTracingPropertiesNV
2848include::{chapters}/limits.adoc[tag=limits_desc]
2849
2850ifdef::VK_KHR_ray_tracing_pipeline[]
2851Limits specified by this structure must: match those specified with the same
2852name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and
2853slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR.
2854endif::VK_KHR_ray_tracing_pipeline[]
2855
2856include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.adoc[]
2857--
2858endif::VK_NV_ray_tracing[]
2859
2860ifdef::VK_KHR_acceleration_structure[]
2861[open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs']
2862--
2863The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is
2864defined as:
2865
2866include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.adoc[]
2867
2868  * pname:sType is a elink:VkStructureType value identifying this structure.
2869  * pname:pNext is `NULL` or a pointer to a structure extending this
2870    structure.
2871  * [[limits-maxGeometryCount]] pname:maxGeometryCount is the maximum number
2872    of geometries in the bottom level acceleration structure.
2873  * [[limits-maxInstanceCount]] pname:maxInstanceCount is the maximum number
2874    of instances in the top level acceleration structure.
2875  * [[limits-maxPrimitiveCount]] pname:maxPrimitiveCount is the maximum
2876    number of triangles or AABBs in all geometries in the bottom level
2877    acceleration structure.
2878  * [[limits-maxPerStageDescriptorAccelerationStructures]]
2879    pname:maxPerStageDescriptorAccelerationStructures is the maximum number
2880    of acceleration structure bindings that can: be accessible to a single
2881    shader stage in a pipeline layout.
2882    Descriptor bindings with a descriptor type of
2883    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
2884    limit.
2885    Only descriptor bindings in descriptor set layouts created without the
2886    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2887    count against this limit.
2888  * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]]
2889    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is
2890    similar to pname:maxPerStageDescriptorAccelerationStructures but counts
2891    descriptor bindings from descriptor sets created with or without the
2892    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2893    set.
2894  * [[limits-maxDescriptorSetAccelerationStructures]]
2895    pname:maxDescriptorSetAccelerationStructures is the maximum number of
2896    acceleration structure descriptors that can: be included in descriptor
2897    bindings in a pipeline layout across all pipeline shader stages and
2898    descriptor set numbers.
2899    Descriptor bindings with a descriptor type of
2900    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
2901    limit.
2902    Only descriptor bindings in descriptor set layouts created without the
2903    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2904    count against this limit.
2905  * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]]
2906    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar
2907    to pname:maxDescriptorSetAccelerationStructures but counts descriptor
2908    bindings from descriptor sets created with or without the
2909    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2910    set.
2911  * [[limits-minAccelerationStructureScratchOffsetAlignment]]
2912    pname:minAccelerationStructureScratchOffsetAlignment is the minimum
2913    required: alignment, in bytes, for scratch data passed in to an
2914    acceleration structure build command.
2915    The value must: be a power of two.
2916
2917Due to the fact that the geometry, instance, and primitive counts are
2918specified at acceleration structure creation as 32-bit values,
2919<<limits-maxGeometryCount, pname:maxGeometryCount>>,
2920<<limits-maxInstanceCount, pname:maxInstanceCount>>, and
2921<<limits-maxPrimitiveCount, pname:maxPrimitiveCount>> must: not exceed
2922[eq]#2^32^-1#.
2923
2924:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR
2925include::{chapters}/limits.adoc[tag=limits_desc]
2926
2927ifdef::VK_NV_ray_tracing[]
2928Limits specified by this structure must: match those specified with the same
2929name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
2930endif::VK_NV_ray_tracing[]
2931
2932include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.adoc[]
2933--
2934endif::VK_KHR_acceleration_structure[]
2935
2936ifdef::VK_KHR_ray_tracing_pipeline[]
2937[open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs']
2938--
2939The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is
2940defined as:
2941
2942include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.adoc[]
2943
2944  * pname:sType is a elink:VkStructureType value identifying this structure.
2945  * pname:pNext is `NULL` or a pointer to a structure extending this
2946    structure.
2947  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
2948  * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the
2949    maximum number of levels of ray recursion allowed in a trace command.
2950  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
2951    between shader groups in the shader binding table.
2952  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
2953    the base of the shader binding table.
2954  * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the
2955    information required to do capture and replay for shader group handles.
2956  * pname:maxRayDispatchInvocationCount is the maximum number of ray
2957    generation shader invocations which may: be produced by a single
2958    flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command.
2959  * pname:shaderGroupHandleAlignment is the required: alignment in bytes for
2960    each shader binding table entry.
2961    The value must: be a power of two.
2962  * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray
2963    attribute structure
2964
2965:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR
2966include::{chapters}/limits.adoc[tag=limits_desc]
2967
2968ifdef::VK_NV_ray_tracing[]
2969Limits specified by this structure must: match those specified with the same
2970name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
2971endif::VK_NV_ray_tracing[]
2972
2973include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.adoc[]
2974--
2975endif::VK_KHR_ray_tracing_pipeline[]
2976
2977ifdef::VK_NV_cooperative_matrix[]
2978[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
2979--
2980The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined
2981as:
2982
2983include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[]
2984
2985  * pname:sType is a elink:VkStructureType value identifying this structure.
2986  * pname:pNext is `NULL` or a pointer to a structure extending this
2987    structure.
2988  * [[limits-cooperativeMatrixSupportedStages-NV]]
2989    pname:cooperativeMatrixSupportedStages is a bitfield of
2990    elink:VkShaderStageFlagBits describing the shader stages that
2991    cooperative matrix instructions are supported in.
2992    pname:cooperativeMatrixSupportedStages will have the
2993    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
2994    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
2995
2996:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV
2997include::{chapters}/limits.adoc[tag=limits_desc]
2998
2999include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.adoc[]
3000--
3001endif::VK_NV_cooperative_matrix[]
3002
3003ifdef::VK_KHR_cooperative_matrix[]
3004[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesKHR',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
3005--
3006The sname:VkPhysicalDeviceCooperativeMatrixPropertiesKHR structure is
3007defined as:
3008
3009include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesKHR.adoc[]
3010
3011  * pname:sType is a elink:VkStructureType value identifying this structure.
3012  * pname:pNext is `NULL` or a pointer to a structure extending this
3013    structure.
3014  * [[limits-cooperativeMatrixSupportedStages]]
3015    pname:cooperativeMatrixSupportedStages is a bitfield of
3016    elink:VkShaderStageFlagBits describing the shader stages that
3017    cooperative matrix instructions are supported in.
3018    pname:cooperativeMatrixSupportedStages will have the
3019    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
3020    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
3021
3022pname:cooperativeMatrixSupportedStages must: not have any bits other than
3023ename:VK_SHADER_STAGE_COMPUTE_BIT set.
3024
3025:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesKHR
3026include::{chapters}/limits.adoc[tag=limits_desc]
3027
3028include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesKHR.adoc[]
3029--
3030endif::VK_KHR_cooperative_matrix[]
3031
3032ifdef::VK_NV_shader_sm_builtins[]
3033[open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs']
3034--
3035The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined
3036as:
3037
3038include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.adoc[]
3039
3040  * pname:sType is a elink:VkStructureType value identifying this structure.
3041  * pname:pNext is `NULL` or a pointer to a structure extending this
3042    structure.
3043  * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the
3044    device.
3045  * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number
3046    of simultaneously executing warps on an SM.
3047
3048:refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
3049include::{chapters}/limits.adoc[tag=limits_desc]
3050
3051include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.adoc[]
3052--
3053endif::VK_NV_shader_sm_builtins[]
3054
3055ifdef::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
3056[open,refpage='VkPhysicalDeviceTexelBufferAlignmentProperties',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs',alias='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT']
3057--
3058The sname:VkPhysicalDeviceTexelBufferAlignmentProperties structure is
3059defined as:
3060
3061include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentProperties.adoc[]
3062
3063ifdef::VK_EXT_texel_buffer_alignment[]
3064or the equivalent
3065
3066include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.adoc[]
3067endif::VK_EXT_texel_buffer_alignment[]
3068
3069  * pname:sType is a elink:VkStructureType value identifying this structure.
3070  * pname:pNext is `NULL` or a pointer to a structure extending this
3071    structure.
3072
3073// Must have preceding whitespace
3074ifdef::VK_VERSION_1_3[:anchor-prefix: extension-]
3075ifndef::VK_VERSION_1_3[:anchor-prefix:]
3076// tag::VK_EXT_texel_buffer_alignment-properties[]
3077  * [[{anchor-prefix}limits-storageTexelBufferOffsetAlignmentBytes]]
3078    pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is
3079    sufficient for a storage texel buffer of any format.
3080    The value must: be a power of two.
3081  * [[{anchor-prefix}limits-storageTexelBufferOffsetSingleTexelAlignment]]
3082    pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether
3083    single texel alignment is sufficient for a storage texel buffer of any
3084    format.
3085  * [[{anchor-prefix}limits-uniformTexelBufferOffsetAlignmentBytes]]
3086    pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is
3087    sufficient for a uniform texel buffer of any format.
3088    The value must: be a power of two.
3089  * [[{anchor-prefix}limits-uniformTexelBufferOffsetSingleTexelAlignment]]
3090    pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether
3091    single texel alignment is sufficient for a uniform texel buffer of any
3092    format.
3093// end::VK_EXT_texel_buffer_alignment-properties[]
3094
3095:refpage: VkPhysicalDeviceTexelBufferAlignmentProperties
3096include::{chapters}/limits.adoc[tag=limits_desc]
3097
3098If the single texel alignment property is ename:VK_FALSE, then the buffer
3099view's offset must: be aligned to the corresponding byte alignment value.
3100If the single texel alignment property is ename:VK_TRUE, then the buffer
3101view's offset must: be aligned to the lesser of the corresponding byte
3102alignment value or the size of a single texel, based on
3103slink:VkBufferViewCreateInfo::pname:format.
3104If the size of a single texel is a multiple of three bytes, then the size of
3105a single component of the format is used instead.
3106
3107These limits must: not advertise a larger alignment than the
3108<<limits-required, required>> maximum minimum value of
3109slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any
3110format that supports use as a texel buffer.
3111
3112include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentProperties.adoc[]
3113--
3114endif::VK_VERSION_1_3,VK_EXT_texel_buffer_alignment[]
3115
3116ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3117[open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR']
3118--
3119The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined
3120as:
3121
3122include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.adoc[]
3123
3124ifdef::VK_KHR_timeline_semaphore[]
3125or the equivalent
3126
3127include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.adoc[]
3128endif::VK_KHR_timeline_semaphore[]
3129
3130  * pname:sType is a elink:VkStructureType value identifying this structure.
3131  * pname:pNext is `NULL` or a pointer to a structure extending this
3132    structure.
3133
3134// Must have preceding whitespace
3135ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
3136ifndef::VK_VERSION_1_2[:anchor-prefix:]
3137// tag::VK_KHR_timeline_semaphore-properties[]
3138  * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]]
3139    pname:maxTimelineSemaphoreValueDifference indicates the maximum
3140    difference allowed by the implementation between the current value of a
3141    timeline semaphore and any pending signal or wait operations.
3142// end::VK_KHR_timeline_semaphore-properties[]
3143
3144:refpage: VkPhysicalDeviceTimelineSemaphoreProperties
3145include::{chapters}/limits.adoc[tag=limits_desc]
3146
3147include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.adoc[]
3148--
3149endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3150
3151ifdef::VK_EXT_line_rasterization[]
3152[open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs']
3153--
3154The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is
3155defined as:
3156
3157include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.adoc[]
3158
3159  * pname:sType is a elink:VkStructureType value identifying this structure.
3160  * pname:pNext is `NULL` or a pointer to a structure extending this
3161    structure.
3162  * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is
3163    the number of bits of subpixel precision in framebuffer coordinates
3164    [eq]#x~f~# and [eq]#y~f~# when rasterizing <<primsrast-lines,line
3165    segments>>.
3166
3167:refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT
3168include::{chapters}/limits.adoc[tag=limits_desc]
3169
3170include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.adoc[]
3171--
3172endif::VK_EXT_line_rasterization[]
3173
3174ifdef::VK_EXT_robustness2[]
3175[open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs']
3176--
3177The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as:
3178
3179include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.adoc[]
3180
3181  * pname:sType is a elink:VkStructureType value identifying this structure.
3182  * pname:pNext is `NULL` or a pointer to a structure extending this
3183    structure.
3184  * [[limits-robustStorageBufferAccessSizeAlignment]]
3185    pname:robustStorageBufferAccessSizeAlignment is the number of bytes that
3186    the range of a storage buffer descriptor is rounded up to when used for
3187    bounds-checking when the <<features-robustBufferAccess2,
3188    pname:robustBufferAccess2>> feature is enabled.
3189    This value must: be either 1 or 4.
3190  * [[limits-robustUniformBufferAccessSizeAlignment]]
3191    pname:robustUniformBufferAccessSizeAlignment is the number of bytes that
3192    the range of a uniform buffer descriptor is rounded up to when used for
3193    bounds-checking when the <<features-robustBufferAccess2,
3194    pname:robustBufferAccess2>> feature is enabled.
3195    This value must: be a power of two in the range [1, 256].
3196
3197:refpage: VkPhysicalDeviceRobustness2PropertiesEXT
3198include::{chapters}/limits.adoc[tag=limits_desc]
3199
3200include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.adoc[]
3201--
3202endif::VK_EXT_robustness2[]
3203
3204ifdef::VK_NV_device_generated_commands[]
3205[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
3206--
3207The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is
3208defined as:
3209
3210include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.adoc[]
3211
3212  * pname:sType is a elink:VkStructureType value identifying this structure.
3213  * pname:pNext is `NULL` or a pointer to a structure extending this
3214    structure.
3215  * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups
3216    in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV.
3217  * pname:maxIndirectSequenceCount is the maximum number of sequences in
3218    slink:VkGeneratedCommandsInfoNV and in
3219    slink:VkGeneratedCommandsMemoryRequirementsInfoNV.
3220  * pname:maxIndirectCommandsTokenCount is the maximum number of tokens in
3221    slink:VkIndirectCommandsLayoutCreateInfoNV.
3222  * pname:maxIndirectCommandsStreamCount is the maximum number of streams in
3223    slink:VkIndirectCommandsLayoutCreateInfoNV.
3224  * pname:maxIndirectCommandsTokenOffset is the maximum offset in
3225    slink:VkIndirectCommandsLayoutTokenNV.
3226  * pname:maxIndirectCommandsStreamStride is the maximum stream stride in
3227    slink:VkIndirectCommandsLayoutCreateInfoNV.
3228  * pname:minSequencesCountBufferOffsetAlignment is the minimum alignment
3229    for memory addresses which can: be used in
3230    slink:VkGeneratedCommandsInfoNV.
3231  * pname:minSequencesIndexBufferOffsetAlignment is the minimum alignment
3232    for memory addresses which can: be used in
3233    slink:VkGeneratedCommandsInfoNV.
3234  * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment
3235    for memory addresses used in slink:VkIndirectCommandsStreamNV, and as
3236    preprocess buffer in slink:VkGeneratedCommandsInfoNV.
3237
3238:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
3239include::{chapters}/limits.adoc[tag=limits_desc]
3240
3241include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.adoc[]
3242--
3243
3244endif::VK_NV_device_generated_commands[]
3245
3246ifdef::VK_KHR_portability_subset[]
3247[open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs']
3248--
3249The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is
3250defined as:
3251
3252include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.adoc[]
3253
3254  * pname:sType is a elink:VkStructureType value identifying this structure.
3255  * pname:pNext is `NULL` or a pointer to a structure extending this
3256    structure.
3257  * [[limits-minVertexInputBindingStrideAlignment]]
3258    pname:minVertexInputBindingStrideAlignment indicates the minimum
3259    alignment for vertex input strides.
3260    slink:VkVertexInputBindingDescription::pname:stride must: be a multiple
3261    of, and at least as large as, this value.
3262    The value must: be a power of two.
3263
3264:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR
3265include::{chapters}/limits.adoc[tag=limits_desc]
3266
3267include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.adoc[]
3268--
3269endif::VK_KHR_portability_subset[]
3270
3271
3272ifdef::VK_KHR_fragment_shading_rate[]
3273[open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs']
3274--
3275The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is
3276defined as:
3277
3278include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.adoc[]
3279
3280  * pname:sType is a elink:VkStructureType value identifying this structure.
3281  * pname:pNext is `NULL` or a pointer to a structure extending this
3282    structure.
3283  * [[limits-minFragmentShadingRateAttachmentTexelSize]]
3284    pname:minFragmentShadingRateAttachmentTexelSize indicates minimum
3285    supported width and height of the portion of the framebuffer
3286    corresponding to each texel in a fragment shading rate attachment.
3287    Each value must: be less than or equal to the values in
3288    pname:maxFragmentShadingRateAttachmentTexelSize.
3289    Each value must: be a power-of-two.
3290    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
3291    pname:attachmentFragmentShadingRate>> feature is not supported.
3292  * [[limits-maxFragmentShadingRateAttachmentTexelSize]]
3293    pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum
3294    supported width and height of the portion of the framebuffer
3295    corresponding to each texel in a fragment shading rate attachment.
3296    Each value must: be greater than or equal to the values in
3297    pname:minFragmentShadingRateAttachmentTexelSize.
3298    Each value must: be a power-of-two.
3299    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
3300    pname:attachmentFragmentShadingRate>> feature is not supported.
3301  * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]]
3302    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the
3303    maximum ratio between the width and height of the portion of the
3304    framebuffer corresponding to each texel in a fragment shading rate
3305    attachment.
3306    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a
3307    power-of-two value, and must: be less than or equal to
3308    [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width /
3309    pname:minFragmentShadingRateAttachmentTexelSize.height,
3310    pname:maxFragmentShadingRateAttachmentTexelSize.height /
3311    pname:minFragmentShadingRateAttachmentTexelSize.width)#.
3312    It must: be 0 if the <<features-attachmentFragmentShadingRate,
3313    pname:attachmentFragmentShadingRate>> feature is not supported.
3314  * [[limits-primitiveFragmentShadingRateWithMultipleViewports]]
3315    pname:primitiveFragmentShadingRateWithMultipleViewports specifies
3316    whether the <<primsrast-fragment-shading-rate-primitive,primitive
3317    fragment shading rate>> can: be used when multiple viewports are used.
3318    If this value is ename:VK_FALSE, only a single viewport must: be used,
3319    and applications must: not write to the
3320ifdef::VK_NV_viewport_array2[]
3321    code:ViewportMaskNV or
3322endif::VK_NV_viewport_array2[]
3323    code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR.
3324    It must: be ename:VK_FALSE if
3325ifdef::VK_VERSION_1_2[]
3326    the <<features-shaderOutputViewportIndex,
3327    pname:shaderOutputViewportIndex>> feature,
3328endif::VK_VERSION_1_2[]
3329ifdef::VK_EXT_shader_viewport_index_layer[]
3330    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
3331endif::VK_EXT_shader_viewport_index_layer[]
3332ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
3333    the <<features-geometryShader, pname:geometryShader>> feature is not
3334    supported, or if the <<features-primitiveFragmentShadingRate,
3335    pname:primitiveFragmentShadingRate>> feature is not supported.
3336  * [[limits-layeredShadingRateAttachments]]
3337    pname:layeredShadingRateAttachments specifies whether a shading rate
3338    attachment image view can: be created with multiple layers.
3339    If this value is ename:VK_FALSE, when creating an image view with a
3340    pname:usage that includes
3341    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
3342    pname:layerCount must: be `1`.
3343    It must: be ename:VK_FALSE if
3344ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
3345    the <<features-multiview, pname:multiview>> feature,
3346endif::VK_VERSION_1_1,VK_KHR_multiview[]
3347ifdef::VK_VERSION_1_2[]
3348    the <<features-shaderOutputViewportIndex,
3349    pname:shaderOutputViewportIndex>> feature,
3350endif::VK_VERSION_1_2[]
3351ifdef::VK_EXT_shader_viewport_index_layer[]
3352    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
3353endif::VK_EXT_shader_viewport_index_layer[]
3354ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
3355    the <<features-geometryShader, pname:geometryShader>> feature is not
3356    supported, or if the <<features-attachmentFragmentShadingRate,
3357    pname:attachmentFragmentShadingRate>> feature is not supported.
3358  * [[limits-fragmentShadingRateNonTrivialCombinerOps]]
3359    pname:fragmentShadingRateNonTrivialCombinerOps specifies whether
3360    elink:VkFragmentShadingRateCombinerOpKHR enums other than
3361    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
3362    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used.
3363    It must: be ename:VK_FALSE unless either the
3364    <<features-primitiveFragmentShadingRate,
3365    pname:primitiveFragmentShadingRate>> or
3366    <<features-attachmentFragmentShadingRate,
3367    pname:attachmentFragmentShadingRate>> feature is supported.
3368  * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum
3369    supported width and height of a fragment.
3370    Its pname:width and pname:height members must: both be power-of-two
3371    values.
3372    This limit is purely informational, and is not validated.
3373  * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio
3374    indicates the maximum ratio between the width and height of a fragment.
3375    pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and
3376    must: be less than or equal to the maximum of the pname:width and
3377    pname:height members of pname:maxFragmentSize.
3378    This limit is purely informational, and is not validated.
3379  * [[limits-maxFragmentShadingRateCoverageSamples]]
3380    pname:maxFragmentShadingRateCoverageSamples specifies the maximum number
3381    of coverage samples supported in a single fragment.
3382    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
3383    to the product of the pname:width and pname:height members of
3384    pname:maxFragmentSize, and the sample count reported by
3385    pname:maxFragmentShadingRateRasterizationSamples.
3386    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
3387    to [eq]#pname:maxSampleMaskWords {times} 32# if
3388    pname:fragmentShadingRateWithShaderSampleMask is supported.
3389    This limit is purely informational, and is not validated.
3390  * [[limits-maxFragmentShadingRateRasterizationSamples]]
3391    pname:maxFragmentShadingRateRasterizationSamples is a
3392    elink:VkSampleCountFlagBits value specifying the maximum sample rate
3393    supported when a fragment covers multiple pixels.
3394    This limit is purely informational, and is not validated.
3395  * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]]
3396    pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether
3397    the implementation supports writing code:FragDepth
3398ifdef::VK_EXT_shader_stencil_export[]
3399    or code:FragStencilRefEXT
3400endif::VK_EXT_shader_stencil_export[]
3401    from a fragment shader for multi-pixel fragments.
3402    If this value is ename:VK_FALSE, writing to those built-ins will clamp
3403    the fragment shading rate to [eq]#(1,1)#.
3404  * [[limits-fragmentShadingRateWithSampleMask]]
3405    pname:fragmentShadingRateWithSampleMask specifies whether the
3406    implementation supports setting valid bits of
3407    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for
3408    multi-pixel fragments.
3409    If this value is ename:VK_FALSE, zeroing valid bits in the sample mask
3410    will clamp the fragment shading rate to [eq]#(1,1)#.
3411  * [[limits-fragmentShadingRateWithShaderSampleMask]]
3412    pname:fragmentShadingRateWithShaderSampleMask specifies whether the
3413    implementation supports reading or writing code:SampleMask for
3414    multi-pixel fragments.
3415    If this value is ename:VK_FALSE, using that built-in will clamp the
3416    fragment shading rate to [eq]#(1,1)#.
3417  * [[limits-fragmentShadingRateWithConservativeRasterization]]
3418    pname:fragmentShadingRateWithConservativeRasterization
3419ifndef::VK_EXT_conservative_rasterization[]
3420    is reserved for future use.
3421endif::VK_EXT_conservative_rasterization[]
3422ifdef::VK_EXT_conservative_rasterization[]
3423    specifies whether <<primsrast-conservativeraster, conservative
3424    rasterization>> is supported for multi-pixel fragments.
3425    It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization`
3426    is not supported.
3427    If this value is ename:VK_FALSE, using <<primsrast-conservativeraster,
3428    conservative rasterization>> will clamp the fragment shading rate to
3429    [eq]#(1,1)#.
3430endif::VK_EXT_conservative_rasterization[]
3431  * [[limits-fragmentShadingRateWithFragmentShaderInterlock]]
3432    pname:fragmentShadingRateWithFragmentShaderInterlock
3433ifndef::VK_EXT_fragment_shader_interlock[]
3434    is reserved for future use.
3435endif::VK_EXT_fragment_shader_interlock[]
3436ifdef::VK_EXT_fragment_shader_interlock[]
3437    specifies whether <<fragops-shader-interlock, fragment shader
3438    interlock>> is supported for multi-pixel fragments.
3439    It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock`
3440    is not supported.
3441    If this value is ename:VK_FALSE, using <<fragops-shader-interlock,
3442    fragment shader interlock>> will clamp the fragment shading rate to
3443    [eq]#(1,1)#.
3444endif::VK_EXT_fragment_shader_interlock[]
3445  * [[limits-fragmentShadingRateWithCustomSampleLocations]]
3446    pname:fragmentShadingRateWithCustomSampleLocations
3447ifndef::VK_EXT_sample_locations[]
3448    is reserved for future use.
3449endif::VK_EXT_sample_locations[]
3450ifdef::VK_EXT_sample_locations[]
3451    specifies whether <<primsrast-samplelocations, custom sample locations>>
3452    are supported for multi-pixel fragments.
3453    It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not
3454    supported.
3455    If this value is ename:VK_FALSE, using <<primsrast-samplelocations,
3456    custom sample locations>> will clamp the fragment shading rate to
3457    [eq]#(1,1)#.
3458endif::VK_EXT_sample_locations[]
3459  * [[limits-fragmentShadingRateStrictMultiplyCombiner]]
3460    pname:fragmentShadingRateStrictMultiplyCombiner specifies whether
3461    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a
3462    multiplication or not.
3463    Implementations where this value is ename:VK_FALSE will instead combine
3464    rates with an addition.
3465    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE,
3466    implementations must: report this as ename:VK_FALSE.
3467    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE,
3468    implementations should: report this as ename:VK_TRUE.
3469
3470[NOTE]
3471.Note
3472====
3473Multiplication of the combiner rates using the fragment width/height in
3474linear space is equivalent to an addition of those values in log2 space.
3475Some implementations inadvertently implemented an addition in linear space
3476due to unclear requirements originating outside of this specification.
3477This resulted in <<limits-fragmentShadingRateStrictMultiplyCombiner,
3478pname:fragmentShadingRateStrictMultiplyCombiner>> being added.
3479Fortunately, this only affects situations where a rate of 1 in either
3480dimension is combined with another rate of 1.
3481All other combinations result in the exact same result as if multiplication
3482was performed in linear space due to the clamping logic, and the fact that
3483both the sum and product of 2 and 2 are equal.
3484In many cases, this limit will not affect the correct operation of
3485applications.
3486====
3487
3488:refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR
3489include::{chapters}/limits.adoc[tag=limits_desc]
3490
3491These properties are related to <<primsrast-fragment-shading-rate, fragment
3492shading rates>>.
3493
3494include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.adoc[]
3495--
3496endif::VK_KHR_fragment_shading_rate[]
3497
3498ifdef::VK_NV_fragment_shading_rate_enums[]
3499[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs']
3500--
3501The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is
3502defined as:
3503
3504include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.adoc[]
3505
3506  * pname:sType is a elink:VkStructureType value identifying this structure.
3507  * pname:pNext is `NULL` or a pointer to a structure extending this
3508    structure.
3509  * [[limits-maxFragmentShadingRateInvocationCount]]
3510    pname:maxFragmentShadingRateInvocationCount is a
3511    elink:VkSampleCountFlagBits value indicating the maximum number of
3512    fragment shader invocations per fragment supported in pipeline,
3513    primitive, and attachment fragment shading rates.
3514
3515:refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV
3516include::{chapters}/limits.adoc[tag=limits_desc]
3517
3518These properties are related to <<primsrast-fragment-shading-rate, fragment
3519shading rates>>.
3520
3521include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.adoc[]
3522--
3523endif::VK_NV_fragment_shading_rate_enums[]
3524
3525ifdef::VK_EXT_custom_border_color[]
3526[open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
3527--
3528The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is
3529defined as:
3530
3531include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.adoc[]
3532
3533  * [[limits-maxCustomBorderColorSamplers]]
3534    pname:maxCustomBorderColorSamplers indicates the maximum number of
3535    samplers with custom border colors which can: simultaneously exist on a
3536    device.
3537
3538:refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT
3539include::{chapters}/limits.adoc[tag=limits_desc]
3540
3541include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.adoc[]
3542--
3543endif::VK_EXT_custom_border_color[]
3544
3545ifdef::VK_EXT_provoking_vertex[]
3546[open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs']
3547--
3548The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined
3549as:
3550
3551include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.adoc[]
3552
3553  * pname:sType is a elink:VkStructureType value identifying this structure.
3554  * pname:pNext is `NULL` or a pointer to a structure extending this
3555    structure.
3556  * [[limits-provokingVertexModePerPipeline]]
3557    pname:provokingVertexModePerPipeline indicates whether the
3558    implementation supports graphics pipelines with different provoking
3559    vertex modes within the same render pass instance.
3560  * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]]
3561    pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates
3562    whether the implementation can preserve the provoking vertex order when
3563    writing triangle fan vertices to transform feedback.
3564
3565:refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT
3566include::{chapters}/limits.adoc[tag=limits_desc]
3567
3568include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.adoc[]
3569--
3570endif::VK_EXT_provoking_vertex[]
3571
3572ifdef::VK_EXT_descriptor_buffer[]
3573[open,refpage='VkPhysicalDeviceDescriptorBufferPropertiesEXT',desc='Structure describing descriptor buffer properties supported by an implementation',type='structs']
3574--
3575The sname:VkPhysicalDeviceDescriptorBufferPropertiesEXT structure is defined
3576as:
3577
3578include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferPropertiesEXT.adoc[]
3579
3580  * pname:sType is a elink:VkStructureType value identifying this structure.
3581  * pname:pNext is `NULL` or a pointer to a structure extending this
3582    structure.
3583  * [[limits-combinedImageSamplerDescriptorSingleArray]]
3584    pname:combinedImageSamplerDescriptorSingleArray indicates that the
3585    implementation does not require an array of
3586    `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER` descriptors to be written
3587    into a descriptor buffer as an array of image descriptors, immediately
3588    followed by an array of sampler descriptors.
3589  * [[limits-bufferlessPushDescriptors]] pname:bufferlessPushDescriptors
3590    indicates that the implementation does not require a buffer created with
3591    `VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT` to be bound
3592    when using push descriptors.
3593  * [[limits-allowSamplerImageViewPostSubmitCreation]]
3594    pname:allowSamplerImageViewPostSubmitCreation indicates that the
3595    implementation does not restrict when the slink:VkSampler or
3596    slink:VkImageView objects used to retrieve descriptor data can: be
3597    created in relation to command buffer submission.
3598    If this value is ename:VK_FALSE, then the application must: create any
3599    slink:VkSampler or slink:VkImageView objects whose descriptor data is
3600    accessed during the execution of a command buffer, before the
3601    flink:vkQueueSubmit
3602ifdef::VK_VERSION_1_3,VK_KHR_synchronization2[]
3603    , or flink:vkQueueSubmit2,
3604endif::VK_VERSION_1_3,VK_KHR_synchronization2[]
3605    call that submits that command buffer.
3606  * [[limits-descriptorBufferOffsetAlignment]]
3607    pname:descriptorBufferOffsetAlignment indicates the required: alignment
3608    in bytes when setting offsets into the descriptor buffer.
3609  * [[limits-maxDescriptorBufferBindings]] pname:maxDescriptorBufferBindings
3610    indicates the maximum sum total number of descriptor buffers and
3611    embedded immutable sampler sets that can: be bound.
3612  * [[limits-maxResourceDescriptorBufferBindings]]
3613    pname:maxResourceDescriptorBufferBindings indicates the maximum number
3614    of resource descriptor buffers that can: be bound.
3615  * [[limits-maxSamplerDescriptorBufferBindings]]
3616    pname:maxSamplerDescriptorBufferBindings indicates the maximum number of
3617    sampler descriptor buffers that can: be bound.
3618  * [[limits-maxEmbeddedImmutableSamplerBindings]]
3619    pname:maxEmbeddedImmutableSamplerBindings indicates the maximum number
3620    of embedded immutable sampler sets that can: be bound.
3621  * [[limits-maxEmbeddedImmutableSamplers]]
3622    pname:maxEmbeddedImmutableSamplers indicates the maximum number of
3623    unique immutable samplers in descriptor set layouts created with
3624    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
3625    and pipeline layouts created from them, which can: simultaneously exist
3626    on a device.
3627  * [[limits-bufferCaptureReplayDescriptorDataSize]]
3628    pname:bufferCaptureReplayDescriptorDataSize indicates the maximum size
3629    in bytes of the opaque data used for capture and replay with buffers.
3630  * [[limits-imageCaptureReplayDescriptorDataSize]]
3631    pname:imageCaptureReplayDescriptorDataSize indicates the maximum size in
3632    bytes of the opaque data used for capture and replay with images.
3633  * [[limits-imageViewCaptureReplayDescriptorDataSize]]
3634    pname:imageViewCaptureReplayDescriptorDataSize indicates the maximum
3635    size in bytes of the opaque data used for capture and replay with image
3636    views.
3637  * [[limits-samplerCaptureReplayDescriptorDataSize]]
3638    pname:samplerCaptureReplayDescriptorDataSize indicates the maximum size
3639    in bytes of the opaque data used for capture and replay with samplers.
3640  * [[limits-accelerationStructureCaptureReplayDescriptorDataSize]]
3641    pname:accelerationStructureCaptureReplayDescriptorDataSize indicates the
3642    maximum size in bytes of the opaque data used for capture and replay
3643    with acceleration structures.
3644  * [[limits-samplerDescriptorSize]] pname:samplerDescriptorSize indicates
3645    the size in bytes of a ename:VK_DESCRIPTOR_TYPE_SAMPLER descriptor.
3646  * [[limits-combinedImageSamplerDescriptorSize]]
3647    pname:combinedImageSamplerDescriptorSize indicates the size in bytes of
3648    a ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.
3649  * [[limits-sampledImageDescriptorSize]] pname:sampledImageDescriptorSize
3650    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
3651    descriptor.
3652  * [[limits-storageImageDescriptorSize]] pname:storageImageDescriptorSize
3653    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
3654    descriptor.
3655  * [[limits-uniformTexelBufferDescriptorSize]]
3656    pname:uniformTexelBufferDescriptorSize indicates the size in bytes of a
3657    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor if the
3658    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is not
3659    enabled.
3660  * [[limits-robustUniformTexelBufferDescriptorSize]]
3661    pname:robustUniformTexelBufferDescriptorSize indicates the size in bytes
3662    of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor if the
3663    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
3664    enabled.
3665  * [[limits-storageTexelBufferDescriptorSize]]
3666    pname:storageTexelBufferDescriptorSize indicates the size in bytes of a
3667    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor if the
3668    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is not
3669    enabled.
3670  * [[limits-robustStorageTexelBufferDescriptorSize]]
3671    pname:robustStorageTexelBufferDescriptorSize indicates the size in bytes
3672    of a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor if the
3673    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
3674    enabled.
3675  * [[limits-uniformBufferDescriptorSize]] pname:uniformBufferDescriptorSize
3676    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
3677    descriptor.
3678  * [[limits-robustUniformBufferDescriptorSize]]
3679    pname:robustUniformBufferDescriptorSize indicates the size in bytes of a
3680    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor if the
3681    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
3682    enabled.
3683  * [[limits-storageBufferDescriptorSize]] pname:storageBufferDescriptorSize
3684    indicates the size in bytes of a ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
3685    descriptor.
3686  * [[limits-robustStorageBufferDescriptorSize]]
3687    pname:robustStorageBufferDescriptorSize indicates the size in bytes of a
3688    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor if the
3689    <<features-robustBufferAccess, pname:robustBufferAccess>> feature is
3690    enabled.
3691  * [[limits-inputAttachmentDescriptorSize]]
3692    pname:inputAttachmentDescriptorSize indicates the size in bytes of a
3693    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT descriptor.
3694  * [[limits-accelerationStructureDescriptorSize]]
3695    pname:accelerationStructureDescriptorSize indicates the size in bytes of
3696    a ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR or
3697    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV descriptor.
3698  * [[limits-maxSamplerDescriptorBufferRange]]
3699    pname:maxSamplerDescriptorBufferRange indicates the maximum range in
3700    bytes from the address of a sampler descriptor buffer binding that is
3701    accessible to a shader.
3702  * [[limits-maxResourceDescriptorBufferRange]]
3703    pname:maxResourceDescriptorBufferRange indicates the maximum range in
3704    bytes from the address of a resource descriptor buffer binding that is
3705    accessible to a shader.
3706  * [[limits-samplerDescriptorBufferAddressSpaceSize]]
3707    pname:samplerDescriptorBufferAddressSpaceSize indicates the total size
3708    in bytes of the address space available for descriptor buffers created
3709    with ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT.
3710  * [[limits-resourceDescriptorBufferAddressSpaceSize]]
3711    pname:resourceDescriptorBufferAddressSpaceSize indicates the total size
3712    in bytes of the address space available for descriptor buffers created
3713    with ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT.
3714  * [[limits-descriptorBufferAddressSpaceSize]]
3715    pname:descriptorBufferAddressSpaceSize indicates the total size in bytes
3716    of the address space available for descriptor buffers created with both
3717    ename:VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT and
3718    ename:VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT.
3719
3720ifdef::VK_VALVE_mutable_descriptor_type[]
3721A descriptor binding with type ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE has a
3722descriptor size which is implied by the descriptor types included in the
3723slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pDescriptorTypes list.
3724The descriptor size is equal to the maximum size of any descriptor type
3725included in the pname:pDescriptorTypes list.
3726endif::VK_VALVE_mutable_descriptor_type[]
3727
3728ifdef::VK_EXT_pipeline_robustness[]
3729As there is no way to request robust and non-robust descriptors separately,
3730or specify robust/non-robust descriptors in the set layout, if
3731<<features-robustBufferAccess, pname:robustBufferAccess>> is enabled then
3732robust descriptors are always used.
3733endif::VK_EXT_pipeline_robustness[]
3734
3735:refpage: VkPhysicalDeviceDescriptorBufferPropertiesEXT
3736include::{chapters}/limits.adoc[tag=limits_desc]
3737
3738include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferPropertiesEXT.adoc[]
3739--
3740
3741ifdef::VK_EXT_fragment_density_map[]
3742[open,refpage='VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT',desc='Structure describing descriptor buffer density map properties supported by an implementation',type='structs']
3743--
3744The sname:VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT structure
3745is defined as:
3746
3747include::{generated}/api/structs/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.adoc[]
3748
3749  * pname:sType is a elink:VkStructureType value identifying this structure.
3750  * pname:pNext is `NULL` or a pointer to a structure extending this
3751    structure.
3752  * [[limits-combinedImageSamplerDensityMapDescriptorSize]]
3753    pname:combinedImageSamplerDensityMapDescriptorSize indicates the size in
3754    bytes of a ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor
3755    when creating the descriptor with
3756    ename:VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT set.
3757
3758:refpage: VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT
3759include::{chapters}/limits.adoc[tag=limits_desc]
3760
3761include::{generated}/validity/structs/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.adoc[]
3762--
3763endif::VK_EXT_fragment_density_map[]
3764
3765endif::VK_EXT_descriptor_buffer[]
3766
3767ifdef::VK_EXT_host_image_copy[]
3768[open,refpage='VkPhysicalDeviceHostImageCopyPropertiesEXT',desc='Structure enumerating image layouts supported by an implementation for host memory copies',type='structs']
3769--
3770The sname:VkPhysicalDeviceHostImageCopyPropertiesEXT structure is defined
3771as:
3772
3773include::{generated}/api/structs/VkPhysicalDeviceHostImageCopyPropertiesEXT.adoc[]
3774
3775  * pname:sType is a elink:VkStructureType value identifying this structure.
3776  * pname:pNext is `NULL` or a pointer to a structure extending this
3777    structure.
3778  * pname:copySrcLayoutCount is an integer related to the number of image
3779    layouts for host copies from images available or queried, as described
3780    below.
3781  * pname:pCopySrcLayouts is a pointer to an array of elink:VkImageLayout in
3782    which supported image layouts for use with host copy operations from
3783    images are returned.
3784  * pname:copyDstLayoutCount is an integer related to the number of image
3785    layouts for host copies to images available or queried, as described
3786    below.
3787  * pname:pCopyDstLayouts is a pointer to an array of elink:VkImageLayout in
3788    which supported image layouts for use with host copy operations to
3789    images are returned.
3790  * pname:optimalTilingLayoutUUID is an array of ename:VK_UUID_SIZE
3791    code:uint8_t values representing a universally unique identifier for the
3792    implementation's swizzling layout of images created with
3793    ename:VK_IMAGE_TILING_OPTIMAL.
3794  * pname:identicalMemoryTypeRequirements indicates that specifying the
3795    ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT flag in
3796    slink:VkImageCreateInfo::pname:usage does not affect the memory type
3797    requirements of the image.
3798
3799:refpage: VkPhysicalDeviceHostImageCopyPropertiesEXT
3800include::{chapters}/limits.adoc[tag=limits_desc]
3801
3802If pname:pCopyDstLayouts is `NULL`, then the number of image layouts that
3803are supported in slink:VkCopyMemoryToImageInfoEXT::pname:dstImageLayout and
3804slink:VkCopyImageToImageInfoEXT::pname:dstImageLayout is returned in
3805pname:copyDstLayoutCount.
3806Otherwise, pname:copyDstLayoutCount must: be set by the user to the number
3807of elements in the pname:pCopyDstLayouts array, and on return the variable
3808is overwritten with the number of values actually written to
3809pname:pCopyDstLayouts.
3810If the value of pname:copyDstLayoutCount is less than the number of image
3811layouts that are supported, at most pname:copyDstLayoutCount values will be
3812written to pname:pCopyDstLayouts.
3813The implementation must: include the ename:VK_IMAGE_LAYOUT_GENERAL image
3814layout in pname:pCopyDstLayouts.
3815
3816If pname:pCopySrcLayouts is `NULL`, then the number of image layouts that
3817are supported in slink:VkCopyImageToMemoryInfoEXT::pname:srcImageLayout and
3818slink:VkCopyImageToImageInfoEXT::pname:srcImageLayout is returned in
3819pname:copySrcLayoutCount.
3820Otherwise, pname:copySrcLayoutCount must: be set by the user to the number
3821of elements in the pname:pCopySrcLayouts array, and on return the variable
3822is overwritten with the number of values actually written to
3823pname:pCopySrcLayouts.
3824If the value of pname:copySrcLayoutCount is less than the number of image
3825layouts that are supported, at most pname:copySrcLayoutCount values will be
3826written to pname:pCopySrcLayouts.
3827The implementation must: include the ename:VK_IMAGE_LAYOUT_GENERAL image
3828layout in pname:pCopySrcLayouts.
3829
3830The pname:optimalTilingLayoutUUID value can be used to ensure compatible
3831data layouts when using the ename:VK_HOST_IMAGE_COPY_MEMCPY_EXT flag in
3832flink:vkCopyMemoryToImageEXT and flink:vkCopyImageToMemoryEXT.
3833
3834include::{generated}/validity/structs/VkPhysicalDeviceHostImageCopyPropertiesEXT.adoc[]
3835--
3836endif::VK_EXT_host_image_copy[]
3837
3838ifdef::VK_HUAWEI_subpass_shading[]
3839[open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs']
3840--
3841The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is
3842defined as:
3843
3844include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.adoc[]
3845
3846  * pname:sType is a elink:VkStructureType value identifying this structure.
3847  * pname:pNext is `NULL` or a pointer to a structure extending this
3848    structure.
3849  * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]]
3850    pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum
3851    ratio between the width and height of the portion of the subpass shading
3852    shader workgroup size.
3853    pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two
3854    value, and must: be less than or equal to max(code:WorkgroupSize.x /
3855    code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x).
3856
3857:refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI
3858include::{chapters}/limits.adoc[tag=limits_desc]
3859
3860include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.adoc[]
3861--
3862endif::VK_HUAWEI_subpass_shading[]
3863
3864ifdef::VK_EXT_multi_draw[]
3865
3866[open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs']
3867--
3868The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as:
3869
3870include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.adoc[]
3871
3872The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure
3873describe the following features:
3874
3875  * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the
3876    maximum number of draw calls which can: be batched into a single
3877    multidraw.
3878
3879:refpage: VkPhysicalDeviceMultiDrawPropertiesEXT
3880include::{chapters}/limits.adoc[tag=limits_desc]
3881
3882include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.adoc[]
3883--
3884
3885endif::VK_EXT_multi_draw[]
3886
3887ifdef::VK_EXT_nested_command_buffer[]
3888
3889[open,refpage='VkPhysicalDeviceNestedCommandBufferPropertiesEXT',desc='Structure describing the nested command buffer limits of an implementation',type='structs']
3890--
3891The sname:VkPhysicalDeviceNestedCommandBufferPropertiesEXT structure is
3892defined as:
3893
3894include::{generated}/api/structs/VkPhysicalDeviceNestedCommandBufferPropertiesEXT.adoc[]
3895
3896The members of the sname:VkPhysicalDeviceNestedCommandBufferPropertiesEXT
3897structure describe the following features:
3898
3899  * [[limits-maxCommandBufferNestingLevel]]
3900    pname:maxCommandBufferNestingLevel indicates the maximum nesting level
3901    of calls to flink:vkCmdExecuteCommands from <<glossary, Secondary
3902    Command Buffers>>.
3903    A pname:maxCommandBufferNestingLevel of code:UINT32_MAX means there is
3904    no limit to the nesting level.
3905
3906:refpage: VkPhysicalDeviceNestedCommandBufferPropertiesEXT
3907include::{chapters}/limits.adoc[tag=limits_desc]
3908
3909include::{generated}/validity/structs/VkPhysicalDeviceNestedCommandBufferPropertiesEXT.adoc[]
3910--
3911
3912endif::VK_EXT_nested_command_buffer[]
3913
3914ifdef::VK_EXT_graphics_pipeline_library[]
3915[open,refpage='VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT',desc='Structure describing additional properties of graphics pipeline libraries',type='structs']
3916--
3917The sname:VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT structure is
3918defined as:
3919
3920include::{generated}/api/structs/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.adoc[]
3921
3922  * [[limits-graphicsPipelineLibraryFastLinking]]
3923    pname:graphicsPipelineLibraryFastLinking indicates whether fast linking
3924    of graphics pipelines is supported.
3925    If it is ename:VK_TRUE, creating a graphics pipeline entirely from
3926    pipeline libraries without
3927    ename:VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT is comparable in
3928    cost to recording a command in a command buffer.
3929  * [[limits-graphicsPipelineLibraryIndependentInterpolationDecoration]]
3930    pname:graphicsPipelineLibraryIndependentInterpolationDecoration
3931    indicates whether code:NoPerspective and code:Flat interpolation
3932    decorations in the last vertex processing stage and the fragment shader
3933    are required to match when using graphics pipeline libraries.
3934    If it is ename:VK_TRUE, the interpolation decorations do not need to
3935    match.
3936    If it is ename:VK_FALSE, these decorations must: either be present in
3937    both stages or neither stage in order for a given interface variable to
3938    match.
3939
3940:refpage: VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT
3941include::{chapters}/limits.adoc[tag=limits_desc]
3942
3943include::{generated}/validity/structs/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.adoc[]
3944--
3945
3946endif::VK_EXT_graphics_pipeline_library[]
3947ifdef::VK_KHR_fragment_shader_barycentric[]
3948
3949[open,refpage='VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR',desc='Structure describing fragment shader barycentric limits of an implementation',type='structs']
3950--
3951The sname:VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR structure
3952is defined as:
3953
3954include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.adoc[]
3955
3956  * [[limits-triStripVertexOrderIndependentOfProvokingVertex]] When the
3957    <<vertexpostproc-flatshading,provoking vertex mode>> is
3958    ename:VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, and the primitive order
3959    is odd in a triangle strip, the ordering of vertices is defined in
3960    <<primsrast-barycentric-order-table-last-vertex, last vertex table>>.
3961    pname:triStripVertexOrderIndependentOfProvokingVertex equal to
3962    ename:VK_TRUE indicates that the implementation ignores this and uses
3963    the vertex order defined by
3964    ename:VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT instead.
3965
3966:refpage: VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR
3967include::{chapters}/limits.adoc[tag=limits_desc]
3968
3969include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.adoc[]
3970--
3971
3972endif::VK_KHR_fragment_shader_barycentric[]
3973
3974ifdef::VK_EXT_shader_module_identifier[]
3975[open,refpage='VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT',desc='Structure describing shader module identifier properties of an implementation',type='structs']
3976--
3977The sname:VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT structure is
3978defined as:
3979
3980include::{generated}/api/structs/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.adoc[]
3981
3982The members of the sname:VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT
3983structure describe the following:
3984
3985  * [[limits-shaderModuleIdentifierAlgorithmUUID]]
3986    pname:shaderModuleIdentifierAlgorithmUUID is an array of
3987    ename:VK_UUID_SIZE code:uint8_t values which uniquely represents the
3988    algorithm used to compute an identifier in
3989    flink:vkGetShaderModuleIdentifierEXT and
3990    flink:vkGetShaderModuleCreateInfoIdentifierEXT.
3991    Implementations should: not change this value in different driver
3992    versions if the algorithm used to compute an identifier is the same.
3993
3994[NOTE]
3995.Note
3996====
3997The algorithm UUID may be the same in different ICDs if the algorithms are
3998guaranteed to produce the same results.
3999This may happen in driver stacks which support different kinds of hardware
4000with shared code.
4001
4002Khronos' conformance testing can not guarantee that
4003pname:shaderModuleIdentifierAlgorithmUUID values are actually unique, so
4004implementors should make their own best efforts to ensure that their UUID is
4005unlikely to conflict with other implementations which may use a different
4006algorithm.
4007In particular, hard-coded values which easily conflict, such as all-`0`
4008bits, should: never be used.
4009Hard-coded values are acceptable if best effort is ensured that the value
4010will not accidentally conflict.
4011====
4012
4013:refpage: VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT
4014include::{chapters}/limits.adoc[tag=limits_desc]
4015
4016include::{generated}/validity/structs/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.adoc[]
4017--
4018
4019endif::VK_EXT_shader_module_identifier[]
4020
4021ifdef::VK_EXT_pipeline_robustness[]
4022[open,refpage='VkPhysicalDevicePipelineRobustnessPropertiesEXT',desc='Structure describing the default robustness behavior of a physical device',type='structs']
4023--
4024The sname:VkPhysicalDevicePipelineRobustnessPropertiesEXT structure is
4025defined as:
4026
4027include::{generated}/api/structs/VkPhysicalDevicePipelineRobustnessPropertiesEXT.adoc[]
4028
4029  * pname:sType is a elink:VkStructureType value identifying this structure.
4030  * pname:pNext is `NULL` or a pointer to a structure extending this
4031    structure.
4032  * pname:defaultRobustnessStorageBuffers describes the behaviour of out of
4033    bounds accesses made to storage buffers when no robustness features are
4034    enabled
4035  * pname:defaultRobustnessUniformBuffers describes the behaviour of out of
4036    bounds accesses made to uniform buffers when no robustness features are
4037    enabled
4038  * pname:defaultRobustnessVertexInputs describes the behaviour of out of
4039    bounds accesses made to vertex input attributes when no robustness
4040    features are enabled
4041  * pname:defaultRobustnessImages describes the behaviour of out of bounds
4042    accesses made to images when no robustness features are enabled
4043
4044Some implementations of Vulkan may be able to guarantee that certain types
4045of accesses are always performed with robustness even when the Vulkan API's
4046robustness features are not explicitly enabled.
4047
4048Even when an implementation reports that accesses to a given resource type
4049are robust by default, it remains invalid to make an out of bounds access
4050without requesting the appropriate robustness feature.
4051
4052:refpage: VkPhysicalDevicePipelineRobustnessPropertiesEXT
4053include::{chapters}/limits.adoc[tag=limits_desc]
4054
4055include::{generated}/validity/structs/VkPhysicalDevicePipelineRobustnessPropertiesEXT.adoc[]
4056--
4057endif::VK_EXT_pipeline_robustness[]
4058
4059ifdef::VK_EXT_extended_dynamic_state3[]
4060
4061[open,refpage='VkPhysicalDeviceExtendedDynamicState3PropertiesEXT',desc='Structure describing capabilities of extended dynamic state',type='structs']
4062--
4063The sname:VkPhysicalDeviceExtendedDynamicState3PropertiesEXT structure is
4064defined as:
4065
4066include::{generated}/api/structs/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.adoc[]
4067
4068  * [[limits-dynamicPrimitiveTopologyUnrestricted]]
4069    pname:dynamicPrimitiveTopologyUnrestricted indicates that the
4070    implementation allows fname:vkCmdSetPrimitiveTopology to use a different
4071    <<drawing-primitive-topology-class, primitive topology class>> to the
4072    one specified in the active graphics pipeline.
4073
4074:refpage: VkPhysicalDeviceExtendedDynamicState3PropertiesEXT
4075include::{chapters}/limits.adoc[tag=limits_desc]
4076
4077include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.adoc[]
4078--
4079
4080endif::VK_EXT_extended_dynamic_state3[]
4081
4082ifdef::VK_NV_optical_flow[]
4083[open,refpage='VkPhysicalDeviceOpticalFlowPropertiesNV',desc='Structure describing properties supported by VK_NV_optical_flow',type='structs']
4084--
4085The sname:VkPhysicalDeviceOpticalFlowPropertiesNV structure is defined as:
4086
4087include::{generated}/api/structs/VkPhysicalDeviceOpticalFlowPropertiesNV.adoc[]
4088
4089  * pname:sType is a elink:VkStructureType value identifying this structure.
4090  * pname:pNext is `NULL` or a pointer to a structure extending this
4091    structure.
4092  * [[limits-supportedOutputGridSizes]] pname:supportedOutputGridSizes are
4093    the supported tlink:VkOpticalFlowGridSizeFlagsNV which can be specified
4094    in sname:VkOpticalFlowSessionCreateInfoNV::pname:outputGridSize.
4095  * [[limits-supportedHintGridSizes]] pname:supportedHintGridSizes are the
4096    supported tlink:VkOpticalFlowGridSizeFlagsNV which can be specified in
4097    sname:VkOpticalFlowSessionCreateInfoNV::pname:hintGridSize.
4098  * [[limits-hintSupported]] pname:hintSupported is a boolean describing
4099    whether using hint flow vector map is supported in an optical flow
4100    session.
4101  * [[limits-costSupported]] pname:costSupported is a boolean describing
4102    whether cost map generation is supported in an optical flow session.
4103  * [[limits-bidirectionalFlowSupported]] pname:bidirectionalFlowSupported
4104    is a boolean describing whether bi-directional flow generation is
4105    supported in an optical flow session.
4106  * [[limits-globalFlowSupported]] pname:globalFlowSupported is a boolean
4107    describing whether global flow vector map generation is supported in an
4108    optical flow session.
4109  * [[limits-minWidth]] pname:minWidth is the minimum width in pixels for
4110    images used in an optical flow session.
4111  * [[limits-minHeight]] pname:minHeight is the minimum height in pixels for
4112    images used in an optical flow session.
4113  * [[limits-maxWidth]] pname:maxWidth is the maximum width in pixels for
4114    images used in an optical flow session.
4115  * [[limits-maxHeight]] pname:maxHeight is the maximum height in pixels for
4116    images used in an optical flow session.
4117  * [[limits-maxNumRegionsOfInterest]] pname:maxNumRegionsOfInterest is the
4118    maximum number of regions of interest which can be used in an optical
4119    flow session.
4120    If this pname:maxNumRegionsOfInterest is 0, regions of interest are not
4121    supported in an optical flow session.
4122
4123:refpage: VkPhysicalDeviceOpticalFlowPropertiesNV
4124include::{chapters}/limits.adoc[tag=limits_desc]
4125
4126include::{generated}/validity/structs/VkPhysicalDeviceOpticalFlowPropertiesNV.adoc[]
4127--
4128endif::VK_NV_optical_flow[]
4129
4130ifdef::VK_EXT_opacity_micromap[]
4131[open,refpage='VkPhysicalDeviceOpacityMicromapPropertiesEXT',desc='Structure describing the opacity micromap properties of a physical device',type='structs']
4132--
4133The sname:VkPhysicalDeviceOpacityMicromapPropertiesEXT structure is defined
4134as:
4135
4136include::{generated}/api/structs/VkPhysicalDeviceOpacityMicromapPropertiesEXT.adoc[]
4137
4138  * pname:sType is a elink:VkStructureType value identifying this structure.
4139  * pname:pNext is `NULL` or a pointer to a structure extending this
4140    structure.
4141  * pname:maxOpacity2StateSubdivisionLevel is the maximum allowed
4142    pname:subdivisionLevel when pname:format is
4143    ename:VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT
4144  * pname:maxOpacity4StateSubdivisionLevel is the maximum allowed
4145    pname:subdivisionLevel when pname:format is
4146    ename:VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT
4147
4148:refpage: VkPhysicalDeviceOpacityMicromapPropertiesEXT
4149include::{chapters}/limits.adoc[tag=limits_desc]
4150
4151include::{generated}/validity/structs/VkPhysicalDeviceOpacityMicromapPropertiesEXT.adoc[]
4152--
4153endif::VK_EXT_opacity_micromap[]
4154
4155ifdef::VK_NV_displacement_micromap[]
4156[open,refpage='VkPhysicalDeviceDisplacementMicromapPropertiesNV',desc='Structure describing the displacement micromap properties of a physical device',type='structs']
4157--
4158The sname:VkPhysicalDeviceDisplacementMicromapPropertiesNV structure is
4159defined as:
4160
4161include::{generated}/api/structs/VkPhysicalDeviceDisplacementMicromapPropertiesNV.adoc[]
4162
4163  * pname:sType is a elink:VkStructureType value identifying this structure.
4164  * pname:pNext is `NULL` or a pointer to a structure extending this
4165    structure.
4166  * pname:maxDisplacementMicromapSubdivisionLevel is the maximum allowed
4167    pname:subdivisionLevel for displacement micromaps.
4168
4169:refpage: VkPhysicalDeviceDisplacementMicromapPropertiesNV
4170include::{chapters}/limits.adoc[tag=limits_desc]
4171
4172include::{generated}/validity/structs/VkPhysicalDeviceDisplacementMicromapPropertiesNV.adoc[]
4173--
4174endif::VK_NV_displacement_micromap[]
4175
4176ifdef::VK_ARM_shader_core_builtins[]
4177[open,refpage='VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM',desc='Structure describing shader core builtins properties supported by an implementation',type='structs']
4178--
4179The sname:VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM structure is
4180defined as:
4181
4182include::{generated}/api/structs/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.adoc[]
4183
4184  * pname:sType is a elink:VkStructureType value identifying this structure.
4185  * pname:pNext is `NULL` or a pointer to a structure extending this
4186    structure.
4187  * [[limits-shaderCoreMask]] pname:shaderCoreMask is a bitfield where each
4188    bit set represents the presence of a shader core whose ID is the bit
4189    position.
4190    The highest ID for any shader core on the device is the position of the
4191    most significant bit set.
4192  * [[limits-shaderCoreCount]] pname:shaderCoreCount is the number of shader
4193    cores on the device.
4194  * [[limits-shaderWarpsPerCore]] pname:shaderWarpsPerCore is the maximum
4195    number of simultaneously executing warps on a shader core.
4196
4197:refpage: VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM
4198include::{chapters}/limits.adoc[tag=limits_desc]
4199
4200include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.adoc[]
4201--
4202endif::VK_ARM_shader_core_builtins[]
4203
4204ifdef::VK_NV_ray_tracing_invocation_reorder[]
4205[open,refpage='VkRayTracingInvocationReorderModeNV',desc='Enum providing a hint on how the application may: reorder',type='enums']
4206--
4207Values which may: be returned in the
4208pname:rayTracingInvocationReorderReorderingHint field of
4209sname:VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV are:
4210
4211include::{generated}/api/enums/VkRayTracingInvocationReorderModeNV.adoc[]
4212
4213  * ename:VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV indicates that the
4214    implementation is likely to not reorder at reorder calls.
4215  * ename:VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV indicates that
4216    the implementation is likely to reorder at reorder calls.
4217--
4218
4219[open,refpage='VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV',desc='Structure describing shader module identifier properties of an implementation',type='structs']
4220--
4221The sname:VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV structure
4222is defined as:
4223
4224include::{generated}/api/structs/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.adoc[]
4225
4226  * pname:rayTracingInvocationReorderReorderingHint is a hint indicating if
4227    the implementation will actually reorder at the reorder calls.
4228
4229[NOTE]
4230.Note
4231====
4232Because the extension changes how hits are managed there is a compatibility
4233reason to expose the extension even when an implementation does not have
4234sorting active.
4235====
4236
4237:refpage: VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV
4238include::{chapters}/limits.adoc[tag=limits_desc]
4239
4240include::{generated}/validity/structs/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.adoc[]
4241--
4242endif::VK_NV_ray_tracing_invocation_reorder[]
4243
4244ifdef::VK_HUAWEI_cluster_culling_shader[]
4245[open,refpage='VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI',desc='Structure describing cluster culling shader properties supported by an implementation',type='structs']
4246--
4247The sname:VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI structure is
4248defined as:
4249
4250include::{generated}/api/structs/VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI.adoc[]
4251
4252  * pname:sType is a elink:VkStructureType value identifying this structure.
4253  * pname:pNext is `NULL` or a pointer to a structure extending this
4254    structure.
4255  * pname:maxWorkGroupCount[3] is the maximum number of local workgroups
4256    that can be launched by a single command.
4257    These three value represent the maximum local workgroup count in the X,
4258    Y and Z dimensions, respectively.
4259    In the current implementation, the values of Y and Z are both implicitly
4260    set as one.
4261    groupCountX of DrawCluster command must be less than or equal to
4262    maxWorkGroupCount[0].
4263  * pname:maxWorkGroupSize[3] is the maximum size of a local workgroup.
4264    These three value represent the maximum local workgroup size in the X, Y
4265    and Z dimensions, respectively.
4266    The x, y and z sizes, as specified by the code:LocalSize
4267ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[or code:LocalSizeId]
4268    execution mode or by the object decorated by the WorkgroupSize
4269    decoration in shader modules, must be less than or equal to the
4270    corresponding limit.
4271    In the current implementation, the maximum workgroup size of the X
4272    dimension is 32, the others are 1.
4273  * pname:maxOutputClusterCount is the maximum number of output cluster a
4274    single cluster culling shader workgroup can emit.
4275  * pname:indirectBufferOffsetAlignment indicates the alignment for cluster
4276    drawing command buffer stride.
4277    flink:vkCmdDrawClusterIndirectHUAWEI::pname:offset must be a multiple of
4278    this value.
4279
4280:refpage: VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI
4281include::{chapters}/limits.adoc[tag=limits_desc]
4282
4283include::{generated}/validity/structs/VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI.adoc[]
4284--
4285endif::VK_HUAWEI_cluster_culling_shader[]
4286
4287ifdef::VK_ARM_shader_core_properties[]
4288[open,refpage='VkPhysicalDeviceShaderCorePropertiesARM',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
4289--
4290The sname:VkPhysicalDeviceShaderCorePropertiesARM structure is defined as:
4291
4292include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesARM.adoc[]
4293
4294  * pname:sType is a elink:VkStructureType value identifying this structure.
4295  * pname:pNext is `NULL` or a pointer to a structure extending this
4296    structure.
4297  * pname:pixelRate is an unsigned integer value indicating the maximum
4298    number of pixels output per clock per shader core.
4299  * pname:texelRate is an unsigned integer value indicating the maximum
4300    number of texels per clock per shader core.
4301  * pname:fmaRate is an unsigned integer value indicating the maximum number
4302    of single-precision fused multiply-add operations per clock per shader
4303    core.
4304
4305If a throughput rate cannot be determined on the physical device, the value
4306`0` will be returned for that rate.
4307
4308:refpage: VkPhysicalDeviceShaderCorePropertiesARM
4309include::{chapters}/limits.adoc[tag=limits_desc]
4310
4311include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesARM.adoc[]
4312--
4313endif::VK_ARM_shader_core_properties[]
4314
4315ifdef::VK_EXT_shader_object[]
4316[open,refpage='VkPhysicalDeviceShaderObjectPropertiesEXT',desc='Structure describing shader object properties supported by an implementation',type='structs']
4317--
4318The sname:VkPhysicalDeviceShaderObjectPropertiesEXT structure is defined as:
4319
4320include::{generated}/api/structs/VkPhysicalDeviceShaderObjectPropertiesEXT.adoc[]
4321
4322  * pname:sType is a elink:VkStructureType value identifying this structure.
4323  * pname:pNext is `NULL` or a pointer to a structure extending this
4324    structure.
4325  * [[limits-shaderBinaryUUID]] pname:shaderBinaryUUID is an array of
4326    ename:VK_UUID_SIZE code:uint8_t values representing a universally unique
4327    identifier for one or more implementations whose shader binaries are
4328    guaranteed to be compatible with each other.
4329  * [[limits-shaderBinaryVersion]] pname:shaderBinaryVersion is an unsigned
4330    integer incremented to represent backwards compatible differences
4331    between implementations with the same pname:shaderBinaryUUID.
4332
4333The purpose and usage of the values of this structure are described in
4334greater detail in <<shaders-objects-binary-compatibility, Binary Shader
4335Compatibility>>.
4336
4337:refpage: VkPhysicalDeviceShaderObjectPropertiesEXT
4338include::{chapters}/limits.adoc[tag=limits_desc]
4339
4340include::{generated}/validity/structs/VkPhysicalDeviceShaderObjectPropertiesEXT.adoc[]
4341--
4342endif::VK_EXT_shader_object[]
4343
4344
4345ifdef::VK_AMDX_shader_enqueue[]
4346[open,refpage='VkPhysicalDeviceShaderEnqueuePropertiesAMDX',desc='Structure describing shader enqueue limits of an implementation',type='structs']
4347--
4348The sname:VkPhysicalDeviceShaderEnqueuePropertiesAMDX structure is defined
4349as:
4350
4351include::{generated}/api/structs/VkPhysicalDeviceShaderEnqueuePropertiesAMDX.adoc[]
4352
4353The members of the sname:VkPhysicalDeviceShaderEnqueuePropertiesAMDX
4354structure describe the following limits:
4355
4356  * pname:sType is a elink:VkStructureType value identifying this structure.
4357  * pname:pNext is `NULL` or a pointer to a structure extending this
4358    structure.
4359  * [[limits-maxExecutionGraphDepth]] pname:maxExecutionGraphDepth defines
4360    the maximum node chain depth in the graph.
4361    The dispatched node is at depth 1 and the node enqueued by it is at
4362    depth 2, and so on.
4363    If a node enqueues itself, each recursive enqueue increases the depth by
4364    1 as well.
4365  * [[limits-maxExecutionGraphShaderOutputNodes]]
4366    pname:maxExecutionGraphShaderOutputNodes specifies the maximum number of
4367    unique nodes that can be dispatched from a single shader, and must be at
4368    least 256.
4369  * [[limits-maxExecutionGraphShaderPayloadSize]]
4370    pname:maxExecutionGraphShaderPayloadSize specifies the maximum total
4371    size of payload declarations in a shader.
4372    For any payload declarations that share resources, indicated by
4373    code:NodeSharesPayloadLimitsWithAMDX decorations, the maximum size of
4374    each set of shared payload declarations is taken.
4375    The sum of each shared set's maximum size and the size of each unshared
4376    payload is counted against this limit.
4377  * [[limits-maxExecutionGraphShaderPayloadCount]]
4378    pname:maxExecutionGraphShaderPayloadCount specifies the maximum number
4379    of output payloads that can be initialized in a single workgroup.
4380  * [[limits-executionGraphDispatchAddressAlignment]]
4381    pname:executionGraphDispatchAddressAlignment specifies the alignment of
4382    non-scratch basetype:VkDeviceAddress arguments consumed by graph
4383    dispatch commands.
4384
4385:refpage: VkPhysicalDeviceShaderEnqueuePropertiesAMDX
4386include::{chapters}/limits.adoc[tag=limits_desc]
4387
4388include::{generated}/validity/structs/VkPhysicalDeviceShaderEnqueuePropertiesAMDX.adoc[]
4389--
4390endif::VK_AMDX_shader_enqueue[]
4391
4392ifdef::VK_NV_extended_sparse_address_space[]
4393[open,refpage='VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV',desc='Structure describing sparse address space limits of an implementation',type='structs']
4394--
4395The sname:VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV structure
4396is defined as:
4397
4398include::{generated}/api/structs/VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.adoc[]
4399
4400  * pname:sType is a elink:VkStructureType value identifying this structure.
4401  * pname:pNext is `NULL` or a pointer to a structure extending this
4402    structure.
4403  * [[limits-extendedSparseAddressSpaceSize]]
4404    pname:extendedSparseAddressSpaceSize is the total amount of address
4405    space available, in bytes, for sparse memory resources of all usages if
4406    the <<features-extendedSparseAddressSpace,
4407    pname:extendedSparseAddressSpace>> feature is enabled.
4408    This must: be greater than or equal to
4409    sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize, and the
4410    difference in space must: only be used with usages allowed below.
4411    This is an upper bound on the sum of the sizes of all sparse resources,
4412    regardless of whether any memory is bound to them.
4413  * [[limits-extendedSparseImageUsageFlags]]
4414    pname:extendedSparseImageUsageFlags is a bitmask of
4415    elink:VkImageUsageFlagBits of usages which may: allow an implementation
4416    to use the full pname:extendedSparseAddressSpaceSize space.
4417  * [[limits-extendedSparseBufferUsageFlags]]
4418    pname:extendedSparseBufferUsageFlags is a bitmask of
4419    elink:VkBufferUsageFlagBits of usages which may: allow an implementation
4420    to use the full pname:extendedSparseAddressSpaceSize space.
4421
4422:refpage: VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV
4423include::{chapters}/limits.adoc[tag=limits_desc]
4424
4425include::{generated}/validity/structs/VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.adoc[]
4426--
4427endif::VK_NV_extended_sparse_address_space[]
4428
4429ifdef::VK_NV_cuda_kernel_launch[]
4430[open,refpage='VkPhysicalDeviceCudaKernelLaunchPropertiesNV',desc='Structure describing the compute capability version available',type='structs']
4431--
4432The sname:VkPhysicalDeviceCudaKernelLaunchPropertiesNV structure is defined
4433as:
4434
4435include::{generated}/api/structs/VkPhysicalDeviceCudaKernelLaunchPropertiesNV.adoc[]
4436
4437The members of the sname:VkPhysicalDeviceCudaKernelLaunchPropertiesNV
4438structure describe the following features:
4439
4440  * [[limits-computeCapabilityMinor]] pname:computeCapabilityMinor indicates
4441    the minor version number of the compute code.
4442  * [[limits-computeCapabilityMajor]] pname:computeCapabilityMajor indicates
4443    the major version number of the compute code.
4444
4445:refpage: VkPhysicalDeviceCudaKernelLaunchPropertiesNV
4446include::{chapters}/limits.adoc[tag=limits_desc]
4447
4448include::{generated}/validity/structs/VkPhysicalDeviceCudaKernelLaunchPropertiesNV.adoc[]
4449--
4450endif::VK_NV_cuda_kernel_launch[]
4451
4452ifdef::VK_ANDROID_external_format_resolve[]
4453[open,refpage='VkPhysicalDeviceExternalFormatResolvePropertiesANDROID',desc='Structure describing external format resolve supported by an implementation',type='structs']
4454--
4455The sname:VkPhysicalDeviceExternalFormatResolvePropertiesANDROID structure
4456is defined as:
4457
4458include::{generated}/api/structs/VkPhysicalDeviceExternalFormatResolvePropertiesANDROID.adoc[]
4459
4460  * pname:sType is a elink:VkStructureType value identifying this structure.
4461  * pname:pNext is `NULL` or a pointer to a structure extending this
4462    structure.
4463  * [[limits-nullColorAttachmentWithExternalFormatResolve]]
4464    pname:nullColorAttachmentWithExternalFormatResolve indicates that there
4465    must: be no color attachment image when performing external format
4466    resolves if it is ename:VK_TRUE.
4467  * [[limits-externalFormatResolveChromaOffsetX]]
4468    pname:externalFormatResolveChromaOffsetX indicates the
4469    elink:VkChromaLocation that an implementation uses in the X axis for
4470    accesses to an external format image as a resolve attachment.
4471    This must: be consistent between external format resolves and load
4472    operations from external format resolve attachments to color attachments
4473    when pname:nullColorAttachmentWithExternalFormatResolve is
4474    ename:VK_TRUE.
4475  * [[limits-externalFormatResolveChromaOffsetY]]
4476    pname:externalFormatResolveChromaOffsetY indicates the
4477    elink:VkChromaLocation that an implementation uses in the Y axis for
4478    accesses to an external format image as a resolve attachment.
4479    This must: be consistent between external format resolves and load
4480    operations from external format resolve attachments to color attachments
4481    when pname:nullColorAttachmentWithExternalFormatResolve is
4482    ename:VK_TRUE.
4483
4484:refpage: VkPhysicalDeviceExternalFormatResolvePropertiesANDROID
4485include::{chapters}/limits.adoc[tag=limits_desc]
4486
4487include::{generated}/validity/structs/VkPhysicalDeviceExternalFormatResolvePropertiesANDROID.adoc[]
4488--
4489endif::VK_ANDROID_external_format_resolve[]
4490
4491ifdef::VK_ARM_render_pass_striped[]
4492
4493[open,refpage='VkPhysicalDeviceRenderPassStripedPropertiesARM',desc='Structure describing striped rendering limits of an implementation',type='structs']
4494--
4495The sname:VkPhysicalDeviceRenderPassStripedPropertiesARM structure is
4496defined as:
4497
4498include::{generated}/api/structs/VkPhysicalDeviceRenderPassStripedPropertiesARM.adoc[]
4499
4500The members of the sname:VkPhysicalDeviceRenderPassStripedPropertiesARM
4501structure describe the following limits:
4502
4503  * pname:sType is a elink:VkStructureType value identifying this structure.
4504  * pname:pNext is `NULL` or a pointer to a structure extending this
4505    structure.
4506  * [[limits-renderPassStripeGranularity]] pname:renderPassStripeGranularity
4507    indicates the minimum supported granularity of striped render pass
4508    regions.
4509  * [[limits-maxRenderPassStripes]] pname:maxRenderPassStripes indicates the
4510    maximum number of stripes supported in striped rendering.
4511
4512:refpage: VkPhysicalDeviceRenderPassStripedPropertiesARM
4513include::{chapters}/limits.adoc[tag=limits_desc]
4514
4515include::{generated}/validity/structs/VkPhysicalDeviceRenderPassStripedPropertiesARM.adoc[]
4516--
4517
4518endif::VK_ARM_render_pass_striped[]
4519
4520[[limits-minmax]]
4521== Limit Requirements
4522
4523The following table specifies the required: minimum/maximum for all Vulkan
4524graphics implementations.
4525Where a limit corresponds to a fine-grained device feature which is
4526optional:, the feature name is listed with two required: limits, one when
4527the feature is supported and one when it is not supported.
4528If an implementation supports a feature, the limits reported are the same
4529whether or not the feature is enabled.
4530
4531[[limits-types]]
4532.Required Limit Types
4533[width="100%",cols="<20%,<50%,<30%",options="header"]
4534|====
4535| Type                     | Limit                                      | Feature
4536| code:uint32_t            | pname:maxImageDimension1D                  | -
4537| code:uint32_t            | pname:maxImageDimension2D                  | -
4538| code:uint32_t            | pname:maxImageDimension3D                  | -
4539| code:uint32_t            | pname:maxImageDimensionCube                | -
4540| code:uint32_t            | pname:maxImageArrayLayers                  | -
4541| code:uint32_t            | pname:maxTexelBufferElements               | -
4542| code:uint32_t            | pname:maxUniformBufferRange                | -
4543| code:uint32_t            | pname:maxStorageBufferRange                | -
4544| code:uint32_t            | pname:maxPushConstantsSize                 | -
4545| code:uint32_t            | pname:maxMemoryAllocationCount             | -
4546| code:uint32_t            | pname:maxSamplerAllocationCount            | -
4547| basetype:VkDeviceSize    | pname:bufferImageGranularity               | -
4548| basetype:VkDeviceSize    | pname:sparseAddressSpaceSize               | pname:sparseBinding
4549| code:uint32_t            | pname:maxBoundDescriptorSets               | -
4550| code:uint32_t            | pname:maxPerStageDescriptorSamplers        | -
4551| code:uint32_t            | pname:maxPerStageDescriptorUniformBuffers  | -
4552| code:uint32_t            | pname:maxPerStageDescriptorStorageBuffers  | -
4553| code:uint32_t            | pname:maxPerStageDescriptorSampledImages   | -
4554| code:uint32_t            | pname:maxPerStageDescriptorStorageImages   | -
4555| code:uint32_t            | pname:maxPerStageDescriptorInputAttachments| -
4556| code:uint32_t            | pname:maxPerStageResources                 | -
4557| code:uint32_t            | pname:maxDescriptorSetSamplers             | -
4558| code:uint32_t            | pname:maxDescriptorSetUniformBuffers       | -
4559| code:uint32_t            | pname:maxDescriptorSetUniformBuffersDynamic| -
4560| code:uint32_t            | pname:maxDescriptorSetStorageBuffers       | -
4561| code:uint32_t            | pname:maxDescriptorSetStorageBuffersDynamic| -
4562| code:uint32_t            | pname:maxDescriptorSetSampledImages        | -
4563| code:uint32_t            | pname:maxDescriptorSetStorageImages        | -
4564| code:uint32_t            | pname:maxDescriptorSetInputAttachments     | -
4565| code:uint32_t            | pname:maxVertexInputAttributes             | -
4566| code:uint32_t            | pname:maxVertexInputBindings               | -
4567| code:uint32_t            | pname:maxVertexInputAttributeOffset        | -
4568| code:uint32_t            | pname:maxVertexInputBindingStride          | -
4569| code:uint32_t            | pname:maxVertexOutputComponents            | -
4570| code:uint32_t            | pname:maxTessellationGenerationLevel       | pname:tessellationShader
4571| code:uint32_t            | pname:maxTessellationPatchSize             | pname:tessellationShader
4572| code:uint32_t            | pname:maxTessellationControlPerVertexInputComponents  | pname:tessellationShader
4573| code:uint32_t            | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader
4574| code:uint32_t            | pname:maxTessellationControlPerPatchOutputComponents  | pname:tessellationShader
4575| code:uint32_t            | pname:maxTessellationControlTotalOutputComponents     | pname:tessellationShader
4576| code:uint32_t            | pname:maxTessellationEvaluationInputComponents        | pname:tessellationShader
4577| code:uint32_t            | pname:maxTessellationEvaluationOutputComponents       | pname:tessellationShader
4578| code:uint32_t            | pname:maxGeometryShaderInvocations         | pname:geometryShader
4579| code:uint32_t            | pname:maxGeometryInputComponents           | pname:geometryShader
4580| code:uint32_t            | pname:maxGeometryOutputComponents          | pname:geometryShader
4581| code:uint32_t            | pname:maxGeometryOutputVertices            | pname:geometryShader
4582| code:uint32_t            | pname:maxGeometryTotalOutputComponents     | pname:geometryShader
4583| code:uint32_t            | pname:maxFragmentInputComponents           | -
4584| code:uint32_t            | pname:maxFragmentOutputAttachments         | -
4585| code:uint32_t            | pname:maxFragmentDualSrcAttachments        | pname:dualSrcBlend
4586| code:uint32_t            | pname:maxFragmentCombinedOutputResources   | -
4587| code:uint32_t            | pname:maxComputeSharedMemorySize           | -
4588| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupCount             | -
4589| code:uint32_t            | pname:maxComputeWorkGroupInvocations       | -
4590| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupSize              | -
4591| code:uint32_t            | pname:subPixelPrecisionBits                | -
4592| code:uint32_t            | pname:subTexelPrecisionBits                | -
4593| code:uint32_t            | pname:mipmapPrecisionBits                  | -
4594| code:uint32_t            | pname:maxDrawIndexedIndexValue             | pname:fullDrawIndexUint32
4595| code:uint32_t            | pname:maxDrawIndirectCount                 | pname:multiDrawIndirect
4596| code:float               | pname:maxSamplerLodBias                    | -
4597| code:float               | pname:maxSamplerAnisotropy                 | pname:samplerAnisotropy
4598| code:uint32_t            | pname:maxViewports                         | pname:multiViewport
4599| 2 {times} code:uint32_t  | pname:maxViewportDimensions                | -
4600| 2 {times} code:float     | pname:viewportBoundsRange                  | -
4601| code:uint32_t            | pname:viewportSubPixelBits                 | -
4602| code:size_t              | pname:minMemoryMapAlignment                | -
4603| basetype:VkDeviceSize    | pname:minTexelBufferOffsetAlignment        | -
4604| basetype:VkDeviceSize    | pname:minUniformBufferOffsetAlignment      | -
4605| basetype:VkDeviceSize    | pname:minStorageBufferOffsetAlignment      | -
4606| code:int32_t             | pname:minTexelOffset                       | -
4607| code:uint32_t            | pname:maxTexelOffset                       | -
4608| code:int32_t             | pname:minTexelGatherOffset                 | pname:shaderImageGatherExtended
4609| code:uint32_t            | pname:maxTexelGatherOffset                 | pname:shaderImageGatherExtended
4610| code:float               | pname:minInterpolationOffset               | pname:sampleRateShading
4611| code:float               | pname:maxInterpolationOffset               | pname:sampleRateShading
4612| code:uint32_t            | pname:subPixelInterpolationOffsetBits      | pname:sampleRateShading
4613| code:uint32_t            | pname:maxFramebufferWidth                  | -
4614| code:uint32_t            | pname:maxFramebufferHeight                 | -
4615| code:uint32_t            | pname:maxFramebufferLayers                 |
4616ifdef::VKSC_VERSION_1_0[pname:geometryShader, pname:shaderOutputLayer]
4617ifndef::VKSC_VERSION_1_0[-]
4618| tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts         | -
4619ifdef::VK_VERSION_1_2[]
4620| tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts  | -
4621endif::VK_VERSION_1_2[]
4622| tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts         | -
4623| tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts       | -
4624| tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | -
4625| code:uint32_t            | pname:maxColorAttachments                  | -
4626| tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts        | -
4627| tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts      | -
4628| tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts        | -
4629| tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts      | -
4630| tlink:VkSampleCountFlags | pname:storageImageSampleCounts             | pname:shaderStorageImageMultisample
4631| code:uint32_t            | pname:maxSampleMaskWords                   | -
4632| basetype:VkBool32        | pname:timestampComputeAndGraphics          | -
4633| code:float               | pname:timestampPeriod                      | -
4634| code:uint32_t            | pname:maxClipDistances                     | pname:shaderClipDistance
4635| code:uint32_t            | pname:maxCullDistances                     | pname:shaderCullDistance
4636| code:uint32_t            | pname:maxCombinedClipAndCullDistances      | pname:shaderCullDistance
4637| code:uint32_t            | pname:discreteQueuePriorities              | -
4638| 2 {times} code:float     | pname:pointSizeRange                       | pname:largePoints
4639| 2 {times} code:float     | pname:lineWidthRange                       | pname:wideLines
4640| code:float               | pname:pointSizeGranularity                 | pname:largePoints
4641| code:float               | pname:lineWidthGranularity                 | pname:wideLines
4642| basetype:VkBool32        | pname:strictLines                          | -
4643| basetype:VkBool32        | pname:standardSampleLocations              | -
4644| basetype:VkDeviceSize    | pname:optimalBufferCopyOffsetAlignment     | -
4645| basetype:VkDeviceSize    | pname:optimalBufferCopyRowPitchAlignment   | -
4646| basetype:VkDeviceSize    | pname:nonCoherentAtomSize                  | -
4647ifdef::VK_EXT_discard_rectangles[]
4648| code:uint32_t            | pname:maxDiscardRectangles                 | `apiext:VK_EXT_discard_rectangles`
4649endif::VK_EXT_discard_rectangles[]
4650ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
4651| basetype:VkBool32        | pname:filterMinmaxSingleComponentFormats   |
4652ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax, pname:samplerFilterMinmax>>` ]
4653ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
4654| basetype:VkBool32        | pname:filterMinmaxImageComponentMapping    |
4655ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax, pname:samplerFilterMinmax>>` ]
4656ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
4657endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
4658ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
4659| basetype:VkDeviceSize    | pname:maxBufferSize                        | `<<features-maintenance4, pname:maintenance4>>`
4660endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
4661ifdef::VK_EXT_conservative_rasterization[]
4662| code:float           | pname:primitiveOverestimationSize                 | `apiext:VK_EXT_conservative_rasterization`
4663| basetype:VkBool32        | pname:maxExtraPrimitiveOverestimationSize         | `apiext:VK_EXT_conservative_rasterization`
4664| code:float           | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization`
4665| basetype:VkBool32        | pname:degenerateTriangleRasterized                | `apiext:VK_EXT_conservative_rasterization`
4666| code:float           | pname:degenerateLinesRasterized                   | `apiext:VK_EXT_conservative_rasterization`
4667| basetype:VkBool32        | pname:fullyCoveredFragmentShaderInputVariable     | `apiext:VK_EXT_conservative_rasterization`
4668| basetype:VkBool32        | pname:conservativeRasterizationPostDepthCoverage  | `apiext:VK_EXT_conservative_rasterization`
4669endif::VK_EXT_conservative_rasterization[]
4670ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
4671| code:uint32_t     | pname:maxUpdateAfterBindDescriptorsInAllPools             | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4672| basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative    | -
4673| basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative     | -
4674| basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative    | -
4675| basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative     | -
4676| basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative  | -
4677| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSamplers        | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4678| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4679| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4680| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4681| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4682| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4683| code:uint32_t     | pname:maxPerStageUpdateAfterBindResources                 | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4684| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSamplers             | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4685| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4686| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4687| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4688| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4689| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSampledImages        | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4690| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageImages        | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4691| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInputAttachments     | `<<features-descriptorIndexing, pname:descriptorIndexing>>`
4692endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
4693ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
4694| code:uint32_t     | pname:maxInlineUniformBlockSize                               |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
4695| code:uint32_t     | pname:maxPerStageDescriptorInlineUniformBlocks                |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
4696| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
4697| code:uint32_t     | pname:maxDescriptorSetInlineUniformBlocks                     |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
4698| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
4699endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
4700ifdef::VK_VERSION_1_3[]
4701| code:uint32_t     | pname:maxInlineUniformTotalSize                               |`<<features-inlineUniformBlock, pname:inlineUniformBlock>>`
4702endif::VK_VERSION_1_3[]
4703ifdef::VK_EXT_vertex_attribute_divisor,VK_KHR_vertex_attribute_divisor[]
4704| code:uint32_t            | pname:maxVertexAttribDivisor               |
4705ifdef::VK_KHR_vertex_attribute_divisor[`apiext:VK_KHR_vertex_attribute_divisor`]
4706ifndef::VK_KHR_vertex_attribute_divisor[`apiext:VK_EXT_vertex_attribute_divisor`]
4707endif::VK_EXT_vertex_attribute_divisor,VK_KHR_vertex_attribute_divisor[]
4708ifdef::VK_NV_mesh_shader[]
4709| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount               | `apiext:VK_NV_mesh_shader`
4710| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
4711| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupSize                | `apiext:VK_NV_mesh_shader`
4712| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskTotalMemorySize              | `apiext:VK_NV_mesh_shader`
4713| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount                  | `apiext:VK_NV_mesh_shader`
4714| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
4715| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupSize                | `apiext:VK_NV_mesh_shader`
4716| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshTotalMemorySize              | `apiext:VK_NV_mesh_shader`
4717| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices               | `apiext:VK_NV_mesh_shader`
4718| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives             | `apiext:VK_NV_mesh_shader`
4719| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshMultiviewViewCount           | `apiext:VK_NV_mesh_shader`
4720| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerVertexGranularity      | `apiext:VK_NV_mesh_shader`
4721| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerPrimitiveGranularity   | `apiext:VK_NV_mesh_shader`
4722endif::VK_NV_mesh_shader[]
4723ifdef::VK_EXT_mesh_shader[]
4724| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount                 | `apiext:VK_EXT_mesh_shader`
4725| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount                      | `apiext:VK_EXT_mesh_shader`
4726| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations                | `apiext:VK_EXT_mesh_shader`
4727| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize                       | `apiext:VK_EXT_mesh_shader`
4728| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadSize                         | `apiext:VK_EXT_mesh_shader`
4729| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskSharedMemorySize                    | `apiext:VK_EXT_mesh_shader`
4730| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadAndSharedMemorySize          | `apiext:VK_EXT_mesh_shader`
4731| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount                 | `apiext:VK_EXT_mesh_shader`
4732| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount                      | `apiext:VK_EXT_mesh_shader`
4733| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations                | `apiext:VK_EXT_mesh_shader`
4734| 3 {times} code:uint32_t  | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize                       | `apiext:VK_EXT_mesh_shader`
4735| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshSharedMemorySize                    | `apiext:VK_EXT_mesh_shader`
4736| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndSharedMemorySize          | `apiext:VK_EXT_mesh_shader`
4737| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputMemorySize                    | `apiext:VK_EXT_mesh_shader`
4738| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndOutputMemorySize          | `apiext:VK_EXT_mesh_shader`
4739| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputComponents                    | `apiext:VK_EXT_mesh_shader`
4740| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices                      | `apiext:VK_EXT_mesh_shader`
4741| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives                    | `apiext:VK_EXT_mesh_shader`
4742| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputLayers                        | `apiext:VK_EXT_mesh_shader`
4743| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshMultiviewViewCount                  | `apiext:VK_EXT_mesh_shader`
4744| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerVertexGranularity             | `apiext:VK_EXT_mesh_shader`
4745| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerPrimitiveGranularity          | `apiext:VK_EXT_mesh_shader`
4746| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredTaskWorkGroupInvocations       | `apiext:VK_EXT_mesh_shader`
4747| code:uint32_t            | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredMeshWorkGroupInvocations       | `apiext:VK_EXT_mesh_shader`
4748| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationVertexOutput         | `apiext:VK_EXT_mesh_shader`
4749| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationPrimitiveOutput      | `apiext:VK_EXT_mesh_shader`
4750| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactVertexOutput                 | `apiext:VK_EXT_mesh_shader`
4751| basetype:VkBool32        | slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactPrimitiveOutput              | `apiext:VK_EXT_mesh_shader`
4752endif::VK_EXT_mesh_shader[]
4753ifdef::VK_EXT_transform_feedback[]
4754| code:uint32_t            | pname:maxTransformFeedbackStreams                 | `apiext:VK_EXT_transform_feedback`
4755| code:uint32_t            | pname:maxTransformFeedbackBuffers                 | `apiext:VK_EXT_transform_feedback`
4756| basetype:VkDeviceSize    | pname:maxTransformFeedbackBufferSize              | `apiext:VK_EXT_transform_feedback`
4757| code:uint32_t            | pname:maxTransformFeedbackStreamDataSize          | `apiext:VK_EXT_transform_feedback`
4758| code:uint32_t            | pname:maxTransformFeedbackBufferDataSize          | `apiext:VK_EXT_transform_feedback`
4759| code:uint32_t            | pname:maxTransformFeedbackBufferDataStride        | `apiext:VK_EXT_transform_feedback`
4760| basetype:VkBool32        | pname:transformFeedbackQueries                    | `apiext:VK_EXT_transform_feedback`
4761| basetype:VkBool32        | pname:transformFeedbackStreamsLinesTriangles      | `apiext:VK_EXT_transform_feedback`
4762| basetype:VkBool32        | pname:transformFeedbackRasterizationStreamSelect  | `apiext:VK_EXT_transform_feedback`
4763| basetype:VkBool32        | pname:transformFeedbackDraw                       | `apiext:VK_EXT_transform_feedback`
4764endif::VK_EXT_transform_feedback[]
4765ifdef::VK_EXT_fragment_density_map[]
4766| slink:VkExtent2D         | pname:minFragmentDensityTexelSize         | `<<features-fragmentDensityMap, pname:fragmentDensityMap>>`
4767| slink:VkExtent2D         | pname:maxFragmentDensityTexelSize         | `<<features-fragmentDensityMap, pname:fragmentDensityMap>>`
4768| basetype:VkBool32        | pname:fragmentDensityInvocations          | `<<features-fragmentDensityMap, pname:fragmentDensityMap>>`
4769ifdef::VK_EXT_fragment_density_map2[]
4770| basetype:VkBool32        | pname:subsampledLoads                           | `apiext:VK_EXT_fragment_density_map2`
4771| basetype:VkBool32        | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2`
4772| code:uint32_t            | pname:maxSubsampledArrayLayers                  | `apiext:VK_EXT_fragment_density_map2`
4773| code:uint32_t            | pname:maxDescriptorSetSubsampledSamplers        | `apiext:VK_EXT_fragment_density_map2`
4774endif::VK_EXT_fragment_density_map2[]
4775ifdef::VK_QCOM_fragment_density_map_offset[]
4776| slink:VkExtent2D         | pname:fragmentDensityOffsetGranularity    | `<<features-fragmentDensityMapOffsets, pname:fragmentDensityMapOffset>>`
4777endif::VK_QCOM_fragment_density_map_offset[]
4778endif::VK_EXT_fragment_density_map[]
4779ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
4780| code:uint32_t            | pname:maxGeometryCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
4781| code:uint32_t            | pname:maxInstanceCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
4782endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
4783ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
4784| code:uint32_t            | pname:shaderGroupHandleSize                    | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
4785| code:uint32_t            | pname:maxShaderGroupStride                     | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
4786| code:uint32_t            | pname:shaderGroupBaseAlignment                 | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
4787endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
4788ifdef::VK_NV_ray_tracing[]
4789| code:uint32_t            | pname:maxRecursionDepth                        | `apiext:VK_NV_ray_tracing`
4790| code:uint32_t            | pname:maxTriangleCount                         | `apiext:VK_NV_ray_tracing`
4791endif::VK_NV_ray_tracing[]
4792ifdef::VK_KHR_acceleration_structure[]
4793| code:uint32_t            | pname:maxPerStageDescriptorAccelerationStructures
4794                                                                            | `apiext:VK_KHR_acceleration_structure`
4795| code:uint32_t            | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
4796                                                                            | `apiext:VK_KHR_acceleration_structure`
4797endif::VK_KHR_acceleration_structure[]
4798ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
4799| code:uint32_t            | pname:maxDescriptorSetAccelerationStructures   | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
4800endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
4801ifdef::VK_KHR_acceleration_structure[]
4802| code:uint32_t            | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
4803                                                                            | `apiext:VK_KHR_acceleration_structure`
4804| code:uint32_t            | pname:minAccelerationStructureScratchOffsetAlignment
4805                                                                            | `apiext:VK_KHR_acceleration_structure`
4806endif::VK_KHR_acceleration_structure[]
4807ifdef::VK_KHR_ray_tracing_pipeline[]
4808| code:uint32_t            | pname:maxRayRecursionDepth                     | `apiext:VK_KHR_ray_tracing_pipeline`
4809| code:uint32_t            | pname:shaderGroupHandleCaptureReplaySize       | `apiext:VK_KHR_ray_tracing_pipeline`
4810| code:uint32_t            | pname:maxRayDispatchInvocationCount            | `apiext:VK_KHR_ray_tracing_pipeline`
4811| code:uint32_t            | pname:shaderGroupHandleAlignment               | `apiext:VK_KHR_ray_tracing_pipeline`
4812| code:uint32_t            | pname:maxRayHitAttributeSize                   | `apiext:VK_KHR_ray_tracing_pipeline`
4813endif::VK_KHR_ray_tracing_pipeline[]
4814ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
4815| code:uint64_t            | pname:maxTimelineSemaphoreValueDifference      | `<<features-timelineSemaphore, pname:timelineSemaphore>>`
4816endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
4817ifdef::VK_EXT_line_rasterization[]
4818| code:uint32_t            | pname:lineSubPixelPrecisionBits                | `apiext:VK_EXT_line_rasterization`
4819endif::VK_EXT_line_rasterization[]
4820ifdef::VK_EXT_custom_border_color[]
4821| code:uint32_t            | pname:maxCustomBorderColorSamplers             | `apiext:VK_EXT_custom_border_color`
4822endif::VK_EXT_custom_border_color[]
4823ifdef::VK_EXT_robustness2[]
4824| basetype:VkDeviceSize    | pname:robustStorageBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
4825| basetype:VkDeviceSize    | pname:robustUniformBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
4826endif::VK_EXT_robustness2[]
4827ifdef::VK_KHR_fragment_shading_rate[]
4828| 2 {times} code:uint32_t       | pname:minFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
4829| 2 {times} code:uint32_t       | pname:maxFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
4830| code:uint32_t                 | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
4831| basetype:VkBool32             | pname:primitiveFragmentShadingRateWithMultipleViewports   | `<<features-primitiveFragmentShadingRate, pname:primitiveFragmentShadingRate>>`
4832| basetype:VkBool32             | pname:layeredShadingRateAttachments                       | `<<features-attachmentFragmentShadingRate, pname:attachmentFragmentShadingRate>>`
4833| basetype:VkBool32             | pname:fragmentShadingRateNonTrivialCombinerOps            | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4834| 2 {times} code:uint32_t       | pname:maxFragmentSize                                     | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4835| code:uint32_t                 | pname:maxFragmentSizeAspectRatio                          | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4836| code:uint32_t                 | pname:maxFragmentShadingRateCoverageSamples               | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4837| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateRasterizationSamples          | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4838| basetype:VkBool32             | pname:fragmentShadingRateWithShaderDepthStencilWrites     | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4839| basetype:VkBool32             | pname:fragmentShadingRateWithSampleMask                   | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4840| basetype:VkBool32             | pname:fragmentShadingRateWithShaderSampleMask             | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4841| basetype:VkBool32             | pname:fragmentShadingRateWithConservativeRasterization    | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4842| basetype:VkBool32             | pname:fragmentShadingRateWithFragmentShaderInterlock      | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4843| basetype:VkBool32             | pname:fragmentShadingRateWithCustomSampleLocations        | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4844| basetype:VkBool32             | pname:fragmentShadingRateStrictMultiplyCombiner           | `<<features-pipelineFragmentShadingRate, pname:pipelineFragmentShadingRate>>`
4845endif::VK_KHR_fragment_shading_rate[]
4846ifdef::VK_NV_fragment_shading_rate_enums[]
4847| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateInvocationCount               | `<<features-supersampleFragmentShadingRates, pname:supersampleFragmentShadingRates>>`
4848endif::VK_NV_fragment_shading_rate_enums[]
4849ifdef::VK_EXT_descriptor_buffer[]
4850| basetype:VkBool32       | pname:combinedImageSamplerDescriptorSingleArray          | `<<VK_EXT_descriptor_buffer>>`
4851| basetype:VkBool32       | pname:bufferlessPushDescriptors            | `<<VK_EXT_descriptor_buffer>>`
4852| basetype:VkBool32       | pname:allowSamplerImageViewPostSubmitCreation     | `<<VK_EXT_descriptor_buffer>>`
4853| basetype:VkDeviceSize   | pname:descriptorBufferOffsetAlignment             | `<<VK_EXT_descriptor_buffer>>`
4854| code:uint32_t           | pname:maxDescriptorBufferBindings                 | `<<VK_EXT_descriptor_buffer>>`
4855| code:uint32_t           | pname:maxResourceDescriptorBufferBindings         | `<<VK_EXT_descriptor_buffer>>`
4856| code:uint32_t           | pname:maxSamplerDescriptorBufferBindings          | `<<VK_EXT_descriptor_buffer>>`
4857| code:uint32_t           | pname:maxEmbeddedImmutableSamplerBindings         | `<<VK_EXT_descriptor_buffer>>`
4858| code:uint32_t           | pname:maxEmbeddedImmutableSamplers                | `<<VK_EXT_descriptor_buffer>>`
4859| code:size_t             | pname:bufferCaptureReplayDescriptorDataSize       | `<<VK_EXT_descriptor_buffer>>`
4860| code:size_t             | pname:imageCaptureReplayDescriptorDataSize        | `<<VK_EXT_descriptor_buffer>>`
4861| code:size_t             | pname:imageViewCaptureReplayDescriptorDataSize    | `<<VK_EXT_descriptor_buffer>>`
4862| code:size_t             | pname:samplerCaptureReplayDescriptorDataSize      | `<<VK_EXT_descriptor_buffer>>`
4863| code:size_t             | pname:accelerationStructureCaptureReplayDescriptorDataSize      | `<<VK_EXT_descriptor_buffer>>`
4864| code:size_t             | pname:samplerDescriptorSize                       | `<<VK_EXT_descriptor_buffer>>`
4865| code:size_t             | pname:combinedImageSamplerDescriptorSize          | `<<VK_EXT_descriptor_buffer>>`
4866| code:size_t             | pname:sampledImageDescriptorSize                  | `<<VK_EXT_descriptor_buffer>>`
4867| code:size_t             | pname:storageImageDescriptorSize                  | `<<VK_EXT_descriptor_buffer>>`
4868| code:size_t             | pname:uniformTexelBufferDescriptorSize            | `<<VK_EXT_descriptor_buffer>>`
4869| code:size_t             | pname:robustUniformTexelBufferDescriptorSize      | `<<VK_EXT_descriptor_buffer>>`
4870| code:size_t             | pname:storageTexelBufferDescriptorSize            | `<<VK_EXT_descriptor_buffer>>`
4871| code:size_t             | pname:robustStorageTexelBufferDescriptorSize      | `<<VK_EXT_descriptor_buffer>>`
4872| code:size_t             | pname:uniformBufferDescriptorSize                 | `<<VK_EXT_descriptor_buffer>>`
4873| code:size_t             | pname:robustUniformBufferDescriptorSize           | `<<VK_EXT_descriptor_buffer>>`
4874| code:size_t             | pname:storageBufferDescriptorSize                 | `<<VK_EXT_descriptor_buffer>>`
4875| code:size_t             | pname:robustStorageBufferDescriptorSize           | `<<VK_EXT_descriptor_buffer>>`
4876| code:size_t             | pname:inputAttachmentDescriptorSize               | `<<VK_EXT_descriptor_buffer>>`
4877| code:size_t             | pname:accelerationStructureDescriptorSize         | `<<VK_EXT_descriptor_buffer>>`
4878| basetype:VkDeviceSize   | pname:maxSamplerDescriptorBufferRange             | `<<VK_EXT_descriptor_buffer>>`
4879| basetype:VkDeviceSize   | pname:maxResourceDescriptorBufferRange            | `<<VK_EXT_descriptor_buffer>>`
4880| basetype:VkDeviceSize   | pname:samplerDescriptorBufferAddressSpaceSize     | `<<VK_EXT_descriptor_buffer>>`
4881| basetype:VkDeviceSize   | pname:resourceDescriptorBufferAddressSpaceSize    | `<<VK_EXT_descriptor_buffer>>`
4882| basetype:VkDeviceSize   | pname:descriptorBufferAddressSpaceSize            | `<<VK_EXT_descriptor_buffer>>`
4883ifdef::VK_EXT_fragment_density_map[]
4884| code:size_t             | pname:combinedImageSamplerDensityMapDescriptorSize          | `<<VK_EXT_descriptor_buffer>>`
4885endif::VK_EXT_fragment_density_map[]
4886endif::VK_EXT_descriptor_buffer[]
4887ifdef::VK_HUAWEI_subpass_shading[]
4888| code:uint32_t                 | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading, pname:subpassShading>>`
4889endif::VK_HUAWEI_subpass_shading[]
4890ifdef::VKSC_VERSION_1_0[]
4891| basetype:VkBool32        | pname:deviceNoDynamicHostAllocations                   | -
4892| basetype:VkBool32        | pname:deviceDestroyFreesMemory                         | -
4893| basetype:VkBool32        | pname:commandPoolMultipleCommandBuffersRecording       | -
4894| basetype:VkBool32        | pname:commandPoolResetCommandBuffer                    | -
4895| basetype:VkBool32        | pname:commandBufferSimultaneousUse                     | -
4896| basetype:VkBool32        | pname:secondaryCommandBufferNullOrImagelessFramebuffer | -
4897| basetype:VkBool32        | pname:recycleDescriptorSetMemory                       | -
4898| basetype:VkBool32        | pname:recyclePipelineMemory                            | -
4899| code:uint32_t            | pname:maxRenderPassSubpasses                           | -
4900| code:uint32_t            | pname:maxRenderPassDependencies                        | -
4901| code:uint32_t            | pname:maxSubpassInputAttachments                       | -
4902| code:uint32_t            | pname:maxSubpassPreserveAttachments                    | -
4903| code:uint32_t            | pname:maxFramebufferAttachments                        | -
4904| code:uint32_t            | pname:maxDescriptorSetLayoutBindings                   | -
4905| code:uint32_t            | pname:maxQueryFaultCount                               | -
4906| code:uint32_t            | pname:maxCallbackFaultCount                            | -
4907| code:uint32_t            | pname:maxCommandPoolCommandBuffers                     | -
4908| basetype:VkDeviceSize    | pname:maxCommandBufferSize                             | -
4909endif::VKSC_VERSION_1_0[]
4910ifdef::VK_EXT_graphics_pipeline_library[]
4911| basetype:VkBool32             | pname:graphicsPipelineLibraryFastLinking                  | `<<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>`
4912| basetype:VkBool32             | pname:graphicsPipelineLibraryIndependentInterpolationDecoration | `<<features-graphicsPipelineLibrary, pname:graphicsPipelineLibrary>>`
4913endif::VK_EXT_graphics_pipeline_library[]
4914ifdef::VK_KHR_fragment_shader_barycentric[]
4915| basetype:VkBool32             | pname:triStripVertexOrderIndependentOfProvokingVertex     | -
4916endif::VK_KHR_fragment_shader_barycentric[]
4917ifdef::VK_QCOM_image_processing[]
4918| code:uint32_t                 | pname:maxWeightFilterPhases    | `<<features-textureSampleWeighted, pname:textureSampleWeighted>>`
4919| 2 {times} code:uint32_t       | pname:maxWeightFilterDimension | `<<features-textureSampleWeighted, pname:textureSampleWeighted>>`
4920| 2 {times} code:uint32_t       | pname:maxBlockMatchRegion      | `<<features-textureBlockMatch, pname:textureBlockMatch>>`
4921| 2 {times} code:uint32_t       | pname:maxBoxFilterBlockSize    | `<<features-textureBoxFilter, pname:textureBoxFilter>>`
4922endif::VK_QCOM_image_processing[]
4923ifdef::VK_EXT_extended_dynamic_state3[]
4924| basetype:VkBool32             | pname:dynamicPrimitiveTopologyUnrestricted                | `apiext:VK_EXT_extended_dynamic_state3`
4925endif::VK_EXT_extended_dynamic_state3[]
4926ifdef::VK_EXT_opacity_micromap[]
4927| code:uint32_t                 | pname:maxOpacity2StateSubdivisionLevel                    | `apiext:VK_EXT_opacity_micromap`
4928| code:uint32_t                 | pname:maxOpacity4StateSubdivisionLevel                    | `apiext:VK_EXT_opacity_micromap`
4929endif::VK_EXT_opacity_micromap[]
4930ifdef::VK_NV_memory_decompression[]
4931| code:uint64_t                 | pname:maxDecompressionIndirectCount                       | `apiext:VK_NV_memory_decompression`
4932endif::VK_NV_memory_decompression[]
4933ifdef::VK_HUAWEI_cluster_culling_shader[]
4934|  3 {times} code:uint32_t                 |
4935pname:maxWorkGroupCount | `apiext:VK_HUAWEI_cluster_culling_shader`
4936|  3 {times} code:uint32_t                 |
4937pname:maxWorkGroupSize | `apiext:VK_HUAWEI_cluster_culling_shader`
4938| code:uint32_t                 |
4939pname:maxOutputClusterCount | `apiext:VK_HUAWEI_cluster_culling_shader`
4940| basetype:VkDeviceSize                 |
4941pname:indirectBufferOffsetAlignment | `apiext:VK_HUAWEI_cluster_culling_shader`
4942endif::VK_HUAWEI_cluster_culling_shader[]
4943ifdef::VK_AMDX_shader_enqueue[]
4944| code:uint32_t                 | pname:maxExecutionGraphDepth                              | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
4945| code:uint32_t                 | pname:maxExecutionGraphShaderOutputNodes                  | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
4946| code:uint32_t                 | pname:maxExecutionGraphShaderPayloadSize                  | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
4947| code:uint32_t                 | pname:maxExecutionGraphShaderPayloadCount                 | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
4948| code:uint32_t                 | pname:executionGraphDispatchAddressAlignment              | `<<features-shaderEnqueue,pname:shaderEnqueue>>`
4949endif::VK_AMDX_shader_enqueue[]
4950ifdef::VK_NV_extended_sparse_address_space[]
4951| basetype:VkDeviceSize         | pname:extendedSparseAddressSpaceSize                      | pname:sparseBinding, `<<features-extendedSparseAddressSpace, pname:extendedSparseAddressSpace>>`
4952endif::VK_NV_extended_sparse_address_space[]
4953|====
4954
4955[[limits-required]]
4956.Required Limits
4957[width="100%",cols="<35,<9,<14,<11",options="header"]
4958|====
4959| Limit | Unsupported Limit | Supported Limit | Limit Type^1^
4960| pname:maxImageDimension1D                  | - | 4096    | min
4961| pname:maxImageDimension2D                  | - | 4096    | min
4962| pname:maxImageDimension3D                  | - | 256     | min
4963| pname:maxImageDimensionCube                | - | 4096    | min
4964| pname:maxImageArrayLayers                  | - | 256     | min
4965| pname:maxTexelBufferElements               | - | 65536   | min
4966| pname:maxUniformBufferRange                | - | 16384   | min
4967| pname:maxStorageBufferRange                | - | 2^27^   | min
4968| pname:maxPushConstantsSize                 | - | 128     | min
4969| pname:maxMemoryAllocationCount             | - | 4096    | min
4970| pname:maxSamplerAllocationCount            | - | 4000    | min
4971| pname:bufferImageGranularity               | - | 131072  | max
4972| pname:sparseAddressSpaceSize               | 0 | 2^31^   | min
4973| pname:maxBoundDescriptorSets               | - | 4       | min
4974| pname:maxPerStageDescriptorSamplers        | - | 16      | min
4975| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | min
4976| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | min
4977| pname:maxPerStageDescriptorSampledImages   | - | 16      | min
4978| pname:maxPerStageDescriptorStorageImages   | - | 4       | min
4979| pname:maxPerStageDescriptorInputAttachments| - | 4       | min
4980| pname:maxPerStageResources                 | - | 128 ^2^ | min
4981| pname:maxDescriptorSetSamplers             | - | 96 ^8^  | min, _n_ {times} PerStage
4982| pname:maxDescriptorSetUniformBuffers       | - | 72 ^8^  | min, _n_ {times} PerStage
4983| pname:maxDescriptorSetUniformBuffersDynamic| - | 8       | min
4984| pname:maxDescriptorSetStorageBuffers       | - | 24 ^8^  | min, _n_ {times} PerStage
4985| pname:maxDescriptorSetStorageBuffersDynamic| - | 4       | min
4986| pname:maxDescriptorSetSampledImages        | - | 96 ^8^  | min, _n_ {times} PerStage
4987| pname:maxDescriptorSetStorageImages        | - | 24 ^8^  | min, _n_ {times} PerStage
4988| pname:maxDescriptorSetInputAttachments     | - | 4       | min
4989| pname:maxVertexInputAttributes             | - | 16      | min
4990ifndef::VK_KHR_portability_subset[]
4991| pname:maxVertexInputBindings               | - | 16      | min
4992endif::VK_KHR_portability_subset[]
4993ifdef::VK_KHR_portability_subset[]
4994| pname:maxVertexInputBindings               | - | 16 ^10^ | min
4995endif::VK_KHR_portability_subset[]
4996| pname:maxVertexInputAttributeOffset        | - | 2047    | min
4997| pname:maxVertexInputBindingStride          | - | 2048    | min
4998| pname:maxVertexOutputComponents            | - | 64      | min
4999| pname:maxTessellationGenerationLevel       | 0 | 64      | min
5000| pname:maxTessellationPatchSize             | 0 | 32      | min
5001| pname:maxTessellationControlPerVertexInputComponents  | 0 |64 | min
5002| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min
5003| pname:maxTessellationControlPerPatchOutputComponents  | 0 |120 | min
5004| pname:maxTessellationControlTotalOutputComponents     | 0 |2048 | min
5005| pname:maxTessellationEvaluationInputComponents        | 0 |64 | min
5006| pname:maxTessellationEvaluationOutputComponents       | 0 |64 | min
5007| pname:maxGeometryShaderInvocations         | 0 | 32      | min
5008| pname:maxGeometryInputComponents           | 0 | 64      | min
5009| pname:maxGeometryOutputComponents          | 0 | 64      | min
5010| pname:maxGeometryOutputVertices            | 0 | 256     | min
5011| pname:maxGeometryTotalOutputComponents     | 0 | 1024    | min
5012| pname:maxFragmentInputComponents           | - | 64      | min
5013| pname:maxFragmentOutputAttachments         | - | 4       | min
5014| pname:maxFragmentDualSrcAttachments        | 0 | 1       | min
5015| pname:maxFragmentCombinedOutputResources   | - | 4       | min
5016| pname:maxComputeSharedMemorySize           | - | 16384   | min
5017| pname:maxComputeWorkGroupCount             | - | (65535,65535,65535) | min
5018| pname:maxComputeWorkGroupInvocations       | - | 128     | min
5019| pname:maxComputeWorkGroupSize              | - | (128,128,64) | min
5020| pname:subPixelPrecisionBits                | - | 4       | min
5021| pname:subTexelPrecisionBits                | - | 4       | min
5022| pname:mipmapPrecisionBits                  | - | 4       | min
5023| pname:maxDrawIndexedIndexValue             | 2^24^-1 | 2^32^-1 | min
5024| pname:maxDrawIndirectCount                 | 1 | 2^16^-1 | min
5025| pname:maxSamplerLodBias                    | - | 2       | min
5026| pname:maxSamplerAnisotropy                 | 1 | 16      | min
5027| pname:maxViewports                         | 1 | 16      | min
5028| pname:maxViewportDimensions                | - | (4096,4096) ^3^  | min
5029| pname:viewportBoundsRange                  | - | (-8192,8191) ^4^ | (max,min)
5030| pname:viewportSubPixelBits                 | - | 0   | min
5031| pname:minMemoryMapAlignment                | - | 64  | min
5032| pname:minTexelBufferOffsetAlignment        | - | 256 | max
5033| pname:minUniformBufferOffsetAlignment      | - | 256 | max
5034| pname:minStorageBufferOffsetAlignment      | - | 256 | max
5035| pname:minTexelOffset                       | - | -8  | max
5036| pname:maxTexelOffset                       | - | 7   | min
5037| pname:minTexelGatherOffset                 | 0 | -8  | max
5038| pname:maxTexelGatherOffset                 | 0 | 7   | min
5039| pname:minInterpolationOffset               |0.0| -0.5 ^5^ | max
5040| pname:maxInterpolationOffset               |0.0| 0.5 - (1 ULP) ^5^ | min
5041| pname:subPixelInterpolationOffsetBits      | 0 | 4 ^5^ | min
5042| pname:maxFramebufferWidth                  | - | 4096  | min
5043| pname:maxFramebufferHeight                 | - | 4096  | min
5044| pname:maxFramebufferLayers                 |
5045ifdef::VKSC_VERSION_1_0[1]
5046ifndef::VKSC_VERSION_1_0[-]
5047| 256   | min
5048| pname:framebufferColorSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5049ifdef::VK_VERSION_1_2[]
5050| pname:framebufferIntegerColorSampleCounts  | - | (ename:VK_SAMPLE_COUNT_1_BIT)                                | min
5051endif::VK_VERSION_1_2[]
5052| pname:framebufferDepthSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5053| pname:framebufferStencilSampleCounts       | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5054| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5055| pname:maxColorAttachments                  | - | 4     | min
5056| pname:sampledImageColorSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5057| pname:sampledImageIntegerSampleCounts      | - | ename:VK_SAMPLE_COUNT_1_BIT                                  | min
5058| pname:sampledImageDepthSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5059| pname:sampledImageStencilSampleCounts      | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5060| pname:storageImageSampleCounts             | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
5061| pname:maxSampleMaskWords                   | - | 1     | min
5062| pname:timestampComputeAndGraphics          | - | -     |implementation-dependent
5063| pname:timestampPeriod                      | - | -     |duration
5064| pname:maxClipDistances                     | 0 | 8     | min
5065| pname:maxCullDistances                     | 0 | 8     | min
5066| pname:maxCombinedClipAndCullDistances      | 0 | 8     | min
5067| pname:discreteQueuePriorities              | - | 2     | min
5068| pname:pointSizeRange                       | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min)
5069| pname:lineWidthRange                       | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min)
5070| pname:pointSizeGranularity                 |  0.0 | 1.0 ^6^ | max, fixed point increment
5071| pname:lineWidthGranularity                 |  0.0 | 1.0 ^7^ | max, fixed point increment
5072| pname:strictLines                          | - | -   | implementation-dependent
5073| pname:standardSampleLocations              | - | -   | implementation-dependent
5074| pname:optimalBufferCopyOffsetAlignment     | - | -   | recommendation
5075| pname:optimalBufferCopyRowPitchAlignment   | - | -   | recommendation
5076| pname:nonCoherentAtomSize                  | - | 256 | max
5077ifdef::VK_KHR_push_descriptor[]
5078| pname:maxPushDescriptors                   | - | 32  | min
5079endif::VK_KHR_push_descriptor[]
5080ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
5081| pname:maxMultiviewViewCount                | - |  6  | min
5082| pname:maxMultiviewInstanceIndex            | - |  2^27^-1  | min
5083endif::VK_VERSION_1_1,VK_KHR_multiview[]
5084ifdef::VK_EXT_discard_rectangles[]
5085| pname:maxDiscardRectangles                 | 0 | 4   | min
5086endif::VK_EXT_discard_rectangles[]
5087ifdef::VK_EXT_sample_locations[]
5088| pname:sampleLocationSampleCounts           | - | ename:VK_SAMPLE_COUNT_4_BIT | min
5089| pname:maxSampleLocationGridSize            | - | (1,1) | min
5090| pname:sampleLocationCoordinateRange        | - | (0.0, 0.9375) | (max,min)
5091| pname:sampleLocationSubPixelBits           | - | 4   | min
5092| pname:variableSampleLocations              | - |false| implementation-dependent
5093endif::VK_EXT_sample_locations[]
5094ifdef::VK_EXT_external_memory_host[]
5095| pname:minImportedHostPointerAlignment      | - | 65536 | max
5096endif::VK_EXT_external_memory_host[]
5097ifdef::VK_NVX_multiview_per_view_attributes[]
5098| pname:perViewPositionAllComponents         | - | -   | implementation-dependent
5099endif::VK_NVX_multiview_per_view_attributes[]
5100ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
5101| pname:filterMinmaxSingleComponentFormats   | - | -   | implementation-dependent
5102| pname:filterMinmaxImageComponentMapping    | - | -   | implementation-dependent
5103endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
5104ifdef::VK_EXT_blend_operation_advanced[]
5105| pname:advancedBlendMaxColorAttachments        | - | 1   | min
5106| pname:advancedBlendIndependentBlend           | - |false| implementation-dependent
5107| pname:advancedBlendNonPremultipliedSrcColor   | - |false| implementation-dependent
5108| pname:advancedBlendNonPremultipliedDstColor   | - |false| implementation-dependent
5109| pname:advancedBlendCorrelatedOverlap          | - |false| implementation-dependent
5110| pname:advancedBlendAllOperations              | - |false| implementation-dependent
5111endif::VK_EXT_blend_operation_advanced[]
5112ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
5113| pname:maxPerSetDescriptors                                | - |1024 | min
5114| pname:maxMemoryAllocationSize                             | - | 2^30^ | min
5115endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
5116ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
5117| pname:maxBufferSize                                       | - | 2^30^ | min
5118endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
5119ifdef::VK_EXT_conservative_rasterization[]
5120| pname:primitiveOverestimationSize                 | - |0.0   | min
5121| pname:maxExtraPrimitiveOverestimationSize         | - |0.0   | min
5122| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0   | min
5123| pname:primitiveUnderestimation                    | - |false | implementation-dependent
5124| pname:conservativePointAndLineRasterization       | - |false | implementation-dependent
5125| pname:degenerateTrianglesRasterized               | - |false | implementation-dependent
5126| pname:degenerateLinesRasterized                   | - |false | implementation-dependent
5127| pname:fullyCoveredFragmentShaderInputVariable     | - |false | implementation-dependent
5128| pname:conservativeRasterizationPostDepthCoverage  | - |false | implementation-dependent
5129endif::VK_EXT_conservative_rasterization[]
5130ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
5131| pname:maxUpdateAfterBindDescriptorsInAllPools             | 0 |500000| min
5132| pname:shaderUniformBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
5133| pname:shaderSampledImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
5134| pname:shaderStorageBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
5135| pname:shaderStorageImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
5136| pname:shaderInputAttachmentArrayNonUniformIndexingNative  | - |false| implementation-dependent
5137| pname:maxPerStageDescriptorUpdateAfterBindSamplers        | 0^9^ |500000 ^9^ | min
5138| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | 0^9^ |12 ^9^ | min
5139| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | 0^9^ |500000 ^9^ | min
5140| pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | 0^9^ |500000 ^9^ | min
5141| pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | 0^9^ |500000 ^9^ | min
5142| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min
5143| pname:maxPerStageUpdateAfterBindResources                 | 0^9^ |500000 ^9^ | min
5144| pname:maxDescriptorSetUpdateAfterBindSamplers             | 0^9^ |500000 ^9^ | min
5145| pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage
5146| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min
5147| pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | 0^9^ |500000 ^9^ | min
5148| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min
5149| pname:maxDescriptorSetUpdateAfterBindSampledImages        | 0^9^ |500000 ^9^ | min
5150| pname:maxDescriptorSetUpdateAfterBindStorageImages        | 0^9^ |500000 ^9^ | min
5151| pname:maxDescriptorSetUpdateAfterBindInputAttachments     | 0^9^ |4 ^9^ | min
5152endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
5153ifdef::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
5154| pname:maxInlineUniformBlockSize                               | - | 256   | min
5155| pname:maxPerStageDescriptorInlineUniformBlocks                | - | 4     | min
5156| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4     | min
5157| pname:maxDescriptorSetInlineUniformBlocks                     | - | 4     | min
5158| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      | - | 4     | min
5159endif::VK_VERSION_1_3,VK_EXT_inline_uniform_block[]
5160ifdef::VK_VERSION_1_3[]
5161| pname:maxInlineUniformTotalSize                               | - | 256   | min
5162endif::VK_VERSION_1_3[]
5163ifdef::VK_EXT_vertex_attribute_divisor,VK_KHR_vertex_attribute_divisor[]
5164| pname:maxVertexAttribDivisor               | - | 2^16^-1   | min
5165endif::VK_EXT_vertex_attribute_divisor,VK_KHR_vertex_attribute_divisor[]
5166ifdef::VK_NV_mesh_shader[]
5167| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount                | - | 2^16^-1   | min
5168| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupInvocations          | - | 32        | min
5169| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskWorkGroupSize                 | - | (32,1,1)  | min
5170| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskTotalMemorySize               | - | 16384     | min
5171| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount                   | - | 2^16^-1   | min
5172| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupInvocations          | - | 32        | min
5173| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshWorkGroupSize                 | - | (32,1,1)  | min
5174| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshTotalMemorySize               | - | 16384     | min
5175| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices                | - | 256       | min
5176| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives              | - | 256       | min
5177| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshMultiviewViewCount            | - | 1         | min
5178| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerVertexGranularity       | - | -         | implementation-dependent
5179| slink:VkPhysicalDeviceMeshShaderPropertiesNV::pname:meshOutputPerPrimitiveGranularity    | - | -         | implementation-dependent
5180endif::VK_NV_mesh_shader[]
5181ifdef::VK_EXT_mesh_shader[]
5182| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupTotalCount                 | - | 2^22      | min
5183| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupCount                      | - | (65535,65535,65535) | min
5184| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupInvocations                | - | 128       | min
5185| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskWorkGroupSize                       | - | (128,128,128) | min
5186| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadSize                         | - | 16384     | min
5187| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskSharedMemorySize                    | - | 32768     | min
5188| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxTaskPayloadAndSharedMemorySize          | - | 32768     | min
5189| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupTotalCount                 | - | 2^22      | min
5190| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupCount                      | - | (65535,65535,65535) | min
5191| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupInvocations                | - | 128       | min
5192| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshWorkGroupSize                       | - | (128,128,128) | min
5193| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshSharedMemorySize                    | - | 28672     | min
5194| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndSharedMemorySize          | - | 28672     | min
5195| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputMemorySize                    | - | 32768     | min
5196| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshPayloadAndOutputMemorySize          | - | 48128     | min
5197| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputComponents                    | - | 128       | min
5198| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputVertices                      | - | 256       | min
5199| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputPrimitives                    | - | 256       | min
5200| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshOutputLayers                        | - | 8         | min
5201| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxMeshMultiviewViewCount                  | - | 1         | min
5202| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerVertexGranularity             | 0 | 32        | max
5203| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:meshOutputPerPrimitiveGranularity          | 0 | 32        | max
5204| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredTaskWorkGroupInvocations       | - | -         | implementation-dependent
5205| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:maxPreferredMeshWorkGroupInvocations       | - | -         | implementation-dependent
5206| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationVertexOutput         | - | -         | implementation-dependent
5207| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersLocalInvocationPrimitiveOutput      | - | -         | implementation-dependent
5208| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactVertexOutput                 | - | -         | implementation-dependent
5209| slink:VkPhysicalDeviceMeshShaderPropertiesEXT::pname:prefersCompactPrimitiveOutput              | - | -         | implementation-dependent
5210endif::VK_EXT_mesh_shader[]
5211ifdef::VK_EXT_transform_feedback[]
5212| pname:maxTransformFeedbackStreams                         | - | 1         | min
5213| pname:maxTransformFeedbackBuffers                         | - | 1         | min
5214| pname:maxTransformFeedbackBufferSize                      | - | 2^27^     | min
5215| pname:maxTransformFeedbackStreamDataSize                  | - | 512       | min
5216| pname:maxTransformFeedbackBufferDataSize                  | - | 512       | min
5217| pname:maxTransformFeedbackBufferDataStride                | - | 512       | min
5218| pname:transformFeedbackQueries                            | - | false     | implementation-dependent
5219| pname:transformFeedbackStreamsLinesTriangles              | - | false     | implementation-dependent
5220| pname:transformFeedbackRasterizationStreamSelect          | - | false     | implementation-dependent
5221| pname:transformFeedbackDraw                               | - | false     | implementation-dependent
5222endif::VK_EXT_transform_feedback[]
5223ifdef::VK_EXT_fragment_density_map[]
5224| pname:minFragmentDensityTexelSize          | - | (1,1)       | min
5225| pname:maxFragmentDensityTexelSize          | - | (1,1)       | min
5226| pname:fragmentDensityInvocations           | - |  -          | implementation-dependent
5227ifdef::VK_EXT_fragment_density_map2[]
5228| pname:subsampledLoads                           | true  | false | implementation-dependent
5229| pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent
5230| pname:maxSubsampledArrayLayers                  | 2     | 2     | min
5231| pname:maxDescriptorSetSubsampledSamplers        | 1     | 1     | min
5232endif::VK_EXT_fragment_density_map2[]
5233ifdef::VK_QCOM_fragment_density_map_offset[]
5234| pname:fragmentDensityOffsetGranularity     | - | (1024,1024) | max
5235endif::VK_QCOM_fragment_density_map_offset[]
5236endif::VK_EXT_fragment_density_map[]
5237ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
5238ifdef::VK_NV_ray_tracing[]
5239| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16      | min
5240| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth     | - | 31      | min
5241endif::VK_NV_ray_tracing[]
5242ifdef::VK_KHR_ray_tracing_pipeline[]
5243| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32      | exact
5244| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth  | - | 1       | min
5245endif::VK_KHR_ray_tracing_pipeline[]
5246| pname:maxShaderGroupStride                     | - | 4096    | min
5247| pname:shaderGroupBaseAlignment                 | - | 64      | max
5248| pname:maxGeometryCount                         | - | 2^24^-1 | min
5249| pname:maxInstanceCount                         | - | 2^24^-1 | min
5250ifdef::VK_NV_ray_tracing[]
5251| pname:maxTriangleCount                         | - | 2^29^-1 | min
5252endif::VK_NV_ray_tracing[]
5253ifdef::VK_KHR_acceleration_structure[]
5254| pname:maxPrimitiveCount                        | - | 2^29^-1 | min
5255| pname:maxPerStageDescriptorAccelerationStructures                 | - | 16         | min
5256| pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures  | - | 500000 ^9^ | min
5257endif::VK_KHR_acceleration_structure[]
5258| pname:maxDescriptorSetAccelerationStructures                      | - | 16         | min
5259endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
5260ifdef::VK_KHR_acceleration_structure[]
5261| pname:maxDescriptorSetUpdateAfterBindAccelerationStructures       | - | 500000 ^9^ | min
5262| pname:minAccelerationStructureScratchOffsetAlignment              | - | 256        | max
5263endif::VK_KHR_acceleration_structure[]
5264ifdef::VK_KHR_ray_tracing_pipeline[]
5265| pname:shaderGroupHandleCaptureReplaySize              | - | 64  | max
5266| pname:maxRayDispatchInvocationCount                   | - | 2^30^ | min
5267| pname:shaderGroupHandleAlignment                      | - | 32  | max
5268| pname:maxRayHitAttributeSize                          | - | 32  | min
5269endif::VK_KHR_ray_tracing_pipeline[]
5270ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
5271| pname:maxTimelineSemaphoreValueDifference      | - | 2^31^-1 | min
5272endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
5273ifdef::VK_EXT_line_rasterization[]
5274| pname:lineSubPixelPrecisionBits                | - | 4    | min
5275endif::VK_EXT_line_rasterization[]
5276ifdef::VK_NV_device_generated_commands[]
5277| pname:maxGraphicsShaderGroupCount               | - | 2^12^   | min
5278| pname:maxIndirectSequenceCount                  | - | 2^20^   | min
5279| pname:maxIndirectCommandsTokenCount             | - | 16     | min
5280| pname:maxIndirectCommandsStreamCount            | - | 16     | min
5281| pname:maxIndirectCommandsTokenOffset            | - | 2047   | min
5282| pname:maxIndirectCommandsStreamStride           | - | 2048   | min
5283| pname:minSequencesCountBufferOffsetAlignment    | - | 256    | max
5284| pname:minSequencesIndexBufferOffsetAlignment    | - | 256    | max
5285| pname:minIndirectCommandsBufferOffsetAlignment  | - | 256    | max
5286endif::VK_NV_device_generated_commands[]
5287ifdef::VK_EXT_custom_border_color[]
5288| pname:maxCustomBorderColorSamplers              | - | 32    | min
5289endif::VK_EXT_custom_border_color[]
5290ifdef::VK_EXT_robustness2[]
5291| pname:robustStorageBufferAccessSizeAlignment   | - | 4    | max
5292| pname:robustUniformBufferAccessSizeAlignment   | - | 256  | max
5293endif::VK_EXT_robustness2[]
5294ifdef::VK_KHR_fragment_shading_rate[]
5295| pname:minFragmentShadingRateAttachmentTexelSize           | (0,0) | (32,32) | max
5296| pname:maxFragmentShadingRateAttachmentTexelSize           | (0,0) | (8,8)   | min
5297| pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio |  0   |   1     | min
5298| pname:primitiveFragmentShadingRateWithMultipleViewports   | false | false   | implementation-dependent
5299| pname:layeredShadingRateAttachments                       | false | false   | implementation-dependent
5300| pname:fragmentShadingRateNonTrivialCombinerOps            |   -   | false   | implementation-dependent
5301| pname:maxFragmentSize                                     |   -   | (2,2)   | min
5302| pname:maxFragmentSizeAspectRatio                          |   -   | 2       | min
5303| pname:maxFragmentShadingRateCoverageSamples               |   -   | 16      | min
5304| pname:maxFragmentShadingRateRasterizationSamples          |   -   | ename:VK_SAMPLE_COUNT_4_BIT      | min
5305| pname:fragmentShadingRateWithShaderDepthStencilWrites     |   -   | false   | implementation-dependent
5306| pname:fragmentShadingRateWithSampleMask                   |   -   | false   | implementation-dependent
5307| pname:fragmentShadingRateWithShaderSampleMask             |   -   | false   | implementation-dependent
5308| pname:fragmentShadingRateWithConservativeRasterization    |   -   | false   | implementation-dependent
5309| pname:fragmentShadingRateWithFragmentShaderInterlock      |   -   | false   | implementation-dependent
5310| pname:fragmentShadingRateWithCustomSampleLocations        |   -   | false   | implementation-dependent
5311| pname:fragmentShadingRateStrictMultiplyCombiner           |   -   | false   | implementation-dependent
5312endif::VK_KHR_fragment_shading_rate[]
5313ifdef::VK_NV_fragment_shading_rate_enums[]
5314| pname:maxFragmentShadingRateInvocationCount               | - | ename:VK_SAMPLE_COUNT_4_BIT | min
5315endif::VK_NV_fragment_shading_rate_enums[]
5316ifdef::VK_EXT_descriptor_buffer[]
5317| pname:combinedImageSamplerDescriptorSingleArray          | - | false | implementation-dependent
5318| pname:bufferlessPushDescriptors            | - | false | implementation-dependent
5319| pname:allowSamplerImageViewPostSubmitCreation     | - | false | implementation-dependent
5320| pname:descriptorBufferOffsetAlignment             | - | 256 | max
5321| pname:maxDescriptorBufferBindings                 | - | 3 | min
5322| pname:maxResourceDescriptorBufferBindings         | - | 1 | min
5323| pname:maxSamplerDescriptorBufferBindings          | - | 1 | min
5324| pname:maxEmbeddedImmutableSamplerBindings         | - | 1 | min
5325| pname:maxEmbeddedImmutableSamplers                | - | 2032 | min
5326| pname:bufferCaptureReplayDescriptorDataSize       | - | 64 | max
5327| pname:imageCaptureReplayDescriptorDataSize        | - | 64 | max
5328| pname:imageViewCaptureReplayDescriptorDataSize    | - | 64 | max
5329| pname:samplerCaptureReplayDescriptorDataSize      | - | 64 | max
5330| pname:accelerationStructureCaptureReplayDescriptorDataSize | - | 64 | max
5331| pname:samplerDescriptorSize                       | - | 256 | max
5332| pname:combinedImageSamplerDescriptorSize          | - | 256 | max
5333| pname:sampledImageDescriptorSize                  | - | 256 | max
5334| pname:storageImageDescriptorSize                  | - | 256 | max
5335| pname:uniformTexelBufferDescriptorSize            | - | 256 | max
5336| pname:robustUniformTexelBufferDescriptorSize      | - | 256 | max
5337| pname:storageTexelBufferDescriptorSize            | - | 256 | max
5338| pname:robustStorageTexelBufferDescriptorSize      | - | 256 | max
5339| pname:uniformBufferDescriptorSize                 | - | 256 | max
5340| pname:robustUniformBufferDescriptorSize           | - | 256 | max
5341| pname:storageBufferDescriptorSize                 | - | 256 | max
5342| pname:robustStorageBufferDescriptorSize           | - | 256 | max
5343| pname:inputAttachmentDescriptorSize               | - | 256 | max
5344| pname:accelerationStructureDescriptorSize         | - | 256 | max
5345| pname:maxSamplerDescriptorBufferRange             | - | [eq]#2^11^ {times} pname:samplerDescriptorSize# | min
5346| pname:maxResourceDescriptorBufferRange            | - | [eq]#(2^20^ - 2^15^) {times} ptext:maxResourceDescriptorSize# ^12^ | min
5347| pname:samplerDescriptorBufferAddressSpaceSize     | - | 2^27^ | min
5348| pname:resourceDescriptorBufferAddressSpaceSize    | - | 2^27^ | min
5349| pname:descriptorBufferAddressSpaceSize            | - | 2^27^ | min
5350ifdef::VK_EXT_fragment_density_map[]
5351| pname:combinedImageSamplerDensityMapDescriptorSize          | - | 256 | max
5352endif::VK_EXT_fragment_density_map[]
5353endif::VK_EXT_descriptor_buffer[]
5354ifdef::VK_HUAWEI_subpass_shading[]
5355| pname:maxSubpassShadingWorkgroupSizeAspectRatio |  0   |   1     | min
5356endif::VK_HUAWEI_subpass_shading[]
5357ifdef::VK_EXT_multi_draw[]
5358| pname:maxMultiDrawCount               | - | 1024 | min
5359endif::VK_EXT_multi_draw[]
5360ifdef::VK_EXT_nested_command_buffer[]
5361| pname:maxCommandBufferNestingLevel                        | - | 1 | min
5362endif::VK_EXT_nested_command_buffer[]
5363ifdef::VKSC_VERSION_1_0[]
5364| pname:deviceNoDynamicHostAllocations                      | - | -      | implementation-dependent
5365| pname:deviceDestroyFreesMemory                            | - | -      | implementation-dependent
5366| pname:commandPoolMultipleCommandBuffersRecording          | - | -      | implementation-dependent
5367| pname:commandPoolResetCommandBuffer                       | - | -      | implementation-dependent
5368| pname:commandBufferSimultaneousUse                        | - | -      | implementation-dependent
5369| pname:secondaryCommandBufferNullOrImagelessFramebuffer    | - | -      | implementation-dependent
5370| pname:recycleDescriptorSetMemory                          | - | -      | implementation-dependent
5371| pname:recyclePipelineMemory                               | - | -      | implementation-dependent
5372| pname:maxRenderPassSubpasses                              | - | 1      | min
5373| pname:maxRenderPassDependencies                           | - | 18     | min
5374| pname:maxSubpassInputAttachments                          | - | 0      | min
5375| pname:maxSubpassPreserveAttachments                       | - | 0      | min
5376| pname:maxFramebufferAttachments                           | - | 9 ^11^ | min
5377| pname:maxDescriptorSetLayoutBindings                      | - | 64     | min
5378| pname:maxQueryFaultCount                                  | - | 16     | min
5379| pname:maxCallbackFaultCount                               | - | 1      | min
5380| pname:maxCommandPoolCommandBuffers                        | - | 256    | min
5381| pname:maxCommandBufferSize                                | - | 2^20^  | min
5382endif::VKSC_VERSION_1_0[]
5383ifdef::VK_EXT_graphics_pipeline_library[]
5384| pname:graphicsPipelineLibraryFastLinking                  | - | false | implementation-dependent
5385| pname:graphicsPipelineLibraryIndependentInterpolationDecoration | - | false | implementation-dependent
5386endif::VK_EXT_graphics_pipeline_library[]
5387ifdef::VK_KHR_fragment_shader_barycentric[]
5388| pname:triStripVertexOrderIndependentOfProvokingVertex     |   -   | false   | implementation-dependent
5389endif::VK_KHR_fragment_shader_barycentric[]
5390ifdef::VK_QCOM_image_processing[]
5391| pname:maxWeightFilterPhases           | - | 1024    | min
5392| pname:maxWeightFilterDimension        | - | (64,64) | min
5393| pname:maxBlockMatchRegion             | - | (64,64) | min
5394| pname:maxBoxFilterBlockSize           | - | (64,64) | min
5395endif::VK_QCOM_image_processing[]
5396ifdef::VK_EXT_extended_dynamic_state3[]
5397| pname:dynamicPrimitiveTopologyUnrestricted   | - | -   | implementation-dependent
5398endif::VK_EXT_extended_dynamic_state3[]
5399ifdef::VK_EXT_opacity_micromap[]
5400| pname:maxOpacity2StateSubdivisionLevel | - | 3      | min
5401| pname:maxOpacity4StateSubdivisionLevel | - | 3      | min
5402endif::VK_EXT_opacity_micromap[]
5403ifdef::VK_NV_memory_decompression[]
5404| pname:maxDecompressionIndirectCount    | 1 | 2^16^-1 | min
5405endif::VK_NV_memory_decompression[]
5406ifdef::VK_HUAWEI_cluster_culling_shader[]
5407| pname:maxWorkGroupCount | - | (65536,1,1) | min
5408| pname:maxWorkGroupSize  | - | (32,1,1) | min
5409| pname:maxOutputClusterCount | - | 1024 | min
5410| pname:indirectBufferOffsetAlignment | - | - | implementation-dependent
5411endif::VK_HUAWEI_cluster_culling_shader[]
5412ifdef::VK_AMDX_shader_enqueue[]
5413| pname:maxExecutionGraphDepth                              |   -   | 32      | min
5414| pname:maxExecutionGraphShaderOutputNodes                  |   -   | 256     | min
5415| pname:maxExecutionGraphShaderPayloadSize                  |   -   | 32768   | min
5416| pname:maxExecutionGraphShaderPayloadCount                 |   -   | 256     | min
5417| pname:executionGraphDispatchAddressAlignment              |   -   | 4       | max
5418endif::VK_AMDX_shader_enqueue[]
5419ifdef::VK_NV_extended_sparse_address_space[]
5420| pname:extendedSparseAddressSpaceSize                      |   0   | pname:sparseAddressSpaceSize | min
5421endif::VK_NV_extended_sparse_address_space[]
5422ifdef::VK_ARM_render_pass_striped[]
5423| pname:renderPassStripeGranularity               | - | (64,64) | max
5424| pname:maxRenderPassStripes                      | - | 32 | min
5425endif::VK_ARM_render_pass_striped[]
5426|====
5427
54281::
5429    The *Limit Type* column specifies the limit is either the minimum limit
5430    all implementations must: support, the maximum limit all implementations
5431    must: support, or the exact value all implementations must: support.
5432    For bitmasks a minimum limit is the least bits all implementations must:
5433    set, but they may: have additional bits set beyond this minimum.
5434
54352::
5436    The pname:maxPerStageResources must: be at least the smallest of the
5437    following:
5438+
5439  * the sum of the pname:maxPerStageDescriptorUniformBuffers,
5440    pname:maxPerStageDescriptorStorageBuffers,
5441    pname:maxPerStageDescriptorSampledImages,
5442    pname:maxPerStageDescriptorStorageImages,
5443    pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments
5444    limits, or
5445  * 128.
5446+
5447It may: not be possible to reach this limit in every stage.
5448
54493::
5450    See <<limits-maxViewportDimensions, pname:maxViewportDimensions>> for
5451    the required: relationship to other limits.
5452
54534::
5454    See <<limits-viewportboundsrange, pname:viewportBoundsRange>> for the
5455    required: relationship to other limits.
5456
54575::
5458    The values pname:minInterpolationOffset and pname:maxInterpolationOffset
5459    describe the closed interval of supported interpolation offsets:
5460    [pname:minInterpolationOffset, pname:maxInterpolationOffset].
5461    The ULP is determined by pname:subPixelInterpolationOffsetBits.
5462    If pname:subPixelInterpolationOffsetBits is 4, this provides increments
5463    of (1/2^4^) = 0.0625, and thus the range of supported interpolation
5464    offsets would be [eq]#[-0.5, 0.4375]#.
5465
54666::
5467    The point size ULP is determined by pname:pointSizeGranularity.
5468    If the pname:pointSizeGranularity is 0.125, the range of supported point
5469    sizes must: be at least [1.0, 63.875].
5470
54717::
5472    The line width ULP is determined by pname:lineWidthGranularity.
5473    If the pname:lineWidthGranularity is 0.0625, the range of supported line
5474    widths must: be at least [1.0, 7.9375].
5475
54768::
5477    The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding
5478    _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is
5479    the number of shader stages supported by the slink:VkPhysicalDevice.
5480    If all shader stages are supported, _n_ = 6 (vertex, tessellation
5481    control, tessellation evaluation, geometry, fragment, compute).
5482
5483ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
54849::
5485    The ptext:UpdateAfterBind descriptor limits must: each be greater than
5486    or equal to the corresponding ptext:non-UpdateAfterBind limit.
5487endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
5488
5489ifdef::VK_KHR_portability_subset[]
549010::
5491     If the `apiext:VK_KHR_portability_subset` extension is enabled, the
5492     required minimum value of pname:maxVertexInputBindings is code:8.
5493endif::VK_KHR_portability_subset[]
5494
5495ifdef::VKSC_VERSION_1_0[]
549611:: ptext:maxFramebufferAttachments must: be greater than or equal to two
5497     times pname:maxColorAttachments (for color and resolve attachments)
5498     plus one (for the depth/stencil attachment), or else must: be equal to
5499     2^32^-1.
5500endif::VKSC_VERSION_1_0[]
5501
5502ifdef::VK_EXT_descriptor_buffer[]
550312::
5504     ptext:maxResourceDescriptorSize is defined as the maximum value of
5505     pname:storageImageDescriptorSize, pname:sampledImageDescriptorSize,
5506     pname:robustUniformTexelBufferDescriptorSize,
5507     pname:robustStorageTexelBufferDescriptorSize,
5508     pname:robustUniformBufferDescriptorSize,
5509     pname:robustStorageBufferDescriptorSize,
5510     pname:inputAttachmentDescriptorSize, and
5511     pname:accelerationStructureDescriptorSize.
5512endif::VK_EXT_descriptor_buffer[]
5513
5514
5515ifdef::VK_EXT_sample_locations[]
5516[[limits-multisample]]
5517== Additional Multisampling Capabilities
5518
5519[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos']
5520--
5521To query additional multisampling capabilities which may: be supported for a
5522specific sample count, beyond the minimum capabilities described for
5523<<limits, Limits>> above, call:
5524
5525include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.adoc[]
5526
5527  * pname:physicalDevice is the physical device from which to query the
5528    additional multisampling capabilities.
5529  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
5530    sample count to query capabilities for.
5531  * pname:pMultisampleProperties is a pointer to a
5532    slink:VkMultisamplePropertiesEXT structure in which information about
5533    additional multisampling capabilities specific to the sample count is
5534    returned.
5535
5536include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.adoc[]
5537--
5538
5539[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
5540--
5541The sname:VkMultisamplePropertiesEXT structure is defined as
5542
5543include::{generated}/api/structs/VkMultisamplePropertiesEXT.adoc[]
5544
5545  * pname:sType is a elink:VkStructureType value identifying this structure.
5546  * pname:pNext is `NULL` or a pointer to a structure extending this
5547    structure.
5548  * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
5549    which sample locations can: vary.
5550
5551include::{generated}/validity/structs/VkMultisamplePropertiesEXT.adoc[]
5552--
5553
5554If the sample count for which additional multisampling capabilities are
5555requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set in
5556<<limits-sampleLocationSampleCounts, pname:sampleLocationSampleCounts>> the
5557pname:width and pname:height members of
5558sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be
5559greater than or equal to the corresponding members of
5560<<limits-maxSampleLocationGridSize, pname:maxSampleLocationGridSize>>,
5561respectively, otherwise both members must: be `0`.
5562
5563endif::VK_EXT_sample_locations[]
5564
5565// If you are adding a new features structure, it must be placed at the end
5566// of the previous section (immediately before <<limits-multisample>>).
5567
5568
5569ifdef::VK_VERSION_1_3[]
5570[[profile-limits]]
5571== Profile Limits
5572
5573
5574[[profile-limits-roadmap-2022]]
5575=== Roadmap 2022
5576
5577Implementations that claim support for the <<roadmap-2022, Roadmap 2022>>
5578profile must: satisfy the following additional limit requirements:
5579
5580[width="100%",cols="<35,<14,<11",options="header"]
5581|====
5582| Limit                                    | Supported Limit  | Limit Type^1^
5583| pname:maxImageDimension1D                   | 8192          | min
5584| pname:maxImageDimension2D                   | 8192          | min
5585| pname:maxImageDimensionCube                 | 8192          | min
5586| pname:maxImageArrayLayers                   | 2048          | min
5587| pname:maxUniformBufferRange                 | 65536         | min
5588| pname:bufferImageGranularity                | 4096          | max
5589| pname:maxPerStageDescriptorSamplers         | 64            | min
5590| pname:maxPerStageDescriptorUniformBuffers   | 15            | min
5591| pname:maxPerStageDescriptorStorageBuffers   | 30            | min
5592| pname:maxPerStageDescriptorSampledImages    | 200           | min
5593| pname:maxPerStageDescriptorStorageImages    | 16            | min
5594| pname:maxPerStageResources                  | 200           | min
5595| pname:maxDescriptorSetSamplers              | 576           | min
5596| pname:maxDescriptorSetUniformBuffers        | 90            | min
5597| pname:maxDescriptorSetStorageBuffers        | 96            | min
5598| pname:maxDescriptorSetSampledImages         | 1800          | min
5599| pname:maxDescriptorSetStorageImages         | 144           | min
5600| pname:maxFragmentCombinedOutputResources    | 16            | min
5601| pname:maxComputeWorkGroupInvocations        | 256           | min
5602| pname:maxComputeWorkGroupSize               | (256,256,64)  | min
5603| pname:subTexelPrecisionBits                 | 8             | min
5604| pname:mipmapPrecisionBits                   | 6             | min
5605| pname:maxSamplerLodBias                     | 14            | min
5606| pname:pointSizeGranularity                  | 0.125         | max
5607| pname:lineWidthGranularity                  | 0.5           | max
5608| pname:standardSampleLocations               | ename:VK_TRUE | Boolean
5609| pname:maxColorAttachments                   | 7             | min
5610| pname:subgroupSize                          | 4             | min
5611| pname:subgroupSupportedStages               | ename:VK_SHADER_STAGE_COMPUTE_BIT +
5612                                                ename:VK_SHADER_STAGE_FRAGMENT_BIT
5613                                                              | bitfield
5614| pname:subgroupSupportedOperations           | ename:VK_SUBGROUP_FEATURE_BASIC_BIT +
5615                                                ename:VK_SUBGROUP_FEATURE_VOTE_BIT +
5616                                                ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT +
5617                                                ename:VK_SUBGROUP_FEATURE_BALLOT_BIT +
5618                                                ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT +
5619                                                ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT +
5620                                                ename:VK_SUBGROUP_FEATURE_QUAD_BIT
5621                                                              | bitfield
5622| pname:shaderSignedZeroInfNanPreserveFloat16 | ename:VK_TRUE | Boolean
5623| pname:shaderSignedZeroInfNanPreserveFloat32 | ename:VK_TRUE | Boolean
5624| pname:maxSubgroupSize                       | 4             | min
5625| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments | 7    | min
5626|====
5627endif::VK_VERSION_1_3[]
5628