• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2015-2021 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.txt[]
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.
121  * [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the
122    maximum number of descriptor sets that can: be simultaneously used by a
123    pipeline.
124    All code:DescriptorSet decorations in shader modules must: have a value
125    less than pname:maxBoundDescriptorSets.
126    See <<descriptorsets-sets>>.
127  * [[limits-maxPerStageDescriptorSamplers]]
128    pname:maxPerStageDescriptorSamplers is the maximum number of samplers
129    that can: be accessible to a single shader stage in a pipeline layout.
130    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
131    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
132    limit.
133ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
134    Only descriptors in descriptor set layouts created without the
135    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
136    count against this limit.
137endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
138    A descriptor is accessible to a shader stage when the pname:stageFlags
139    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
140    for that shader stage set.
141    See <<descriptorsets-sampler>> and
142    <<descriptorsets-combinedimagesampler>>.
143  * [[limits-maxPerStageDescriptorUniformBuffers]]
144    pname:maxPerStageDescriptorUniformBuffers is the maximum number of
145    uniform buffers that can: be accessible to a single shader stage in a
146    pipeline layout.
147    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
148    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
149    limit.
150ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
151    Only descriptors in descriptor set layouts created without the
152    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
153    count against this limit.
154endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
155    A descriptor is accessible to a shader stage when the pname:stageFlags
156    member of the sname:VkDescriptorSetLayoutBinding structure has the bit
157    for that shader stage set.
158    See <<descriptorsets-uniformbuffer>> and
159    <<descriptorsets-uniformbufferdynamic>>.
160  * [[limits-maxPerStageDescriptorStorageBuffers]]
161    pname:maxPerStageDescriptorStorageBuffers is the maximum number of
162    storage buffers that can: be accessible to a single shader stage in a
163    pipeline layout.
164    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
165    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
166    limit.
167ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
168    Only descriptors in descriptor set layouts created without the
169    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
170    count against this limit.
171endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
172    A descriptor is accessible to a pipeline shader stage when the
173    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
174    structure has the bit for that shader stage set.
175    See <<descriptorsets-storagebuffer>> and
176    <<descriptorsets-storagebufferdynamic>>.
177  * [[limits-maxPerStageDescriptorSampledImages]]
178    pname:maxPerStageDescriptorSampledImages is the maximum number of
179    sampled images that can: be accessible to a single shader stage in a
180    pipeline layout.
181    Descriptors with a type of
182    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
183    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
184    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
185ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
186    Only descriptors in descriptor set layouts created without the
187    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
188    count against this limit.
189endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
190    A descriptor is accessible to a pipeline shader stage when the
191    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
192    structure has the bit for that shader stage set.
193    See <<descriptorsets-combinedimagesampler>>,
194    <<descriptorsets-sampledimage>>, and
195    <<descriptorsets-uniformtexelbuffer>>.
196  * [[limits-maxPerStageDescriptorStorageImages]]
197    pname:maxPerStageDescriptorStorageImages is the maximum number of
198    storage images that can: be accessible to a single shader stage in a
199    pipeline layout.
200    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
201    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
202ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
203    Only descriptors in descriptor set layouts created without the
204    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
205    count against this limit.
206endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
207    A descriptor is accessible to a pipeline shader stage when the
208    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
209    structure has the bit for that shader stage set.
210    See <<descriptorsets-storageimage>>, and
211    <<descriptorsets-storagetexelbuffer>>.
212  * [[limits-maxPerStageDescriptorInputAttachments]]
213    pname:maxPerStageDescriptorInputAttachments is the maximum number of
214    input attachments that can: be accessible to a single shader stage in a
215    pipeline layout.
216    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
217    count against this limit.
218ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
219    Only descriptors in descriptor set layouts created without the
220    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
221    count against this limit.
222endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
223    A descriptor is accessible to a pipeline shader stage when the
224    pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
225    structure has the bit for that shader stage set.
226    These are only supported for the fragment stage.
227    See <<descriptorsets-inputattachment>>.
228  * [[limits-maxPerStageResources]] pname:maxPerStageResources is the
229    maximum number of resources that can: be accessible to a single shader
230    stage in a pipeline layout.
231    Descriptors with a type of
232    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
233    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
234    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
235    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
236    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
237    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
238    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
239    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
240    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
241    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
242ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
243    Only descriptors in descriptor set layouts created without the
244    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
245    count against this limit.
246endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
247    For the fragment shader stage the framebuffer color attachments also
248    count against this limit.
249  * [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is
250    the maximum number of samplers that can: be included in a pipeline
251    layout.
252    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
253    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
254    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    See <<descriptorsets-sampler>> and
261    <<descriptorsets-combinedimagesampler>>.
262  * [[limits-maxDescriptorSetUniformBuffers]]
263    pname:maxDescriptorSetUniformBuffers is the maximum number of uniform
264    buffers that can: be included in a pipeline layout.
265    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
266    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC 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-uniformbuffer>> and
274    <<descriptorsets-uniformbufferdynamic>>.
275  * [[limits-maxDescriptorSetUniformBuffersDynamic]]
276    pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of
277    dynamic uniform buffers that can: be included in a pipeline layout.
278    Descriptors with a type of
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-uniformbufferdynamic>>.
287  * [[limits-maxDescriptorSetStorageBuffers]]
288    pname:maxDescriptorSetStorageBuffers is the maximum number of storage
289    buffers that can: be included in a pipeline layout.
290    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
291    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
292    limit.
293ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
294    Only descriptors in descriptor set layouts created without the
295    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
296    count against this limit.
297endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
298    See <<descriptorsets-storagebuffer>> and
299    <<descriptorsets-storagebufferdynamic>>.
300  * [[limits-maxDescriptorSetStorageBuffersDynamic]]
301    pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of
302    dynamic storage buffers that can: be included in a pipeline layout.
303    Descriptors with a type of
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-storagebufferdynamic>>.
312  * [[limits-maxDescriptorSetSampledImages]]
313    pname:maxDescriptorSetSampledImages is the maximum number of sampled
314    images that can: be included in a pipeline layout.
315    Descriptors with a type of
316    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
317    ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
318    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this 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-combinedimagesampler>>,
325    <<descriptorsets-sampledimage>>, and
326    <<descriptorsets-uniformtexelbuffer>>.
327  * [[limits-maxDescriptorSetStorageImages]]
328    pname:maxDescriptorSetStorageImages is the maximum number of storage
329    images that can: be included in a pipeline layout.
330    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
331    ename:VK_DESCRIPTOR_TYPE_STORAGE_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-storageimage>>, and
338    <<descriptorsets-storagetexelbuffer>>.
339  * [[limits-maxDescriptorSetInputAttachments]]
340    pname:maxDescriptorSetInputAttachments is the maximum number of input
341    attachments that can: be included in a pipeline layout.
342    Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
343    count against this limit.
344ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
345    Only descriptors in descriptor set layouts created without the
346    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
347    count against this limit.
348endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
349    See <<descriptorsets-inputattachment>>.
350  * [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is
351    the maximum number of vertex input attributes that can: be specified for
352    a graphics pipeline.
353    These are described in the array of
354    sname:VkVertexInputAttributeDescription structures that are provided at
355    graphics pipeline creation time via the
356    pname:pVertexAttributeDescriptions member of the
357    slink:VkPipelineVertexInputStateCreateInfo structure.
358    See <<fxvertex-attrib>> and <<fxvertex-input>>.
359  * [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the
360    maximum number of vertex buffers that can: be specified for providing
361    vertex attributes to a graphics pipeline.
362    These are described in the array of
363    sname:VkVertexInputBindingDescription structures that are provided at
364    graphics pipeline creation time via the pname:pVertexBindingDescriptions
365    member of the slink:VkPipelineVertexInputStateCreateInfo structure.
366    The pname:binding member of sname:VkVertexInputBindingDescription must:
367    be less than this limit.
368    See <<fxvertex-input>>.
369  * [[limits-maxVertexInputAttributeOffset]]
370    pname:maxVertexInputAttributeOffset is the maximum vertex input
371    attribute offset that can: be added to the vertex input binding stride.
372    The pname:offset member of the sname:VkVertexInputAttributeDescription
373    structure must: be less than or equal to this limit.
374    See <<fxvertex-input>>.
375  * [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride
376    is the maximum vertex input binding stride that can: be specified in a
377    vertex input binding.
378    The pname:stride member of the sname:VkVertexInputBindingDescription
379    structure must: be less than or equal to this limit.
380    See <<fxvertex-input>>.
381  * [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is
382    the maximum number of components of output variables which can: be
383    output by a vertex shader.
384    See <<shaders-vertex>>.
385  * [[limits-maxTessellationGenerationLevel]]
386    pname:maxTessellationGenerationLevel is the maximum tessellation
387    generation level supported by the fixed-function tessellation primitive
388    generator.
389    See <<tessellation>>.
390  * [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is
391    the maximum patch size, in vertices, of patches that can: be processed
392    by the tessellation control shader and tessellation primitive generator.
393    The pname:patchControlPoints member of the
394    slink:VkPipelineTessellationStateCreateInfo structure specified at
395    pipeline creation time and the value provided in the code:OutputVertices
396    execution mode of shader modules must: be less than or equal to this
397    limit.
398    See <<tessellation>>.
399  * [[limits-maxTessellationControlPerVertexInputComponents]]
400    pname:maxTessellationControlPerVertexInputComponents is the maximum
401    number of components of input variables which can: be provided as
402    per-vertex inputs to the tessellation control shader stage.
403  * [[limits-maxTessellationControlPerVertexOutputComponents]]
404    pname:maxTessellationControlPerVertexOutputComponents is the maximum
405    number of components of per-vertex output variables which can: be output
406    from the tessellation control shader stage.
407  * [[limits-maxTessellationControlPerPatchOutputComponents]]
408    pname:maxTessellationControlPerPatchOutputComponents is the maximum
409    number of components of per-patch output variables which can: be output
410    from the tessellation control shader stage.
411  * [[limits-maxTessellationControlTotalOutputComponents]]
412    pname:maxTessellationControlTotalOutputComponents is the maximum total
413    number of components of per-vertex and per-patch output variables which
414    can: be output from the tessellation control shader stage.
415  * [[limits-maxTessellationEvaluationInputComponents]]
416    pname:maxTessellationEvaluationInputComponents is the maximum number of
417    components of input variables which can: be provided as per-vertex
418    inputs to the tessellation evaluation shader stage.
419  * [[limits-maxTessellationEvaluationOutputComponents]]
420    pname:maxTessellationEvaluationOutputComponents is the maximum number of
421    components of per-vertex output variables which can: be output from the
422    tessellation evaluation shader stage.
423  * [[limits-maxGeometryShaderInvocations]]
424    pname:maxGeometryShaderInvocations is the maximum invocation count
425    supported for instanced geometry shaders.
426    The value provided in the code:Invocations execution mode of shader
427    modules must: be less than or equal to this limit.
428    See <<geometry>>.
429  * [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents
430    is the maximum number of components of input variables which can: be
431    provided as inputs to the geometry shader stage.
432  * [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents
433    is the maximum number of components of output variables which can: be
434    output from the geometry shader stage.
435  * [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is
436    the maximum number of vertices which can: be emitted by any geometry
437    shader.
438  * [[limits-maxGeometryTotalOutputComponents]]
439    pname:maxGeometryTotalOutputComponents is the maximum total number of
440    components of output variables, across all emitted vertices, which can:
441    be output from the geometry shader stage.
442  * [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents
443    is the maximum number of components of input variables which can: be
444    provided as inputs to the fragment shader stage.
445  * [[limits-maxFragmentOutputAttachments]]
446    pname:maxFragmentOutputAttachments is the maximum number of output
447    attachments which can: be written to by the fragment shader stage.
448  * [[limits-maxFragmentDualSrcAttachments]]
449    pname:maxFragmentDualSrcAttachments is the maximum number of output
450    attachments which can: be written to by the fragment shader stage when
451    blending is enabled and one of the dual source blend modes is in use.
452    See <<framebuffer-dsb>> and <<features-dualSrcBlend,dualSrcBlend>>.
453  * [[limits-maxFragmentCombinedOutputResources]]
454    pname:maxFragmentCombinedOutputResources is the total number of storage
455    buffers, storage images, and output code:Location decorated color
456    attachments (described in <<interfaces-fragmentoutput, Fragment Output
457    Interface>>) which can: be used in the fragment shader stage.
458  * [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize
459    is the maximum total storage size, in bytes, available for variables
460    declared with the code:Workgroup storage class in shader modules (or
461    with the code:shared storage qualifier in GLSL) in the compute shader
462    stage.
463ifdef::VK_KHR_workgroup_memory_explicit_layout[]
464    When variables declared with the code:Workgroup storage class are
465    explicitly laid out (hence they are also decorated with code:Block), the
466    amount of storage consumed is the size of the largest Block variable,
467    not counting any padding at the end.
468endif::VK_KHR_workgroup_memory_explicit_layout[]
469    The amount of storage consumed by the
470ifdef::VK_KHR_workgroup_memory_explicit_layout[]
471    non-Block
472endif::VK_KHR_workgroup_memory_explicit_layout[]
473    variables declared with the code:Workgroup storage class is
474    implementation-dependent.
475    However, the amount of storage consumed may not exceed the largest block
476    size that would be obtained if all active
477ifdef::VK_KHR_workgroup_memory_explicit_layout[]
478    non-Block
479endif::VK_KHR_workgroup_memory_explicit_layout[]
480    variables declared with code:Workgroup storage class were assigned
481    offsets in an arbitrary order by successively taking the smallest valid
482    offset according to the <<interfaces-resources-standard-layout,Standard
483    Storage Buffer Layout>> rules.
484    (This is equivalent to using the GLSL std430 layout rules.)
485  * [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is
486    the maximum number of local workgroups that can: be dispatched by a
487    single dispatching command.
488    These three values represent the maximum number of local workgroups for
489    the X, Y, and Z dimensions, respectively.
490    The workgroup count parameters to the dispatching commands must: be less
491    than or equal to the corresponding limit.
492    See <<dispatch>>.
493  * [[limits-maxComputeWorkGroupInvocations]]
494    pname:maxComputeWorkGroupInvocations is the maximum total number of
495    compute shader invocations in a single local workgroup.
496    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
497ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
498    execution mode in shader modules or by the object decorated by the
499    code:WorkgroupSize decoration, must: be less than or equal to this
500    limit.
501  * [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is
502    the maximum size of a local compute workgroup, per dimension.
503    These three values represent the maximum local workgroup size in the X,
504    Y, and Z dimensions, respectively.
505    The pname:x, pname:y, and pname:z sizes, as specified by the
506    code:LocalSize
507ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
508    execution mode or by the object decorated by the code:WorkgroupSize
509    decoration in shader modules, must: be less than or equal to the
510    corresponding limit.
511  * [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the
512    number of bits of subpixel precision in framebuffer coordinates
513    [eq]#x~f~# and [eq]#y~f~#.
514    See <<primsrast>>.
515  * [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the
516    number of bits of precision in the division along an axis of an image
517    used for minification and magnification filters.
518    [eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions
519    along each axis of the image represented.
520    Sub-texel values calculated during image sampling will snap to these
521    locations when generating the filtered results.
522  * [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number
523    of bits of division that the LOD calculation for mipmap fetching get
524    snapped to when determining the contribution from each mip level to the
525    mip filtered results.
526    [eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions.
527  * [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is
528    the maximum index value that can: be used for indexed draw calls when
529    using 32-bit indices.
530    This excludes the primitive restart index value of 0xFFFFFFFF.
531    See <<features-fullDrawIndexUint32,fullDrawIndexUint32>>.
532  * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the
533    maximum draw count that is supported for indirect drawing calls.
534    See <<features-multiDrawIndirect,multiDrawIndirect>>.
535  * [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum
536    absolute sampler LOD bias.
537    The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo
538    structure and the code:Bias operand of image sampling operations in
539    shader modules (or 0 if no code:Bias operand is provided to an image
540    sampling operation) are clamped to the range
541    [eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#.
542    See <<samplers-mipLodBias>>.
543  * [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the
544    maximum degree of sampler anisotropy.
545    The maximum degree of anisotropic filtering used for an image sampling
546    operation is the minimum of the pname:maxAnisotropy member of the
547    slink:VkSamplerCreateInfo structure and this limit.
548    See <<samplers-maxAnisotropy>>.
549  * [[limits-maxViewports]] pname:maxViewports is the maximum number of
550    active viewports.
551    The pname:viewportCount member of the
552    slink:VkPipelineViewportStateCreateInfo structure that is provided at
553    pipeline creation must: be less than or equal to this limit.
554  * [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the
555    maximum viewport dimensions in the X (width) and Y (height) dimensions,
556    respectively.
557    The maximum viewport dimensions must: be greater than or equal to the
558    largest image which can: be created and used as a framebuffer
559    attachment.
560    See <<vertexpostproc-viewport,Controlling the Viewport>>.
561  * [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the
562    [eq]#[minimum, maximum]# range that the corners of a viewport must: be
563    contained in.
564    This range must: be at least [eq]#[-2 {times} pname:size, 2 {times}
565    pname:size - 1]#, where [eq]#pname:size =
566    max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#.
567    See <<vertexpostproc-viewport,Controlling the Viewport>>.
568+
569[NOTE]
570.Note
571====
572The intent of the pname:viewportBoundsRange limit is to allow a maximum
573sized viewport to be arbitrarily shifted relative to the output target as
574long as at least some portion intersects.
575This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times}
576pname:size - 1]# which would allow all possible non-empty-set intersections
577of the output target and the viewport.
578Since these numbers are typically powers of two, picking the signed number
579range using the smallest possible number of bits ends up with the specified
580range.
581====
582  * [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number
583    of bits of subpixel precision for viewport bounds.
584    The subpixel precision that floating-point viewport bounds are
585    interpreted at is given by this limit.
586  * [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the
587    minimum required: alignment, in bytes, of host visible memory
588    allocations within the host address space.
589    When mapping a memory allocation with flink:vkMapMemory, subtracting
590    pname:offset bytes from the returned pointer will always produce an
591    integer multiple of this limit.
592    See <<memory-device-hostaccess>>.
593  * [[limits-minTexelBufferOffsetAlignment]]
594    pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
595    in bytes, for the pname:offset member of the
596    slink:VkBufferViewCreateInfo structure for texel buffers.
597ifdef::VK_EXT_texel_buffer_alignment[]
598    If <<features-texelBufferAlignment,texelBufferAlignment>> is enabled,
599    this limit is equivalent to the maximum of the
600    <<limits-uniformTexelBufferOffsetAlignmentBytes,
601    pname:uniformTexelBufferOffsetAlignmentBytes>> and
602    <<limits-storageTexelBufferOffsetAlignmentBytes,
603    pname:storageTexelBufferOffsetAlignmentBytes>> members of
604    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT, but smaller
605    alignment is optionally: allowed by
606    <<limits-storageTexelBufferOffsetSingleTexelAlignment,
607    pname:storageTexelBufferOffsetSingleTexelAlignment>> and
608    <<limits-uniformTexelBufferOffsetSingleTexelAlignment,
609    pname:uniformTexelBufferOffsetSingleTexelAlignment>>.
610    If <<features-texelBufferAlignment,texelBufferAlignment>> is not
611    enabled,
612endif::VK_EXT_texel_buffer_alignment[]
613    slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this
614    value.
615  * [[limits-minUniformBufferOffsetAlignment]]
616    pname:minUniformBufferOffsetAlignment is the minimum required:
617    alignment, in bytes, for the pname:offset member of the
618    sname:VkDescriptorBufferInfo structure for uniform buffers.
619    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
620    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the
621    pname:offset must: be an integer multiple of this limit.
622    Similarly, dynamic offsets for uniform buffers must: be multiples of
623    this limit.
624  * [[limits-minStorageBufferOffsetAlignment]]
625    pname:minStorageBufferOffsetAlignment is the minimum required:
626    alignment, in bytes, for the pname:offset member of the
627    sname:VkDescriptorBufferInfo structure for storage buffers.
628    When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
629    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the
630    pname:offset must: be an integer multiple of this limit.
631    Similarly, dynamic offsets for storage buffers must: be multiples of
632    this limit.
633  * [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset
634    value for the code:ConstOffset image operand of any of the
635    code:OpImageSample* or code:OpImageFetch* image instructions.
636  * [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset
637    value for the code:ConstOffset image operand of any of the
638    code:OpImageSample* or code:OpImageFetch* image instructions.
639  * [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the
640    minimum 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-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the
644    maximum offset value for the code:Offset, code:ConstOffset, or
645    code:ConstOffsets image operands of any of the code:OpImage*Gather image
646    instructions.
647  * [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the
648    base minimum (inclusive) negative offset value for the code:Offset
649    operand of the code:InterpolateAtOffset extended instruction.
650  * [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the
651    base maximum (inclusive) positive offset value for the code:Offset
652    operand of the code:InterpolateAtOffset extended instruction.
653  * [[limits-subPixelInterpolationOffsetBits]]
654    pname:subPixelInterpolationOffsetBits is the number of fractional bits
655    that the code:x and code:y offsets to the code:InterpolateAtOffset
656    extended instruction may: be rounded to as fixed-point values.
657  * [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum
658    width for a framebuffer.
659    The pname:width member of the slink:VkFramebufferCreateInfo structure
660    must: be less than or equal to this limit.
661  * [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the
662    maximum height for a framebuffer.
663    The pname:height member of the slink:VkFramebufferCreateInfo structure
664    must: be less than or equal to this limit.
665  * [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the
666    maximum layer count for a layered framebuffer.
667    The pname:layers member of the slink:VkFramebufferCreateInfo structure
668    must: be less than or equal to this limit.
669  * [[limits-framebufferColorSampleCounts]]
670    pname:framebufferColorSampleCounts is a bitmask^1^ of
671    elink:VkSampleCountFlagBits indicating the color sample counts that are
672    supported for all framebuffer color attachments with floating- or
673    fixed-point formats.
674ifndef::VK_VERSION_1_2[]
675    There is no limit specifying the color sample counts that are supported
676    for all color attachments with integer formats.
677endif::VK_VERSION_1_2[]
678ifdef::VK_VERSION_1_2[]
679    For color attachments with integer formats, see
680    <<limits-framebufferIntegerColorSampleCounts,
681    pname:framebufferIntegerColorSampleCounts>>.
682endif::VK_VERSION_1_2[]
683  * [[limits-framebufferDepthSampleCounts]]
684    pname:framebufferDepthSampleCounts is a bitmask^1^ of
685    elink:VkSampleCountFlagBits indicating the supported depth sample counts
686    for all framebuffer depth/stencil attachments, when the format includes
687    a depth component.
688  * [[limits-framebufferStencilSampleCounts]]
689    pname:framebufferStencilSampleCounts is a bitmask^1^ of
690    elink:VkSampleCountFlagBits indicating the supported stencil sample
691    counts for all framebuffer depth/stencil attachments, when the format
692    includes a stencil component.
693  * [[limits-framebufferNoAttachmentsSampleCounts]]
694    pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of
695    elink:VkSampleCountFlagBits indicating the supported sample counts for a
696    <<renderpass-noattachments, subpass which uses no attachments>>.
697  * [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum
698    number of color attachments that can: be used by a subpass in a render
699    pass.
700    The pname:colorAttachmentCount member of the sname:VkSubpassDescription
701ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
702    or sname:VkSubpassDescription2
703endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
704    structure must: be less than or equal to this limit.
705  * [[limits-sampledImageColorSampleCounts]]
706    pname:sampledImageColorSampleCounts is a bitmask^1^ of
707    elink:VkSampleCountFlagBits indicating the sample counts supported for
708    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
709    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color
710    format.
711  * [[limits-sampledImageIntegerSampleCounts]]
712    pname:sampledImageIntegerSampleCounts is a bitmask^1^ of
713    elink:VkSampleCountFlagBits indicating the sample counts supported for
714    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
715    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color
716    format.
717  * [[limits-sampledImageDepthSampleCounts]]
718    pname:sampledImageDepthSampleCounts is a bitmask^1^ of
719    elink:VkSampleCountFlagBits indicating the sample counts supported for
720    all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
721    containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format.
722  * [[limits-sampledImageStencilSampleCounts]]
723    pname:sampledImageStencilSampleCounts 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 stencil format.
727  * [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a
728    bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts
729    supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL,
730    and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT.
731  * [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum
732    number of array elements of a variable decorated with the
733    code:SampleMask built-in decoration.
734  * [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics
735    specifies support for timestamps on all graphics and compute queues.
736    If this limit is set to ename:VK_TRUE, all queues that advertise the
737    ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the
738    sname:VkQueueFamilyProperties::pname:queueFlags support
739    sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36.
740    See <<queries-timestamps, Timestamp Queries>>.
741  * [[limits-timestampPeriod]] pname:timestampPeriod is the number of
742    nanoseconds required: for a timestamp query to be incremented by 1.
743    See <<queries-timestamps, Timestamp Queries>>.
744  * [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number
745    of clip distances that can: be used in a single shader stage.
746    The size of any array declared with the code:ClipDistance built-in
747    decoration in a shader module must: be less than or equal to this limit.
748  * [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number
749    of cull distances that can: be used in a single shader stage.
750    The size of any array declared with the code:CullDistance built-in
751    decoration in a shader module must: be less than or equal to this limit.
752  * [[limits-maxCombinedClipAndCullDistances]]
753    pname:maxCombinedClipAndCullDistances is the maximum combined number of
754    clip and cull distances that can: be used in a single shader stage.
755    The sum of the sizes of any pair of arrays declared with the
756    code:ClipDistance and code:CullDistance built-in decoration used by a
757    single shader stage in a shader module must: be less than or equal to
758    this limit.
759  * [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the
760    number of discrete priorities that can: be assigned to a queue based on
761    the value of each member of
762    slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities.
763    This must: be at least 2, and levels must: be spread evenly over the
764    range, with at least one level at 1.0, and another at 0.0.
765    See <<devsandqueues-priority>>.
766  * [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range
767    [eq]#[pname:minimum,pname:maximum]# of supported sizes for points.
768    Values written to variables decorated with the code:PointSize built-in
769    decoration are clamped to this range.
770  * [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range
771    [eq]#[pname:minimum,pname:maximum]# of supported widths for lines.
772    Values specified by the pname:lineWidth member of the
773    slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth
774    parameter to fname:vkCmdSetLineWidth are clamped to this range.
775  * [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the
776    granularity of supported point sizes.
777    Not all point sizes in the range defined by pname:pointSizeRange are
778    supported.
779    This limit specifies the granularity (or increment) between successive
780    supported point sizes.
781  * [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the
782    granularity of supported line widths.
783    Not all line widths in the range defined by pname:lineWidthRange are
784    supported.
785    This limit specifies the granularity (or increment) between successive
786    supported line widths.
787  * [[limits-strictLines]] pname:strictLines specifies whether lines are
788    rasterized according to the preferred method of rasterization.
789    If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set
790    of rules.
791    If set to ename:VK_TRUE, lines are rasterized as per the strict
792    definition.
793    See <<primsrast-lines-basic,Basic Line Segment Rasterization>>.
794  * [[limits-standardSampleLocations]] pname:standardSampleLocations
795    specifies whether rasterization uses the standard sample locations as
796    documented in <<primsrast-multisampling,Multisampling>>.
797    If set to ename:VK_TRUE, the implementation uses the documented sample
798    locations.
799    If set to ename:VK_FALSE, the implementation may: use different sample
800    locations.
801  * [[limits-optimalBufferCopyOffsetAlignment]]
802    pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset
803    alignment in bytes for
804ifndef::VK_KHR_copy_commands2[]
805    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
806endif::VK_KHR_copy_commands2[]
807ifdef::VK_KHR_copy_commands2[]
808    flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
809    flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
810endif::VK_KHR_copy_commands2[]
811    The per texel alignment requirements are enforced, but applications
812    should: use the optimal alignment for optimal performance and power use.
813  * [[limits-optimalBufferCopyRowPitchAlignment]]
814    pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
815    alignment in bytes for
816ifndef::VK_KHR_copy_commands2[]
817    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
818endif::VK_KHR_copy_commands2[]
819ifdef::VK_KHR_copy_commands2[]
820    flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
821    flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
822endif::VK_KHR_copy_commands2[]
823    Row pitch is the number of bytes between texels with the same X
824    coordinate in adjacent rows (Y coordinates differ by one).
825    The per texel alignment requirements are enforced, but applications
826    should: use the optimal alignment for optimal performance and power use.
827  * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and
828    alignment in bytes that bounds concurrent access to
829    <<memory-device-hostaccess, host-mapped device memory>>.
830
8311::
832    For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits
833    defined above represent the minimum supported sample counts for each
834    image type.
835    Individual images may: support additional sample counts, which are
836    queried using flink:vkGetPhysicalDeviceImageFormatProperties as
837    described in <<features-supported-sample-counts, Supported Sample
838    Counts>>.
839
840include::{generated}/validity/structs/VkPhysicalDeviceLimits.txt[]
841--
842
843
844[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums']
845--
846Bits which may: be set in the sample count limits returned by
847slink:VkPhysicalDeviceLimits, as well as in other queries and structures
848representing image sample counts, are:
849
850include::{generated}/api/enums/VkSampleCountFlagBits.txt[]
851
852  * ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per
853    pixel.
854  * ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel.
855  * ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel.
856  * ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel.
857  * ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per
858    pixel.
859  * ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per
860    pixel.
861  * ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per
862    pixel.
863--
864
865[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags']
866--
867include::{generated}/api/flags/VkSampleCountFlags.txt[]
868
869tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or
870more elink:VkSampleCountFlagBits.
871--
872
873ifdef::VK_KHR_push_descriptor[]
874[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
875--
876The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined
877as:
878
879include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
880
881  * pname:sType is the type of this structure.
882  * pname:pNext is `NULL` or a pointer to a structure extending this
883    structure.
884  * [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum
885    number of descriptors that can: be used in a descriptor set created with
886    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
887
888:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR
889include::{chapters}/limits.txt[tag=limits_desc]
890
891include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
892--
893endif::VK_KHR_push_descriptor[]
894
895ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
896[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
897--
898The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
899
900include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.txt[]
901
902ifdef::VK_KHR_multiview[]
903or the equivalent
904
905include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.txt[]
906endif::VK_KHR_multiview[]
907
908  * pname:sType is the type of this structure.
909  * pname:pNext is `NULL` or a pointer to a structure extending this
910    structure.
911
912// Must have preceding whitespace
913ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
914ifndef::VK_VERSION_1_2[:anchor-prefix:]
915// tag::VK_KHR_multiview-properties[]
916  * [[{anchor-prefix}limits-maxMultiviewViewCount]]
917    pname:maxMultiviewViewCount is one greater than the maximum view index
918    that can: be used in a subpass.
919  * [[{anchor-prefix}limits-maxMultiviewInstanceIndex]]
920    pname:maxMultiviewInstanceIndex is the maximum valid value of instance
921    index allowed to be generated by a drawing command recorded within a
922    subpass of a multiview render pass instance.
923// end::VK_KHR_multiview-properties[]
924
925:refpage: VkPhysicalDeviceMultiviewProperties
926include::{chapters}/limits.txt[tag=limits_desc]
927
928include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.txt[]
929--
930endif::VK_VERSION_1_1,VK_KHR_multiview[]
931
932ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
933[open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR']
934--
935The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as:
936
937include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.txt[]
938
939ifdef::VK_KHR_shader_float_controls[]
940or the equivalent
941
942include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
943endif::VK_KHR_shader_float_controls[]
944
945  * pname:sType is the type of this structure.
946  * pname:pNext is `NULL` or a pointer to a structure extending this
947    structure.
948
949// Must have preceding whitespace
950ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
951ifndef::VK_VERSION_1_2[:anchor-prefix:]
952// tag::VK_KHR_shader_float_controls-properties[]
953  * [[{anchor-prefix}features-denormBehaviorIndependence]]
954    pname:denormBehaviorIndependence is a
955    elink:VkShaderFloatControlsIndependence value indicating whether, and
956    how, denorm behavior can be set independently for different bit widths.
957  * [[{anchor-prefix}features-roundingModeIndependence]]
958    pname:roundingModeIndependence is a
959    elink:VkShaderFloatControlsIndependence value indicating whether, and
960    how, rounding modes can be set independently for different bit widths.
961  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]]
962    pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
963    indicating whether sign of a zero, [eq]##Nan##s and
964    latexmath:[\pm\infty] can: be preserved in 16-bit floating-point
965    computations.
966    It also indicates whether the code:SignedZeroInfNanPreserve execution
967    mode can: be used for 16-bit floating-point types.
968  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]]
969    pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value
970    indicating whether sign of a zero, [eq]##Nan##s and
971    latexmath:[\pm\infty] can: be preserved in 32-bit floating-point
972    computations.
973    It also indicates whether the code:SignedZeroInfNanPreserve execution
974    mode can: be used for 32-bit floating-point types.
975  * [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]]
976    pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value
977    indicating whether sign of a zero, [eq]##Nan##s and
978    latexmath:[\pm\infty] can: be preserved in 64-bit floating-point
979    computations.
980    It also indicates whether the code:SignedZeroInfNanPreserve execution
981    mode can: be used for 64-bit floating-point types.
982  * [[{anchor-prefix}limits-shaderDenormPreserveFloat16]]
983    pname:shaderDenormPreserveFloat16 is a boolean value indicating whether
984    denormals can: be preserved in 16-bit floating-point computations.
985    It also indicates whether the code:DenormPreserve execution mode can: be
986    used for 16-bit floating-point types.
987  * [[{anchor-prefix}limits-shaderDenormPreserveFloat32]]
988    pname:shaderDenormPreserveFloat32 is a boolean value indicating whether
989    denormals can: be preserved in 32-bit floating-point computations.
990    It also indicates whether the code:DenormPreserve execution mode can: be
991    used for 32-bit floating-point types.
992  * [[{anchor-prefix}limits-shaderDenormPreserveFloat64]]
993    pname:shaderDenormPreserveFloat64 is a boolean value indicating whether
994    denormals can: be preserved in 64-bit floating-point computations.
995    It also indicates whether the code:DenormPreserve execution mode can: be
996    used for 64-bit floating-point types.
997  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]]
998    pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating
999    whether denormals can: be flushed to zero in 16-bit floating-point
1000    computations.
1001    It also indicates whether the code:DenormFlushToZero execution mode can:
1002    be used for 16-bit floating-point types.
1003  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]]
1004    pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating
1005    whether denormals can: be flushed to zero in 32-bit floating-point
1006    computations.
1007    It also indicates whether the code:DenormFlushToZero execution mode can:
1008    be used for 32-bit floating-point types.
1009  * [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat64]]
1010    pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating
1011    whether denormals can: be flushed to zero in 64-bit floating-point
1012    computations.
1013    It also indicates whether the code:DenormFlushToZero execution mode can:
1014    be used for 64-bit floating-point types.
1015  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat16]]
1016    pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether
1017    an implementation supports the round-to-nearest-even rounding mode for
1018    16-bit floating-point arithmetic and conversion instructions.
1019    It also indicates whether the code:RoundingModeRTE execution mode can:
1020    be used for 16-bit floating-point types.
1021  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat32]]
1022    pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether
1023    an implementation supports the round-to-nearest-even rounding mode for
1024    32-bit floating-point arithmetic and conversion instructions.
1025    It also indicates whether the code:RoundingModeRTE execution mode can:
1026    be used for 32-bit floating-point types.
1027  * [[{anchor-prefix}limits-shaderRoundingModeRTEFloat64]]
1028    pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether
1029    an implementation supports the round-to-nearest-even rounding mode for
1030    64-bit floating-point arithmetic and conversion instructions.
1031    It also indicates whether the code:RoundingModeRTE execution mode can:
1032    be used for 64-bit floating-point types.
1033  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat16]]
1034    pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether
1035    an implementation supports the round-towards-zero rounding mode for
1036    16-bit floating-point arithmetic and conversion instructions.
1037    It also indicates whether the code:RoundingModeRTZ execution mode can:
1038    be used for 16-bit floating-point types.
1039  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat32]]
1040    pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether
1041    an implementation supports the round-towards-zero rounding mode for
1042    32-bit floating-point arithmetic and conversion instructions.
1043    It also indicates whether the code:RoundingModeRTZ execution mode can:
1044    be used for 32-bit floating-point types.
1045  * [[{anchor-prefix}limits-shaderRoundingModeRTZFloat64]]
1046    pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether
1047    an implementation supports the round-towards-zero rounding mode for
1048    64-bit floating-point arithmetic and conversion instructions.
1049    It also indicates whether the code:RoundingModeRTZ execution mode can:
1050    be used for 64-bit floating-point types.
1051// end::VK_KHR_shader_float_controls-properties[]
1052
1053ifdef::editing-notes[]
1054[NOTE]
1055.editing-note
1056====
1057Implementations may not be able to control behavior of denorms for
1058floating-point atomics.
1059This needs to be taken into account when such atomics will be added to
1060Vulkan.
1061====
1062endif::editing-notes[]
1063
1064:refpage: VkPhysicalDeviceFloatControlsProperties
1065include::{chapters}/limits.txt[tag=limits_desc]
1066
1067include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.txt[]
1068--
1069
1070[open,refpage='VkShaderFloatControlsIndependence',desc='Bitmask specifying whether, and how, shader float controls can be set separately',type='enums',alias='VkShaderFloatControlsIndependenceKHR']
1071--
1072Values which may: be returned in the pname:denormBehaviorIndependence and
1073pname:roundingModeIndependence fields of
1074sname:VkPhysicalDeviceFloatControlsProperties are:
1075
1076include::{generated}/api/enums/VkShaderFloatControlsIndependence.txt[]
1077
1078ifdef::VK_KHR_shader_float_controls[]
1079or the equivalent
1080
1081include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.txt[]
1082endif::VK_KHR_shader_float_controls[]
1083
1084  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY specifies that
1085    shader float controls for 32-bit floating point can: be set
1086    independently; other bit widths must: be set identically to each other.
1087  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL specifies that shader
1088    float controls for all bit widths can: be set independently.
1089  * ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE specifies that shader
1090    float controls for all bit widths must: be set identically.
1091--
1092endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1093
1094ifdef::VK_EXT_discard_rectangles[]
1095[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs']
1096--
1097The sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT structure is defined
1098as:
1099
1100include::{generated}/api/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
1101
1102  * pname:sType is the type of this structure.
1103  * pname:pNext is `NULL` or a pointer to a structure extending this
1104    structure.
1105  * [[limits-maxDiscardRectangles]] pname:maxDiscardRectangles is the
1106    maximum number of active discard rectangles that can: be specified.
1107
1108:refpage: VkPhysicalDeviceDiscardRectanglePropertiesEXT
1109include::{chapters}/limits.txt[tag=limits_desc]
1110
1111include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
1112--
1113endif::VK_EXT_discard_rectangles[]
1114
1115ifdef::VK_EXT_sample_locations[]
1116[open,refpage='VkPhysicalDeviceSampleLocationsPropertiesEXT',desc='Structure describing sample location limits that can be supported by an implementation',type='structs']
1117--
1118The sname:VkPhysicalDeviceSampleLocationsPropertiesEXT structure is defined
1119as:
1120
1121include::{generated}/api/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
1122
1123  * pname:sType is the type of this structure.
1124  * pname:pNext is `NULL` or a pointer to a structure extending this
1125    structure.
1126  * [[limits-sampleLocationSampleCounts]] pname:sampleLocationSampleCounts
1127    is a bitmask of elink:VkSampleCountFlagBits indicating the sample counts
1128    supporting custom sample locations.
1129  * [[limits-maxSampleLocationGridSize]] pname:maxSampleLocationGridSize is
1130    the maximum size of the pixel grid in which sample locations can: vary
1131    that is supported for all sample counts in
1132    pname:sampleLocationSampleCounts.
1133  * [[limits-sampleLocationCoordinateRange]]
1134    pname:sampleLocationCoordinateRange[2] is the range of supported sample
1135    location coordinates.
1136  * [[limits-sampleLocationSubPixelBits]] pname:sampleLocationSubPixelBits
1137    is the number of bits of subpixel precision for sample locations.
1138  * [[limits-variableSampleLocations]] pname:variableSampleLocations
1139    specifies whether the sample locations used by all pipelines that will
1140    be bound to a command buffer during a subpass must: match.
1141    If set to ename:VK_TRUE, the implementation supports variable sample
1142    locations in a subpass.
1143    If set to ename:VK_FALSE, then the sample locations must: stay constant
1144    in each subpass.
1145
1146:refpage: VkPhysicalDeviceSampleLocationsPropertiesEXT
1147include::{chapters}/limits.txt[tag=limits_desc]
1148
1149include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
1150--
1151endif::VK_EXT_sample_locations[]
1152
1153ifdef::VK_EXT_external_memory_host[]
1154[open,refpage='VkPhysicalDeviceExternalMemoryHostPropertiesEXT',desc='Structure describing external memory host pointer limits that can be supported by an implementation',type='structs']
1155--
1156The sname:VkPhysicalDeviceExternalMemoryHostPropertiesEXT structure is
1157defined as:
1158
1159include::{generated}/api/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
1160
1161  * pname:sType is the type of this structure.
1162  * pname:pNext is `NULL` or a pointer to a structure extending this
1163    structure.
1164  * [[limits-minImportedHostPointerAlignment]]
1165    pname:minImportedHostPointerAlignment is the minimum required:
1166    alignment, in bytes, for the base address and size of host pointers that
1167    can: be imported to a Vulkan memory object.
1168    The value must: be a power of two.
1169
1170:refpage: VkPhysicalDeviceExternalMemoryHostPropertiesEXT
1171include::{chapters}/limits.txt[tag=limits_desc]
1172
1173include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
1174--
1175endif::VK_EXT_external_memory_host[]
1176
1177ifdef::VK_NVX_multiview_per_view_attributes[]
1178[open,refpage='VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
1179--
1180The sname:VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX structure
1181is defined as:
1182
1183include::{generated}/api/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
1184
1185  * pname:sType is the type of this structure.
1186  * pname:pNext is `NULL` or a pointer to a structure extending this
1187    structure.
1188  * [[limits-perViewPositionAllComponents]]
1189    pname:perViewPositionAllComponents is ename:VK_TRUE if the
1190    implementation supports per-view position values that differ in
1191    components other than the X component.
1192
1193:refpage: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
1194include::{chapters}/limits.txt[tag=limits_desc]
1195
1196include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
1197--
1198endif::VK_NVX_multiview_per_view_attributes[]
1199
1200ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
1201[open,refpage='VkPhysicalDevicePointClippingProperties',desc='Structure describing the point clipping behavior supported by an implementation',type='structs']
1202--
1203The sname:VkPhysicalDevicePointClippingProperties structure is defined as:
1204
1205include::{generated}/api/structs/VkPhysicalDevicePointClippingProperties.txt[]
1206
1207ifdef::VK_KHR_maintenance2[]
1208or the equivalent
1209
1210include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.txt[]
1211endif::VK_KHR_maintenance2[]
1212
1213  * pname:sType is the type of this structure.
1214  * pname:pNext is `NULL` or a pointer to a structure extending this
1215    structure.
1216
1217// Must have preceding whitespace
1218ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1219ifndef::VK_VERSION_1_2[:anchor-prefix:]
1220// tag::VK_KHR_maintenance2-properties[]
1221  * [[{anchor-prefix}limits-pointClipping]] pname:pointClippingBehavior is a
1222    elink:VkPointClippingBehavior value specifying the point clipping
1223    behavior supported by the implementation.
1224// end::VK_KHR_maintenance2-properties[]
1225
1226:refpage: VkPhysicalDevicePointClippingProperties
1227include::{chapters}/limits.txt[tag=limits_desc]
1228
1229include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.txt[]
1230--
1231endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
1232
1233ifdef::VK_VERSION_1_1[]
1234[open,refpage='VkPhysicalDeviceSubgroupProperties',desc='Structure describing subgroup support for an implementation',type='structs']
1235--
1236The sname:VkPhysicalDeviceSubgroupProperties structure is defined as:
1237
1238include::{generated}/api/structs/VkPhysicalDeviceSubgroupProperties.txt[]
1239
1240  * pname:sType is the type of this structure.
1241  * pname:pNext is `NULL` or a pointer to a structure extending this
1242    structure.
1243
1244// Must have preceding whitespace
1245ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1246ifndef::VK_VERSION_1_2[:anchor-prefix:]
1247// tag::VK_KHR_subgroup-properties[]
1248  * [[{anchor-prefix}limits-subgroup-size]] pname:subgroupSize is the
1249    default number of invocations in each subgroup.
1250    pname:subgroupSize is at least 1 if any of the physical device's queues
1251    support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
1252    pname:subgroupSize is a power-of-two.
1253  * [[limits-subgroup-supportedStages]] pname:supportedStages is a bitfield
1254    of elink:VkShaderStageFlagBits describing the shader stages that
1255    <<shaders-group-operations, group operations>> with
1256    <<shaders-scope-subgroup, subgroup scope>> are supported in.
1257    pname:supportedStages will have the ename:VK_SHADER_STAGE_COMPUTE_BIT
1258    bit set if any of the physical device's queues support
1259    ename:VK_QUEUE_COMPUTE_BIT.
1260  * [[limits-subgroupSupportedOperations]] pname:supportedOperations is a
1261    bitmask of elink:VkSubgroupFeatureFlagBits specifying the sets of
1262    <<shaders-group-operations, group operations>> with
1263    <<shaders-scope-subgroup, subgroup scope>> supported on this device.
1264    pname:supportedOperations will have the
1265    ename:VK_SUBGROUP_FEATURE_BASIC_BIT bit set if any of the physical
1266    device's queues support ename:VK_QUEUE_GRAPHICS_BIT or
1267    ename:VK_QUEUE_COMPUTE_BIT.
1268  * [[limits-subgroup-quadOperationsInAllStages]]
1269    pname:quadOperationsInAllStages is a boolean specifying whether
1270    <<shaders-quad-operations,quad group operations>> are available in all
1271    stages, or are restricted to fragment and compute stages.
1272// end::VK_KHR_subgroup-properties[]
1273
1274:refpage: VkPhysicalDeviceSubgroupProperties
1275include::{chapters}/limits.txt[tag=limits_desc]
1276
1277If pname:supportedOperations includes <<features-subgroup-quad,
1278ename:VK_SUBGROUP_FEATURE_QUAD_BIT,>>
1279ifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
1280or <<features-shaderSubgroupUniformControlFlow,
1281pname:shaderSubgroupUniformControlFlow>> is enabled,
1282endif::VK_KHR_shader_subgroup_uniform_control_flow[]
1283pname:subgroupSize must: be greater than or equal to 4.
1284
1285include::{generated}/validity/structs/VkPhysicalDeviceSubgroupProperties.txt[]
1286--
1287
1288[open,refpage='VkSubgroupFeatureFlagBits',desc='Bitmask describing what group operations are supported with subgroup scope',type='enums']
1289--
1290Bits which can: be set in
1291slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
1292ifdef::VK_VERSION_1_2[]
1293and
1294slink:VkPhysicalDeviceVulkan11Properties::pname:subgroupSupportedOperations
1295endif::VK_VERSION_1_2[]
1296to specify supported <<shaders-group-operations, group operations>> with
1297<<shaders-scope-subgroup, subgroup scope>> are:
1298
1299include::{generated}/api/enums/VkSubgroupFeatureFlagBits.txt[]
1300
1301  * [[features-subgroup-basic]] ename:VK_SUBGROUP_FEATURE_BASIC_BIT
1302    specifies the device will accept SPIR-V shader modules containing the
1303    code:GroupNonUniform capability.
1304  * [[features-subgroup-vote]] ename:VK_SUBGROUP_FEATURE_VOTE_BIT specifies
1305    the device will accept SPIR-V shader modules containing the
1306    code:GroupNonUniformVote capability.
1307  * [[features-subgroup-arithmetic]]
1308    ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT specifies the device will
1309    accept SPIR-V shader modules containing the
1310    code:GroupNonUniformArithmetic capability.
1311  * [[features-subgroup-ballot]] ename:VK_SUBGROUP_FEATURE_BALLOT_BIT
1312    specifies the device will accept SPIR-V shader modules containing the
1313    code:GroupNonUniformBallot capability.
1314  * [[features-subgroup-shuffle]] ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT
1315    specifies the device will accept SPIR-V shader modules containing the
1316    code:GroupNonUniformShuffle capability.
1317  * [[features-subgroup-shuffle-relative]]
1318    ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT specifies the device will
1319    accept SPIR-V shader modules containing the
1320    code:GroupNonUniformShuffleRelative capability.
1321  * [[features-subgroup-clustered]] ename:VK_SUBGROUP_FEATURE_CLUSTERED_BIT
1322    specifies the device will accept SPIR-V shader modules containing the
1323    code:GroupNonUniformClustered capability.
1324  * [[features-subgroup-quad]] ename:VK_SUBGROUP_FEATURE_QUAD_BIT specifies
1325    the device will accept SPIR-V shader modules containing the
1326    code:GroupNonUniformQuad capability.
1327ifdef::VK_NV_shader_subgroup_partitioned[]
1328  * [[features-subgroup-partitioned]]
1329    ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV specifies the device will
1330    accept SPIR-V shader modules containing the
1331    code:GroupNonUniformPartitionedNV capability.
1332endif::VK_NV_shader_subgroup_partitioned[]
1333--
1334
1335[open,refpage='VkSubgroupFeatureFlags',desc='Bitmask of VkSubgroupFeatureFlagBits',type='flags']
1336--
1337include::{generated}/api/flags/VkSubgroupFeatureFlags.txt[]
1338
1339tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
1340more elink:VkSubgroupFeatureFlagBits.
1341--
1342
1343ifdef::VK_EXT_subgroup_size_control[]
1344[open,refpage='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT',desc='Structure describing the control subgroup size properties of an implementation',type='structs']
1345--
1346The sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT structure is
1347defined as:
1348
1349include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
1350
1351  * pname:sType is the type of this structure.
1352  * pname:pNext is `NULL` or a pointer to a structure extending this
1353    structure.
1354  * [[limits-min-subgroup-size]] pname:minSubgroupSize is the minimum
1355    subgroup size supported by this device.
1356    pname:minSubgroupSize is at least one if any of the physical device's
1357    queues support ename:VK_QUEUE_GRAPHICS_BIT or
1358    ename:VK_QUEUE_COMPUTE_BIT.
1359    pname:minSubgroupSize is a power-of-two.
1360    pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize.
1361    pname:minSubgroupSize is less than or equal to
1362    <<limits-subgroup-size,subgroupSize>>.
1363  * [[limits-max-subgroup-size]] pname:maxSubgroupSize is the maximum
1364    subgroup size supported by this device.
1365    pname:maxSubgroupSize is at least one if any of the physical device's
1366    queues support ename:VK_QUEUE_GRAPHICS_BIT or
1367    ename:VK_QUEUE_COMPUTE_BIT.
1368    pname:maxSubgroupSize is a power-of-two.
1369    pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize.
1370    pname:maxSubgroupSize is greater than or equal to
1371    <<limits-subgroup-size,subgroupSize>>.
1372  * [[limits-max-subgroups-per-workgroup]]
1373    pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups
1374    supported by the implementation within a workgroup.
1375  * [[limits-required-subgroup-size-stages]]
1376    pname:requiredSubgroupSizeStages is a bitfield of what shader stages
1377    support having a required subgroup size specified.
1378
1379:refpage: VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
1380include::{chapters}/limits.txt[tag=limits_desc]
1381
1382If slink:VkPhysicalDeviceSubgroupProperties::pname:supportedOperations
1383includes <<features-subgroup-quad, ename:VK_SUBGROUP_FEATURE_QUAD_BIT>>,
1384pname:minSubgroupSize must: be greater than or equal to 4.
1385
1386include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
1387--
1388endif::VK_EXT_subgroup_size_control[]
1389endif::VK_VERSION_1_1[]
1390
1391ifdef::VK_EXT_blend_operation_advanced[]
1392[open,refpage='VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',desc='Structure describing advanced blending limits that can be supported by an implementation',type='structs']
1393--
1394The sname:VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT structure is
1395defined as:
1396
1397include::{generated}/api/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
1398
1399  * pname:sType is the type of this structure.
1400  * pname:pNext is `NULL` or a pointer to a structure extending this
1401    structure.
1402  * [[limits-advancedBlendMaxColorAttachments]]
1403    pname:advancedBlendMaxColorAttachments is one greater than the highest
1404    color attachment index that can: be used in a subpass, for a pipeline
1405    that uses an <<framebuffer-blend-advanced,advanced blend operation>>.
1406  * [[limits-advancedBlendIndependentBlend]]
1407    pname:advancedBlendIndependentBlend specifies whether advanced blend
1408    operations can: vary per-attachment.
1409  * [[limits-advancedBlendNonPremultipliedSrcColor]]
1410    pname:advancedBlendNonPremultipliedSrcColor specifies whether the source
1411    color can: be treated as non-premultiplied.
1412    If this is ename:VK_FALSE, then
1413    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:srcPremultiplied
1414    must: be ename:VK_TRUE.
1415  * [[limits-advancedBlendNonPremultipliedDstColor]]
1416    pname:advancedBlendNonPremultipliedDstColor specifies whether the
1417    destination color can: be treated as non-premultiplied.
1418    If this is ename:VK_FALSE, then
1419    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:dstPremultiplied
1420    must: be ename:VK_TRUE.
1421  * [[limits-advancedBlendCorrelatedOverlap]]
1422    pname:advancedBlendCorrelatedOverlap specifies whether the overlap mode
1423    can: be treated as correlated.
1424    If this is ename:VK_FALSE, then
1425    slink:VkPipelineColorBlendAdvancedStateCreateInfoEXT::pname:blendOverlap
1426    must: be ename:VK_BLEND_OVERLAP_UNCORRELATED_EXT.
1427  * [[limits-advancedBlendAllOperations]] pname:advancedBlendAllOperations
1428    specifies whether all advanced blend operation enums are supported.
1429    See the valid usage of slink:VkPipelineColorBlendAttachmentState.
1430
1431:refpage: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
1432include::{chapters}/limits.txt[tag=limits_desc]
1433
1434include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
1435--
1436endif::VK_EXT_blend_operation_advanced[]
1437
1438ifdef::VK_EXT_vertex_attribute_divisor[]
1439[open,refpage='VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',desc='Structure describing max value of vertex attribute divisor that can be supported by an implementation',type='structs']
1440--
1441The sname:VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT structure is
1442defined as:
1443
1444include::{generated}/api/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
1445
1446  * pname:sType is the type of this structure.
1447  * pname:pNext is `NULL` or a pointer to a structure extending this
1448    structure.
1449  * [[limits-maxVertexAttribDivisor]] pname:maxVertexAttribDivisor is the
1450    maximum value of the number of instances that will repeat the value of
1451    vertex attribute data when instanced rendering is enabled.
1452
1453:refpage: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
1454include::{chapters}/limits.txt[tag=limits_desc]
1455
1456include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
1457--
1458endif::VK_EXT_vertex_attribute_divisor[]
1459
1460ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
1461[open,refpage='VkPhysicalDeviceSamplerFilterMinmaxProperties',desc='Structure describing sampler filter minmax limits that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT']
1462--
1463The sname:VkPhysicalDeviceSamplerFilterMinmaxProperties structure is defined
1464as:
1465
1466include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.txt[]
1467
1468ifdef::VK_EXT_sampler_filter_minmax[]
1469or the equivalent
1470
1471include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.txt[]
1472endif::VK_EXT_sampler_filter_minmax[]
1473
1474  * pname:sType is the type of this structure.
1475  * pname:pNext is `NULL` or a pointer to a structure extending this
1476    structure.
1477
1478// Must have preceding whitespace
1479ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1480ifndef::VK_VERSION_1_2[:anchor-prefix:]
1481// tag::VK_EXT_sampler_filter_minmax-properties[]
1482  * [[{anchor-prefix}limits-filterMinmaxSingleComponentFormats]]
1483    pname:filterMinmaxSingleComponentFormats is a boolean value indicating
1484    whether a minimum set of required formats support min/max filtering.
1485  * [[{anchor-prefix}limits-filterMinmaxImageComponentMapping]]
1486    pname:filterMinmaxImageComponentMapping is a boolean value indicating
1487    whether the implementation supports non-identity component mapping of
1488    the image when doing min/max filtering.
1489// end::VK_EXT_sampler_filter_minmax-properties[]
1490
1491:refpage: VkPhysicalDeviceSamplerFilterMinmaxProperties
1492include::{chapters}/limits.txt[tag=limits_desc]
1493
1494[[limits-filterMinmaxSingleComponentFormats-minimum-requirements]]
1495If pname:filterMinmaxSingleComponentFormats is ename:VK_TRUE, the following
1496formats must: support the
1497ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with
1498ename:VK_IMAGE_TILING_OPTIMAL, if they support
1499ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT:
1500
1501  * ename:VK_FORMAT_R8_UNORM
1502  * ename:VK_FORMAT_R8_SNORM
1503  * ename:VK_FORMAT_R16_UNORM
1504  * ename:VK_FORMAT_R16_SNORM
1505  * ename:VK_FORMAT_R16_SFLOAT
1506  * ename:VK_FORMAT_R32_SFLOAT
1507  * ename:VK_FORMAT_D16_UNORM
1508  * ename:VK_FORMAT_X8_D24_UNORM_PACK32
1509  * ename:VK_FORMAT_D32_SFLOAT
1510  * ename:VK_FORMAT_D16_UNORM_S8_UINT
1511  * ename:VK_FORMAT_D24_UNORM_S8_UINT
1512  * ename:VK_FORMAT_D32_SFLOAT_S8_UINT
1513
1514If the format is a depth/stencil format, this bit only specifies that the
1515depth aspect (not the stencil aspect) of an image of this format supports
1516min/max filtering, and that min/max filtering of the depth aspect is
1517supported when depth compare is disabled in the sampler.
1518
1519If pname:filterMinmaxImageComponentMapping is ename:VK_FALSE the component
1520mapping of the image view used with min/max filtering must: have been
1521created with the pname:r component set to the
1522<<resources-image-views-identity-mappings,identity swizzle>>.
1523Only the pname:r component of the sampled image value is defined and the
1524other component values are undefined:.
1525If pname:filterMinmaxImageComponentMapping is ename:VK_TRUE this restriction
1526does not apply and image component mapping works as normal.
1527
1528include::{generated}/validity/structs/VkPhysicalDeviceSamplerFilterMinmaxProperties.txt[]
1529--
1530endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
1531
1532ifdef::VK_VERSION_1_1[]
1533[open,refpage='VkPhysicalDeviceProtectedMemoryProperties',desc='Structure describing protected memory properties that can be supported by an implementation',type='structs']
1534--
1535The sname:VkPhysicalDeviceProtectedMemoryProperties structure is defined as:
1536
1537include::{generated}/api/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
1538
1539  * pname:sType is the type of this structure.
1540  * pname:pNext is `NULL` or a pointer to a structure extending this
1541    structure.
1542
1543// Must have preceding whitespace
1544ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1545ifndef::VK_VERSION_1_2[:anchor-prefix:]
1546// tag::VK_KHR_protected_memory-properties[]
1547  * [[{anchor-prefix}limits-protectedNoFault]] pname:protectedNoFault
1548    specifies how an implementation behaves when an application attempts to
1549    write to unprotected memory in a protected queue operation, read from
1550    protected memory in an unprotected queue operation, or perform a query
1551    in a protected queue operation.
1552    If this limit is ename:VK_TRUE, such writes will be discarded or have
1553    undefined: values written, reads and queries will return undefined:
1554    values.
1555    If this limit is ename:VK_FALSE, applications must: not perform these
1556    operations.
1557    See <<memory-protected-access-rules>> for more information.
1558// end::VK_KHR_protected_memory-properties[]
1559
1560:refpage: VkPhysicalDeviceProtectedMemoryProperties
1561include::{chapters}/limits.txt[tag=limits_desc]
1562
1563include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
1564--
1565endif::VK_VERSION_1_1[]
1566
1567ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
1568[open,refpage='VkPhysicalDeviceMaintenance3Properties',desc='Structure describing descriptor set properties',type='structs']
1569--
1570The sname:VkPhysicalDeviceMaintenance3Properties structure is defined as:
1571
1572include::{generated}/api/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
1573
1574ifdef::VK_KHR_maintenance3[]
1575or the equivalent
1576
1577include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.txt[]
1578endif::VK_KHR_maintenance3[]
1579
1580  * pname:sType is the type of this structure.
1581  * pname:pNext is `NULL` or a pointer to a structure extending this
1582    structure.
1583
1584// Must have preceding whitespace
1585ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1586ifndef::VK_VERSION_1_2[:anchor-prefix:]
1587// tag::VK_KHR_maintenance3-properties[]
1588  * [[{anchor-prefix}limits-maxPerSetDescriptors]]
1589    pname:maxPerSetDescriptors is a maximum number of descriptors (summed
1590    over all descriptor types) in a single descriptor set that is guaranteed
1591    to satisfy any implementation-dependent constraints on the size of a
1592    descriptor set itself.
1593    Applications can: query whether a descriptor set that goes beyond this
1594    limit is supported using flink:vkGetDescriptorSetLayoutSupport.
1595  * [[{anchor-prefix}limits-maxMemoryAllocationSize]]
1596    pname:maxMemoryAllocationSize is the maximum size of a memory allocation
1597    that can: be created, even if there is more space available in the heap.
1598// end::VK_KHR_maintenance3-properties[]
1599
1600:refpage: VkPhysicalDeviceMaintenance3Properties
1601include::{chapters}/limits.txt[tag=limits_desc]
1602
1603include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
1604--
1605endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
1606
1607ifdef::VK_KHR_maintenance4[]
1608[open,refpage='VkPhysicalDeviceMaintenance4PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs']
1609--
1610The sname:VkPhysicalDeviceMaintenance4PropertiesKHR structure is defined as:
1611
1612include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[]
1613
1614  * pname:sType is the type of this structure.
1615  * pname:pNext is `NULL` or a pointer to a structure extending this
1616    structure.
1617  * [[limits-maxBufferSize]] pname:maxBufferSize is the maximum size
1618    sname:VkBuffer that can: be created.
1619
1620:refpage: VkPhysicalDeviceMaintenance4PropertiesKHR
1621include::{chapters}/limits.txt[tag=limits_desc]
1622
1623include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[]
1624--
1625endif::VK_KHR_maintenance4[]
1626
1627ifdef::VK_NV_mesh_shader[]
1628[open,refpage='VkPhysicalDeviceMeshShaderPropertiesNV',desc='Structure describing mesh shading properties',type='structs']
1629--
1630The sname:VkPhysicalDeviceMeshShaderPropertiesNV structure is defined as:
1631
1632include::{generated}/api/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
1633
1634  * pname:sType is the type of this structure.
1635  * pname:pNext is `NULL` or a pointer to a structure extending this
1636    structure.
1637  * pname:maxDrawMeshTasksCount is the maximum number of local workgroups
1638    that can: be launched by a single draw mesh tasks command.
1639    See <<drawing-mesh-shading>>.
1640  * pname:maxTaskWorkGroupInvocations is the maximum total number of task
1641    shader invocations in a single local workgroup.
1642    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
1643ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1644    execution mode in shader modules or by the object decorated by the
1645    code:WorkgroupSize decoration, must: be less than or equal to this
1646    limit.
1647  * pname:maxTaskWorkGroupSize[3] is the maximum size of a local task
1648    workgroup.
1649    These three values represent the maximum local workgroup size in the X,
1650    Y, and Z dimensions, respectively.
1651    The pname:x, pname:y, and pname:z sizes, as specified by the
1652    code:LocalSize
1653ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1654    execution mode or by the object decorated by the code:WorkgroupSize
1655    decoration in shader modules, must: be less than or equal to the
1656    corresponding limit.
1657  * pname:maxTaskTotalMemorySize is the maximum number of bytes that the
1658    task shader can use in total for shared and output memory combined.
1659  * pname:maxTaskOutputCount is the maximum number of output tasks a single
1660    task shader workgroup can emit.
1661  * pname:maxMeshWorkGroupInvocations is the maximum total number of mesh
1662    shader invocations in a single local workgroup.
1663    The product of the X, Y, and Z sizes, as specified by the code:LocalSize
1664ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1665    execution mode in shader modules or by the object decorated by the
1666    code:WorkgroupSize decoration, must: be less than or equal to this
1667    limit.
1668  * pname:maxMeshWorkGroupSize[3] is the maximum size of a local mesh
1669    workgroup.
1670    These three values represent the maximum local workgroup size in the X,
1671    Y, and Z dimensions, respectively.
1672    The pname:x, pname:y, and pname:z sizes, as specified by the
1673    code:LocalSize
1674ifdef::VK_KHR_maintenance4[or code:LocalSizeId]
1675    execution mode or by the object decorated by the code:WorkgroupSize
1676    decoration in shader modules, must: be less than or equal to the
1677    corresponding limit.
1678  * pname:maxMeshTotalMemorySize is the maximum number of bytes that the
1679    mesh shader can use in total for shared and output memory combined.
1680  * pname:maxMeshOutputVertices is the maximum number of vertices a mesh
1681    shader output can store.
1682  * pname:maxMeshOutputPrimitives is the maximum number of primitives a mesh
1683    shader output can store.
1684  * pname:maxMeshMultiviewViewCount is the maximum number of multi-view
1685    views a mesh shader can use.
1686  * pname:meshOutputPerVertexGranularity is the granularity with which mesh
1687    vertex outputs are allocated.
1688    The value can be used to compute the memory size used by the mesh
1689    shader, which must be less than or equal to
1690    pname:maxMeshTotalMemorySize.
1691  * pname:meshOutputPerPrimitiveGranularity is the granularity with which
1692    mesh outputs qualified as per-primitive are allocated.
1693    The value can be used to compute the memory size used by the mesh
1694    shader, which must be less than or equal to
1695    pname:maxMeshTotalMemorySize.
1696
1697:refpage: VkPhysicalDeviceMeshShaderPropertiesNV
1698include::{chapters}/limits.txt[tag=limits_desc]
1699
1700include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
1701--
1702endif::VK_NV_mesh_shader[]
1703
1704ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1705[open,refpage='VkPhysicalDeviceDescriptorIndexingProperties',desc='Structure describing descriptor indexing properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDescriptorIndexingPropertiesEXT']
1706--
1707The sname:VkPhysicalDeviceDescriptorIndexingProperties structure is defined
1708as:
1709
1710include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[]
1711
1712ifdef::VK_EXT_descriptor_indexing[]
1713or the equivalent
1714
1715include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
1716endif::VK_EXT_descriptor_indexing[]
1717
1718  * pname:sType is the type of this structure.
1719  * pname:pNext is `NULL` or a pointer to a structure extending this
1720    structure.
1721
1722// Must have preceding whitespace
1723ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
1724ifndef::VK_VERSION_1_2[:anchor-prefix:]
1725// tag::VK_EXT_descriptor_indexing-properties[]
1726  * [[{anchor-prefix}limits-maxUpdateAfterBindDescriptorsInAllPools]]
1727    pname:maxUpdateAfterBindDescriptorsInAllPools is the maximum number of
1728    descriptors (summed over all descriptor types) that can: be created
1729    across all pools that are created with the
1730    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set.
1731    Pool creation may: fail when this limit is exceeded, or when the space
1732    this limit represents is unable to satisfy a pool creation due to
1733    fragmentation.
1734  * [[{anchor-prefix}limits-shaderUniformBufferArrayNonUniformIndexingNative]]
1735    pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean
1736    value indicating whether uniform buffer descriptors natively support
1737    nonuniform indexing.
1738    If this is ename:VK_FALSE, then a single dynamic instance of an
1739    instruction that nonuniformly indexes an array of uniform buffers may:
1740    execute multiple times in order to access all the descriptors.
1741  * [[{anchor-prefix}limits-shaderSampledImageArrayNonUniformIndexingNative]]
1742    pname:shaderSampledImageArrayNonUniformIndexingNative is a boolean value
1743    indicating whether sampler and image descriptors natively support
1744    nonuniform indexing.
1745    If this is ename:VK_FALSE, then a single dynamic instance of an
1746    instruction that nonuniformly indexes an array of samplers or images
1747    may: execute multiple times in order to access all the descriptors.
1748  * [[{anchor-prefix}limits-shaderStorageBufferArrayNonUniformIndexingNative]]
1749    pname:shaderStorageBufferArrayNonUniformIndexingNative is a boolean
1750    value indicating whether storage buffer descriptors natively support
1751    nonuniform indexing.
1752    If this is ename:VK_FALSE, then a single dynamic instance of an
1753    instruction that nonuniformly indexes an array of storage buffers may:
1754    execute multiple times in order to access all the descriptors.
1755  * [[{anchor-prefix}limits-shaderStorageImageArrayNonUniformIndexingNative]]
1756    pname:shaderStorageImageArrayNonUniformIndexingNative is a boolean value
1757    indicating whether storage image descriptors natively support nonuniform
1758    indexing.
1759    If this is ename:VK_FALSE, then a single dynamic instance of an
1760    instruction that nonuniformly indexes an array of storage images may:
1761    execute multiple times in order to access all the descriptors.
1762  * [[{anchor-prefix}limits-shaderInputAttachmentArrayNonUniformIndexingNative]]
1763    pname:shaderInputAttachmentArrayNonUniformIndexingNative is a boolean
1764    value indicating whether input attachment descriptors natively support
1765    nonuniform indexing.
1766    If this is ename:VK_FALSE, then a single dynamic instance of an
1767    instruction that nonuniformly indexes an array of input attachments may:
1768    execute multiple times in order to access all the descriptors.
1769  * [[{anchor-prefix}limits-robustBufferAccessUpdateAfterBind]]
1770    pname:robustBufferAccessUpdateAfterBind is a boolean value indicating
1771    whether <<features-robustBufferAccess, pname:robustBufferAccess>> can:
1772    be enabled in a device simultaneously with
1773    pname:descriptorBindingUniformBufferUpdateAfterBind,
1774    pname:descriptorBindingStorageBufferUpdateAfterBind,
1775    pname:descriptorBindingUniformTexelBufferUpdateAfterBind, and/or
1776    pname:descriptorBindingStorageTexelBufferUpdateAfterBind.
1777    If this is ename:VK_FALSE, then either pname:robustBufferAccess must: be
1778    disabled or all of these update-after-bind features must: be disabled.
1779  * [[{anchor-prefix}limits-quadDivergentImplicitLod]]
1780    pname:quadDivergentImplicitLod is a boolean value indicating whether
1781    implicit level of detail calculations for image operations have
1782    well-defined results when the image and/or sampler objects used for the
1783    instruction are not uniform within a quad.
1784    See <<textures-derivative-image-operations,Derivative Image
1785    Operations>>.
1786  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSamplers]]
1787    pname:maxPerStageDescriptorUpdateAfterBindSamplers is similar to
1788    pname:maxPerStageDescriptorSamplers but counts descriptors from
1789    descriptor sets created with or without the
1790    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1791    set.
1792  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers]]
1793    pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers is similar to
1794    pname:maxPerStageDescriptorUniformBuffers but counts descriptors from
1795    descriptor sets created with or without the
1796    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1797    set.
1798  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers]]
1799    pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers is similar to
1800    pname:maxPerStageDescriptorStorageBuffers but counts descriptors from
1801    descriptor sets created with or without the
1802    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1803    set.
1804  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindSampledImages]]
1805    pname:maxPerStageDescriptorUpdateAfterBindSampledImages is similar to
1806    pname:maxPerStageDescriptorSampledImages but counts descriptors from
1807    descriptor sets created with or without the
1808    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1809    set.
1810  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindStorageImages]]
1811    pname:maxPerStageDescriptorUpdateAfterBindStorageImages is similar to
1812    pname:maxPerStageDescriptorStorageImages but counts descriptors from
1813    descriptor sets created with or without the
1814    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1815    set.
1816  * [[{anchor-prefix}limits-maxPerStageDescriptorUpdateAfterBindInputAttachments]]
1817    pname:maxPerStageDescriptorUpdateAfterBindInputAttachments is similar to
1818    pname:maxPerStageDescriptorInputAttachments but counts descriptors from
1819    descriptor sets created with or without the
1820    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1821    set.
1822  * [[{anchor-prefix}limits-maxPerStageUpdateAfterBindResources]]
1823    pname:maxPerStageUpdateAfterBindResources is similar to
1824    pname:maxPerStageResources but counts descriptors from descriptor sets
1825    created with or without the
1826    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1827    set.
1828  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSamplers]]
1829    pname:maxDescriptorSetUpdateAfterBindSamplers is similar to
1830    pname:maxDescriptorSetSamplers but counts descriptors from descriptor
1831    sets created with or without the
1832    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1833    set.
1834  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffers]]
1835    pname:maxDescriptorSetUpdateAfterBindUniformBuffers is similar to
1836    pname:maxDescriptorSetUniformBuffers but counts descriptors from
1837    descriptor sets created with or without the
1838    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1839    set.
1840  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic]]
1841    pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic is similar to
1842    pname:maxDescriptorSetUniformBuffersDynamic but counts descriptors from
1843    descriptor sets created with or without the
1844    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1845    set.
1846    While an application can: allocate dynamic uniform buffer descriptors
1847    from a pool created with the
1848    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
1849    bindings for these descriptors must: not be present in any descriptor
1850    set layout that includes bindings created with
1851    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
1852  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffers]]
1853    pname:maxDescriptorSetUpdateAfterBindStorageBuffers is similar to
1854    pname:maxDescriptorSetStorageBuffers but counts descriptors from
1855    descriptor sets created with or without the
1856    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1857    set.
1858  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic]]
1859    pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic is similar to
1860    pname:maxDescriptorSetStorageBuffersDynamic but counts descriptors from
1861    descriptor sets created with or without the
1862    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1863    set.
1864    While an application can: allocate dynamic storage buffer descriptors
1865    from a pool created with the
1866    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
1867    bindings for these descriptors must: not be present in any descriptor
1868    set layout that includes bindings created with
1869    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT.
1870  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindSampledImages]]
1871    pname:maxDescriptorSetUpdateAfterBindSampledImages is similar to
1872    pname:maxDescriptorSetSampledImages but counts descriptors from
1873    descriptor sets created with or without the
1874    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1875    set.
1876  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindStorageImages]]
1877    pname:maxDescriptorSetUpdateAfterBindStorageImages is similar to
1878    pname:maxDescriptorSetStorageImages but counts descriptors from
1879    descriptor sets created with or without the
1880    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1881    set.
1882  * [[{anchor-prefix}limits-maxDescriptorSetUpdateAfterBindInputAttachments]]
1883    pname:maxDescriptorSetUpdateAfterBindInputAttachments is similar to
1884    pname:maxDescriptorSetInputAttachments but counts descriptors from
1885    descriptor sets created with or without the
1886    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1887    set.
1888// end::VK_EXT_descriptor_indexing-properties[]
1889
1890:refpage: VkPhysicalDeviceDescriptorIndexingProperties
1891include::{chapters}/limits.txt[tag=limits_desc]
1892
1893include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[]
1894--
1895endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1896
1897ifdef::VK_EXT_inline_uniform_block[]
1898[open,refpage='VkPhysicalDeviceInlineUniformBlockPropertiesEXT',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs']
1899--
1900The sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT structure is
1901defined as:
1902
1903include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
1904
1905  * pname:sType is the type of this structure.
1906  * pname:pNext is `NULL` or a pointer to a structure extending this
1907    structure.
1908  * [[limits-maxInlineUniformBlockSize]] pname:maxInlineUniformBlockSize is
1909    the maximum size in bytes of an <<descriptorsets-inlineuniformblock,
1910    inline uniform block>> binding.
1911  * [[limits-maxPerStageDescriptorInlineUniformBlocks]]
1912    pname:maxPerStageDescriptorInlineUniformBlock is the maximum number of
1913    inline uniform block bindings that can: be accessible to a single shader
1914    stage in a pipeline layout.
1915    Descriptor bindings with a descriptor type of
1916    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this
1917    limit.
1918ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1919    Only descriptor bindings in descriptor set layouts created without the
1920    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
1921    count against this limit.
1922endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1923  * [[limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks]]
1924    pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
1925ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1926    equals pname:maxPerStageDescriptorInlineUniformBlocks and is reserved
1927    for future use.
1928endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1929ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1930    is similar to pname:maxPerStageDescriptorInlineUniformBlocks but counts
1931    descriptor bindings from descriptor sets created with or without the
1932    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1933    set.
1934endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1935  * [[limits-maxDescriptorSetInlineUniformBlocks]]
1936    pname:maxDescriptorSetInlineUniformBlocks is the maximum number of
1937    inline uniform block bindings that can: be included in descriptor
1938    bindings in a pipeline layout across all pipeline shader stages and
1939    descriptor set numbers.
1940    Descriptor bindings with a descriptor type of
1941    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT count against this
1942    limit.
1943ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1944    Only descriptor bindings in descriptor set layouts created without the
1945    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
1946    count against this limit.
1947endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1948  * [[limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks]]
1949    pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
1950ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1951    equals pname:maxDescriptorSetInlineUniformBlocks and is reserved for
1952    future use.
1953endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1954ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1955    is similar to pname:maxDescriptorSetInlineUniformBlocks but counts
1956    descriptor bindings from descriptor sets created with or without the
1957    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
1958    set.
1959endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
1960
1961:refpage: VkPhysicalDeviceInlineUniformBlockPropertiesEXT
1962include::{chapters}/limits.txt[tag=limits_desc]
1963
1964include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
1965--
1966endif::VK_EXT_inline_uniform_block[]
1967
1968ifdef::VK_EXT_conservative_rasterization[]
1969[open,refpage='VkPhysicalDeviceConservativeRasterizationPropertiesEXT',desc='Structure describing conservative raster properties that can be supported by an implementation',type='structs']
1970--
1971The sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT structure
1972is defined as:
1973
1974include::{generated}/api/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
1975
1976  * pname:sType is the type of this structure.
1977  * pname:pNext is `NULL` or a pointer to a structure extending this
1978    structure.
1979  * [[limits-primitiveOverestimationSize]] pname:primitiveOverestimationSize
1980    is the size in pixels the generating primitive is increased at each of
1981    its edges during conservative rasterization overestimation mode.
1982    Even with a size of 0.0, conservative rasterization overestimation rules
1983    still apply and if any part of the pixel rectangle is covered by the
1984    generating primitive, fragments are generated for the entire pixel.
1985    However implementations may: make the pixel coverage area even more
1986    conservative by increasing the size of the generating primitive.
1987  * [[limits-maxExtraPrimitiveOverestimationSize]]
1988    pname:maxExtraPrimitiveOverestimationSize is the maximum size in pixels
1989    of extra overestimation the implementation supports in the pipeline
1990    state.
1991    A value of 0.0 means the implementation does not support any additional
1992    overestimation of the generating primitive during conservative
1993    rasterization.
1994    A value above 0.0 allows the application to further increase the size of
1995    the generating primitive during conservative rasterization
1996    overestimation.
1997  * [[limits-extraPrimitiveOverestimationSizeGranularity]]
1998    pname:extraPrimitiveOverestimationSizeGranularity is the granularity of
1999    extra overestimation that can be specified in the pipeline state between
2000    0.0 and pname:maxExtraPrimitiveOverestimationSize inclusive.
2001    A value of 0.0 means the implementation can use the smallest
2002    representable non-zero value in the screen space pixel fixed-point grid.
2003  * [[limits-primitiveUnderestimation]] pname:primitiveUnderestimation is
2004    ename:VK_TRUE if the implementation supports the
2005    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT conservative
2006    rasterization mode in addition to
2007    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
2008    Otherwise the implementation only supports
2009    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT.
2010  * [[limits-conservativePointAndLineRasterization]]
2011    pname:conservativePointAndLineRasterization is ename:VK_TRUE if the
2012    implementation supports conservative rasterization of point and line
2013    primitives as well as triangle primitives.
2014    Otherwise the implementation only supports triangle primitives.
2015  * [[limits-degenerateTrianglesRasterized]]
2016    pname:degenerateTrianglesRasterized is ename:VK_FALSE if the
2017    implementation culls primitives generated from triangles that become
2018    zero area after they are quantized to the fixed-point rasterization
2019    pixel grid.
2020    pname:degenerateTrianglesRasterized is ename:VK_TRUE if these primitives
2021    are not culled and the provoking vertex attributes and depth value are
2022    used for the fragments.
2023    The primitive area calculation is done on the primitive generated from
2024    the clipped triangle if applicable.
2025    Zero area primitives are backfacing and the application can: enable
2026    backface culling if desired.
2027  * [[limits-degenerateLinesRasterized]] pname:degenerateLinesRasterized is
2028    ename:VK_FALSE if the implementation culls lines that become zero length
2029    after they are quantized to the fixed-point rasterization pixel grid.
2030    pname:degenerateLinesRasterized is ename:VK_TRUE if zero length lines
2031    are not culled and the provoking vertex attributes and depth value are
2032    used for the fragments.
2033  * [[limits-fullyCoveredFragmentShaderInputVariable]]
2034    pname:fullyCoveredFragmentShaderInputVariable is ename:VK_TRUE if the
2035    implementation supports the SPIR-V builtin fragment shader input
2036    variable code:FullyCoveredEXT specifying that conservative rasterization
2037    is enabled and the fragment area is fully covered by the generating
2038    primitive.
2039  * [[limits-conservativeRasterizationPostDepthCoverage]]
2040ifdef::VK_EXT_post_depth_coverage[]
2041    pname:conservativeRasterizationPostDepthCoverage is ename:VK_TRUE if the
2042    implementation supports conservative rasterization with the
2043    code:PostDepthCoverage execution mode enabled.
2044    Otherwise the code:PostDepthCoverage execution mode must: not be used
2045    when conservative rasterization is enabled.
2046endif::VK_EXT_post_depth_coverage[]
2047ifndef::VK_EXT_post_depth_coverage[]
2048    pname:conservativeRasterizationPostDepthCoverage must: be
2049    ename:VK_FALSE.
2050endif::VK_EXT_post_depth_coverage[]
2051
2052:refpage: VkPhysicalDeviceConservativeRasterizationPropertiesEXT
2053include::{chapters}/limits.txt[tag=limits_desc]
2054
2055include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
2056--
2057endif::VK_EXT_conservative_rasterization[]
2058
2059ifdef::VK_EXT_fragment_density_map[]
2060[open,refpage='VkPhysicalDeviceFragmentDensityMapPropertiesEXT',desc='Structure describing fragment density map properties that can be supported by an implementation',type='structs']
2061--
2062The sname:VkPhysicalDeviceFragmentDensityMapPropertiesEXT structure is
2063defined as:
2064
2065include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[]
2066
2067  * pname:sType is the type of this structure.
2068  * pname:pNext is `NULL` or a pointer to a structure extending this
2069    structure.
2070  * [[limits-minfragmentdensitytexelsize]] pname:minFragmentDensityTexelSize
2071    is the minimum <<glossary-fragment-density-texel-size,fragment density
2072    texel size>>.
2073  * [[limits-maxfragmentdensitytexelsize]] pname:maxFragmentDensityTexelSize
2074    is the maximum fragment density texel size.
2075  * [[limits-fragmentdensityinvocations]] pname:fragmentDensityInvocations
2076    specifies whether the implementation may: invoke additional fragment
2077    shader invocations for each covered sample.
2078
2079:refpage: VkPhysicalDeviceFragmentDensityMapPropertiesEXT
2080include::{chapters}/limits.txt[tag=limits_desc]
2081
2082include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[]
2083--
2084endif::VK_EXT_fragment_density_map[]
2085
2086ifdef::VK_EXT_fragment_density_map2[]
2087[open,refpage='VkPhysicalDeviceFragmentDensityMap2PropertiesEXT',desc='Structure describing additional fragment density map properties that can be supported by an implementation',type='structs']
2088--
2089The sname:VkPhysicalDeviceFragmentDensityMap2PropertiesEXT structure is
2090defined as:
2091
2092include::{generated}/api/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[]
2093
2094  * pname:sType is the type of this structure.
2095  * pname:pNext is `NULL` or a pointer to a structure extending this
2096    structure.
2097  * [[limits-subsampledLoads]] pname:subsampledLoads specifies if performing
2098    image data read with load operations on subsampled attachments will be
2099    resampled to the fragment density of the render pass
2100  * [[limits-subsampledCoarseReconstructionEarlyAccess]]
2101    pname:subsampledCoarseReconstructionEarlyAccess specifies if performing
2102    image data read with samplers created with pname:flags containing
2103    ename:VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT in
2104    fragment shader will trigger additional reads during
2105    ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
2106  * [[limits-maxSubsampledArrayLayers]] pname:maxSubsampledArrayLayers is
2107    the maximum number of slink:VkImageView array layers for usages
2108    supporting subsampled samplers
2109  * [[limits-maxDescriptorSetSubsampledSamplers]]
2110    pname:maxDescriptorSetSubsampledSamplers is the maximum number of
2111    subsampled samplers that can: be included in a slink:VkPipelineLayout
2112
2113:refpage: VkPhysicalDeviceFragmentDensityMap2PropertiesEXT
2114include::{chapters}/limits.txt[tag=limits_desc]
2115
2116include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[]
2117--
2118endif::VK_EXT_fragment_density_map2[]
2119
2120ifdef::VK_AMD_shader_core_properties[]
2121[open,refpage='VkPhysicalDeviceShaderCorePropertiesAMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
2122--
2123The sname:VkPhysicalDeviceShaderCorePropertiesAMD structure is defined as:
2124
2125include::{generated}/api/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
2126
2127  * pname:sType is the type of this structure.
2128  * pname:pNext is `NULL` or a pointer to a structure extending this
2129    structure.
2130  * [[limits-shaderEngineCount]] pname:shaderEngineCount is an unsigned
2131    integer value indicating the number of shader engines found inside the
2132    shader core of the physical device.
2133  * [[limits-shaderArraysPerEngineCount]] pname:shaderArraysPerEngineCount
2134    is an unsigned integer value indicating the number of shader arrays
2135    inside a shader engine.
2136    Each shader array has its own scan converter, set of compute units, and
2137    a render back end (color and depth attachments).
2138    Shader arrays within a shader engine share shader processor input (wave
2139    launcher) and shader export (export buffer) units.
2140    Currently, a shader engine can have one or two shader arrays.
2141  * [[limits-computeUnitsPerShaderArray]] pname:computeUnitsPerShaderArray
2142    is an unsigned integer value indicating the physical number of compute
2143    units within a shader array.
2144    The active number of compute units in a shader array may: be lower.
2145    A compute unit houses a set of SIMDs along with a sequencer module and a
2146    local data store.
2147  * [[limits-simdPerComputeUnit]] pname:simdPerComputeUnit is an unsigned
2148    integer value indicating the number of SIMDs inside a compute unit.
2149    Each SIMD processes a single instruction at a time.
2150  * [[limits-wavefrontSize]] pname:wavefrontSize is an unsigned integer
2151    value indicating the maximum size of a subgroup.
2152  * [[limits-sgprsPerSimd]] pname:sgprsPerSimd is an unsigned integer value
2153    indicating the number of physical Scalar General Purpose Registers
2154    (SGPRs) per SIMD.
2155  * [[limits-minSgprAllocation]] pname:minSgprAllocation is an unsigned
2156    integer value indicating the minimum number of SGPRs allocated for a
2157    wave.
2158  * [[limits-maxSgprAllocation]] pname:maxSgprAllocation is an unsigned
2159    integer value indicating the maximum number of SGPRs allocated for a
2160    wave.
2161  * [[limits-sgprAllocationGranularity]] pname:sgprAllocationGranularity is
2162    an unsigned integer value indicating the granularity of SGPR allocation
2163    for a wave.
2164  * [[limits-vgprsPerSimd]] pname:vgprsPerSimd is an unsigned integer value
2165    indicating the number of physical Vector General Purpose Registers
2166    (VGPRs) per SIMD.
2167  * [[limits-minVgprAllocation]] pname:minVgprAllocation is an unsigned
2168    integer value indicating the minimum number of VGPRs allocated for a
2169    wave.
2170  * [[limits-maxVgprAllocation]] pname:maxVgprAllocation is an unsigned
2171    integer value indicating the maximum number of VGPRs allocated for a
2172    wave.
2173  * [[limits-vgprAllocationGranularity]] pname:vgprAllocationGranularity is
2174    an unsigned integer value indicating the granularity of VGPR allocation
2175    for a wave.
2176
2177:refpage: VkPhysicalDeviceShaderCorePropertiesAMD
2178include::{chapters}/limits.txt[tag=limits_desc]
2179
2180include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
2181--
2182endif::VK_AMD_shader_core_properties[]
2183
2184ifdef::VK_AMD_shader_core_properties2[]
2185[open,refpage='VkPhysicalDeviceShaderCoreProperties2AMD',desc='Structure describing shader core properties that can be supported by an implementation',type='structs']
2186--
2187The sname:VkPhysicalDeviceShaderCoreProperties2AMD structure is defined as:
2188
2189include::{generated}/api/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[]
2190
2191  * pname:sType is the type of this structure.
2192  * pname:pNext is `NULL` or a pointer to a structure extending this
2193    structure.
2194  * [[features-shaderCoreFeatures]] pname:shaderCoreFeatures is a bitmask of
2195    elink:VkShaderCorePropertiesFlagBitsAMD indicating the set of features
2196    supported by the shader core.
2197  * [[limits-activeComputeUnitCount]] pname:activeComputeUnitCount is an
2198    unsigned integer value indicating the number of compute units that have
2199    been enabled.
2200
2201:refpage: VkPhysicalDeviceShaderCoreProperties2AMD
2202include::{chapters}/limits.txt[tag=limits_desc]
2203
2204include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[]
2205--
2206
2207[open,refpage='VkShaderCorePropertiesFlagBitsAMD',desc='Bitmask specifying shader core properties',type='enums',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagsAMD']
2208--
2209Bits for this type may: be defined by future extensions, or new versions of
2210the `apiext:VK_AMD_shader_core_properties2` extension.
2211Possible values of the pname:flags member of
2212tlink:VkShaderCorePropertiesFlagsAMD are:
2213
2214include::{generated}/api/enums/VkShaderCorePropertiesFlagBitsAMD.txt[]
2215--
2216
2217[open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD']
2218--
2219include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.txt[]
2220
2221tname:VkShaderCorePropertiesFlagsAMD is a bitmask type for providing zero or
2222more elink:VkShaderCorePropertiesFlagBitsAMD.
2223--
2224endif::VK_AMD_shader_core_properties2[]
2225
2226ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
2227[open,refpage='VkPhysicalDeviceDepthStencilResolveProperties',desc='Structure describing depth/stencil resolve properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceDepthStencilResolvePropertiesKHR']
2228--
2229The sname:VkPhysicalDeviceDepthStencilResolveProperties structure is defined
2230as:
2231
2232include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[]
2233
2234ifdef::VK_KHR_depth_stencil_resolve[]
2235or the equivalent
2236
2237include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.txt[]
2238endif::VK_KHR_depth_stencil_resolve[]
2239
2240  * pname:sType is the type of this structure.
2241  * pname:pNext is `NULL` or a pointer to a structure extending this
2242    structure.
2243
2244// Must have preceding whitespace
2245ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
2246ifndef::VK_VERSION_1_2[:anchor-prefix:]
2247// tag::VK_KHR_depth_stencil_resolve-properties[]
2248  * [[{anchor-prefix}features-depthResolveModes]]
2249    pname:supportedDepthResolveModes is a bitmask of
2250    elink:VkResolveModeFlagBits indicating the set of supported depth
2251    resolve modes.
2252    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
2253    implementations may: support additional modes.
2254  * [[{anchor-prefix}features-stencilResolveModes]]
2255    pname:supportedStencilResolveModes is a bitmask of
2256    elink:VkResolveModeFlagBits indicating the set of supported stencil
2257    resolve modes.
2258    ename:VK_RESOLVE_MODE_SAMPLE_ZERO_BIT must: be included in the set but
2259    implementations may: support additional modes.
2260    ename:VK_RESOLVE_MODE_AVERAGE_BIT must: not be included in the set.
2261  * [[{anchor-prefix}features-independentResolveNone]]
2262    pname:independentResolveNone is ename:VK_TRUE if the implementation
2263    supports setting the depth and stencil resolve modes to different values
2264    when one of those modes is ename:VK_RESOLVE_MODE_NONE.
2265    Otherwise the implementation only supports setting both modes to the
2266    same value.
2267  * [[{anchor-prefix}features-independentResolve]] pname:independentResolve
2268    is ename:VK_TRUE if the implementation supports all combinations of the
2269    supported depth and stencil resolve modes, including setting either
2270    depth or stencil resolve mode to ename:VK_RESOLVE_MODE_NONE.
2271    An implementation that supports pname:independentResolve must: also
2272    support pname:independentResolveNone.
2273// end::VK_KHR_depth_stencil_resolve-properties[]
2274
2275:refpage: VkPhysicalDeviceDepthStencilResolveProperties
2276include::{chapters}/limits.txt[tag=limits_desc]
2277
2278include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[]
2279--
2280endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
2281
2282ifdef::VK_KHR_performance_query[]
2283include::{chapters}/VK_KHR_performance_query/props.txt[]
2284endif::VK_KHR_performance_query[]
2285
2286ifdef::VK_NV_shading_rate_image[]
2287[open,refpage='VkPhysicalDeviceShadingRateImagePropertiesNV',desc='Structure describing shading rate image limits that can be supported by an implementation',type='structs']
2288--
2289The sname:VkPhysicalDeviceShadingRateImagePropertiesNV structure is defined
2290as:
2291
2292include::{generated}/api/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
2293
2294  * pname:sType is the type of this structure.
2295  * pname:pNext is `NULL` or a pointer to a structure extending this
2296    structure.
2297  * [[limits-shading-rate-texel-size]] pname:shadingRateTexelSize indicates
2298    the width and height of the portion of the framebuffer corresponding to
2299    each texel in the shading rate image.
2300  * [[limits-shading-rate-palette-size]] pname:shadingRatePaletteSize
2301    indicates the maximum number of palette entries supported for the
2302    shading rate image.
2303  * [[limits-shading-rate-max-coarse-samples]]
2304    pname:shadingRateMaxCoarseSamples specifies the maximum number of
2305    coverage samples supported in a single fragment.
2306    If the product of the fragment size derived from the base shading rate
2307    and the number of coverage samples per pixel exceeds this limit, the
2308    final shading rate will be adjusted so that its product does not exceed
2309    the limit.
2310
2311:refpage: VkPhysicalDeviceShadingRateImagePropertiesNV
2312include::{chapters}/limits.txt[tag=limits_desc]
2313
2314These properties are related to the <<primsrast-shading-rate-image, shading
2315rate image>> feature.
2316
2317include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
2318--
2319endif::VK_NV_shading_rate_image[]
2320
2321ifdef::VK_EXT_transform_feedback[]
2322[open,refpage='VkPhysicalDeviceTransformFeedbackPropertiesEXT',desc='Structure describing transform feedback properties that can be supported by an implementation',type='structs']
2323--
2324The sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT structure is
2325defined as:
2326
2327include::{generated}/api/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
2328
2329  * pname:sType is the type of this structure.
2330  * pname:pNext is `NULL` or a pointer to a structure extending this
2331    structure.
2332  * [[limits-maxTransformFeedbackStreams]] pname:maxTransformFeedbackStreams
2333    is the maximum number of vertex streams that can be output from geometry
2334    shaders declared with the code:GeometryStreams capability.
2335    If the implementation does not support
2336    sname:VkPhysicalDeviceTransformFeedbackFeaturesEXT::pname:geometryStreams
2337    then pname:maxTransformFeedbackStreams must: be set to `1`.
2338  * [[limits-maxTransformFeedbackBuffers]] pname:maxTransformFeedbackBuffers
2339    is the maximum number of transform feedback buffers that can be bound
2340    for capturing shader outputs from the last
2341    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
2342    stage>>.
2343  * [[limits-maxTransformFeedbackBufferSize]]
2344    pname:maxTransformFeedbackBufferSize is the maximum size that can be
2345    specified when binding a buffer for transform feedback in
2346    flink:vkCmdBindTransformFeedbackBuffersEXT.
2347  * [[limits-maxTransformFeedbackStreamDataSize]]
2348    pname:maxTransformFeedbackStreamDataSize is the maximum amount of data
2349    in bytes for each vertex that captured to one or more transform feedback
2350    buffers associated with a specific vertex stream.
2351  * [[limits-maxTransformFeedbackBufferDataSize]]
2352    pname:maxTransformFeedbackBufferDataSize is the maximum amount of data
2353    in bytes for each vertex that can be captured to a specific transform
2354    feedback buffer.
2355  * [[limits-maxTransformFeedbackBufferDataStride]]
2356    pname:maxTransformFeedbackBufferDataStride is the maximum stride between
2357    each capture of vertex data to the buffer.
2358  * [[limits-transformFeedbackQueries]] pname:transformFeedbackQueries is
2359    ename:VK_TRUE if the implementation supports the
2360    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT query type.
2361    pname:transformFeedbackQueries is ename:VK_FALSE if queries of this type
2362    cannot: be created.
2363  * [[limits-transformFeedbackStreamsLinesTriangles]]
2364    pname:transformFeedbackStreamsLinesTriangles is ename:VK_TRUE if the
2365    implementation supports the geometry shader code:OpExecutionMode of
2366    code:OutputLineStrip and code:OutputTriangleStrip in addition to
2367    code:OutputPoints when more than one vertex stream is output.
2368    If pname:transformFeedbackStreamsLinesTriangles is ename:VK_FALSE the
2369    implementation only supports an code:OpExecutionMode of
2370    code:OutputPoints when more than one vertex stream is output from the
2371    geometry shader.
2372  * [[limits-transformFeedbackRasterizationStreamSelect]]
2373    pname:transformFeedbackRasterizationStreamSelect is ename:VK_TRUE if the
2374    implementation supports the code:GeometryStreams SPIR-V capability and
2375    the application can use
2376    slink:VkPipelineRasterizationStateStreamCreateInfoEXT to modify which
2377    vertex stream output is used for rasterization.
2378    Otherwise vertex stream `0` must: always be used for rasterization.
2379  * [[limits-transformFeedbackDraw]] pname:transformFeedbackDraw is
2380    ename:VK_TRUE if the implementation supports the
2381    flink:vkCmdDrawIndirectByteCountEXT function otherwise the function
2382    must: not be called.
2383
2384:refpage: VkPhysicalDeviceTransformFeedbackPropertiesEXT
2385include::{chapters}/limits.txt[tag=limits_desc]
2386
2387include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
2388--
2389endif::VK_EXT_transform_feedback[]
2390
2391ifdef::VK_NV_ray_tracing[]
2392[open,refpage='VkPhysicalDeviceRayTracingPropertiesNV',desc='Properties of the physical device for ray tracing',type='structs']
2393--
2394The sname:VkPhysicalDeviceRayTracingPropertiesNV structure is defined as:
2395
2396include::{generated}/api/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[]
2397
2398  * pname:sType is the type of this structure.
2399  * pname:pNext is `NULL` or a pointer to a structure extending this
2400    structure.
2401  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
2402  * [[limits-maxRecursionDepth]] pname:maxRecursionDepth is the maximum
2403    number of levels of recursion allowed in a trace command.
2404  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
2405    between shader groups in the shader binding table.
2406  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
2407    the base of the shader binding table.
2408  * pname:maxGeometryCount is the maximum number of geometries in the bottom
2409    level acceleration structure.
2410  * pname:maxInstanceCount is the maximum number of instances in the top
2411    level acceleration structure.
2412  * pname:maxTriangleCount is the maximum number of triangles in all
2413    geometries in the bottom level acceleration structure.
2414  * pname:maxDescriptorSetAccelerationStructures is the maximum number of
2415    acceleration structure descriptors that are allowed in a descriptor set.
2416
2417Due to the fact that the geometry, instance, and triangle counts are
2418specified at acceleration structure creation as 32-bit values,
2419pname:maxGeometryCount, pname:maxInstanceCount, and pname:maxTriangleCount
2420must: not exceed [eq]#2^32^-1#.
2421
2422:refpage: VkPhysicalDeviceRayTracingPropertiesNV
2423include::{chapters}/limits.txt[tag=limits_desc]
2424
2425ifdef::VK_KHR_ray_tracing_pipeline[]
2426Limits specified by this structure must: match those specified with the same
2427name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and
2428slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR.
2429endif::VK_KHR_ray_tracing_pipeline[]
2430
2431include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[]
2432--
2433endif::VK_NV_ray_tracing[]
2434
2435ifdef::VK_KHR_acceleration_structure[]
2436[open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs']
2437--
2438The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is
2439defined as:
2440
2441include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[]
2442
2443  * pname:sType is the type of this structure.
2444  * pname:pNext is `NULL` or a pointer to a structure extending this
2445    structure.
2446  * [[limits-maxGeometryCount]] pname:maxGeometryCount is the maximum number
2447    of geometries in the bottom level acceleration structure.
2448  * [[limits-maxInstanceCount]] pname:maxInstanceCount is the maximum number
2449    of instances in the top level acceleration structure.
2450  * [[limits-maxPrimitiveCount]] pname:maxPrimitiveCount is the maximum
2451    number of triangles or AABBs in all geometries in the bottom level
2452    acceleration structure.
2453  * [[limits-maxPerStageDescriptorAccelerationStructures]]
2454    pname:maxPerStageDescriptorAccelerationStructures is the maximum number
2455    of acceleration structure bindings that can: be accessible to a single
2456    shader stage in a pipeline layout.
2457    Descriptor bindings with a descriptor type of
2458    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
2459    limit.
2460    Only descriptor bindings in descriptor set layouts created without the
2461    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2462    count against this limit.
2463  * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]]
2464    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is
2465    similar to pname:maxPerStageDescriptorAccelerationStructures but counts
2466    descriptor bindings from descriptor sets created with or without the
2467    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2468    set.
2469  * [[limits-maxDescriptorSetAccelerationStructures]]
2470    pname:maxDescriptorSetAccelerationStructures is the maximum number of
2471    acceleration structure descriptors that can: be included in descriptor
2472    bindings in a pipeline layout across all pipeline shader stages and
2473    descriptor set numbers.
2474    Descriptor bindings with a descriptor type of
2475    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
2476    limit.
2477    Only descriptor bindings in descriptor set layouts created without the
2478    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2479    count against this limit.
2480  * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]]
2481    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar
2482    to pname:maxDescriptorSetAccelerationStructures but counts descriptor
2483    bindings from descriptor sets created with or without the
2484    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2485    set.
2486  * [[limits-minAccelerationStructureScratchOffsetAlignment]]
2487    pname:minAccelerationStructureScratchOffsetAlignment is the minimum
2488    required: alignment, in bytes, for scratch data passed in to an
2489    acceleration structure build command.
2490
2491Due to the fact that the geometry, instance, and primitive counts are
2492specified at acceleration structure creation as 32-bit values,
2493<<limits-maxGeometryCount,pname:maxGeometryCount>>,
2494<<limits-maxInstanceCount, pname:maxInstanceCount>>, and
2495<<limits-maxPrimitiveCount, pname:maxPrimitiveCount>> must: not exceed
2496[eq]#2^32^-1#.
2497
2498:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR
2499include::{chapters}/limits.txt[tag=limits_desc]
2500
2501ifdef::VK_NV_ray_tracing[]
2502Limits specified by this structure must: match those specified with the same
2503name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
2504endif::VK_NV_ray_tracing[]
2505
2506include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[]
2507--
2508endif::VK_KHR_acceleration_structure[]
2509
2510ifdef::VK_KHR_ray_tracing_pipeline[]
2511[open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs']
2512--
2513The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is
2514defined as:
2515
2516include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[]
2517
2518  * pname:sType is the type of this structure.
2519  * pname:pNext is `NULL` or a pointer to a structure extending this
2520    structure.
2521  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
2522  * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the
2523    maximum number of levels of ray recursion allowed in a trace command.
2524  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
2525    between shader groups in the shader binding table.
2526  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
2527    the base of the shader binding table.
2528  * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the
2529    information required to do capture and replay for shader group handles.
2530  * pname:maxRayDispatchInvocationCount is the maximum number of ray
2531    generation shader invocations which may: be produced by a single
2532    flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command.
2533  * pname:shaderGroupHandleAlignment is the required: alignment in bytes for
2534    each shader binding table entry.
2535  * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray
2536    attribute structure
2537
2538:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR
2539include::{chapters}/limits.txt[tag=limits_desc]
2540
2541ifdef::VK_NV_ray_tracing[]
2542Limits specified by this structure must: match those specified with the same
2543name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
2544endif::VK_NV_ray_tracing[]
2545
2546include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[]
2547--
2548endif::VK_KHR_ray_tracing_pipeline[]
2549
2550ifdef::VK_NV_cooperative_matrix[]
2551[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
2552--
2553The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined
2554as:
2555
2556include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
2557
2558  * pname:sType is the type of this structure.
2559  * pname:pNext is `NULL` or a pointer to a structure extending this
2560    structure.
2561  * [[limits-cooperativeMatrixSupportedStages]]
2562    pname:cooperativeMatrixSupportedStages is a bitfield of
2563    elink:VkShaderStageFlagBits describing the shader stages that
2564    cooperative matrix instructions are supported in.
2565    pname:cooperativeMatrixSupportedStages will have the
2566    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
2567    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
2568
2569:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV
2570include::{chapters}/limits.txt[tag=limits_desc]
2571
2572include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
2573--
2574endif::VK_NV_cooperative_matrix[]
2575
2576ifdef::VK_NV_shader_sm_builtins[]
2577[open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs']
2578--
2579The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined
2580as:
2581
2582include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
2583
2584  * pname:sType is the type of this structure.
2585  * pname:pNext is `NULL` or a pointer to a structure extending this
2586    structure.
2587  * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the
2588    device.
2589  * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number
2590    of simultaneously executing warps on an SM.
2591
2592:refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
2593include::{chapters}/limits.txt[tag=limits_desc]
2594
2595include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
2596--
2597endif::VK_NV_shader_sm_builtins[]
2598
2599ifdef::VK_EXT_texel_buffer_alignment[]
2600[open,refpage='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs']
2601--
2602The sname:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT structure is
2603defined as:
2604
2605include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
2606
2607  * pname:sType is the type of this structure.
2608  * pname:pNext is `NULL` or a pointer to a structure extending this
2609    structure.
2610  * [[limits-storageTexelBufferOffsetAlignmentBytes]]
2611    pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is
2612    sufficient for a storage texel buffer of any format.
2613  * [[limits-storageTexelBufferOffsetSingleTexelAlignment]]
2614    pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether
2615    single texel alignment is sufficient for a storage texel buffer of any
2616    format.
2617  * [[limits-uniformTexelBufferOffsetAlignmentBytes]]
2618    pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is
2619    sufficient for a uniform texel buffer of any format.
2620  * [[limits-uniformTexelBufferOffsetSingleTexelAlignment]]
2621    pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether
2622    single texel alignment is sufficient for a uniform texel buffer of any
2623    format.
2624
2625:refpage: VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
2626include::{chapters}/limits.txt[tag=limits_desc]
2627
2628If the single texel alignment property is ename:VK_FALSE, then the buffer
2629view's offset must: be aligned to the corresponding byte alignment value.
2630If the single texel alignment property is ename:VK_TRUE, then the buffer
2631view's offset must: be aligned to the lesser of the corresponding byte
2632alignment value or the size of a single texel, based on
2633slink:VkBufferViewCreateInfo::pname:format.
2634If the size of a single texel is a multiple of three bytes, then the size of
2635a single component of the format is used instead.
2636
2637These limits must: not advertise a larger alignment than the
2638<<limits-required,required>> maximum minimum value of
2639slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any
2640format that supports use as a texel buffer.
2641
2642include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
2643--
2644endif::VK_EXT_texel_buffer_alignment[]
2645
2646ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
2647[open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR']
2648--
2649The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined
2650as:
2651
2652include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
2653
2654ifdef::VK_KHR_timeline_semaphore[]
2655or the equivalent
2656
2657include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.txt[]
2658endif::VK_KHR_timeline_semaphore[]
2659
2660  * pname:sType is the type of this structure.
2661  * pname:pNext is `NULL` or a pointer to a structure extending this
2662    structure.
2663
2664// Must have preceding whitespace
2665ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
2666ifndef::VK_VERSION_1_2[:anchor-prefix:]
2667// tag::VK_KHR_timeline_semaphore-properties[]
2668  * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]]
2669    pname:maxTimelineSemaphoreValueDifference indicates the maximum
2670    difference allowed by the implementation between the current value of a
2671    timeline semaphore and any pending signal or wait operations.
2672// end::VK_KHR_timeline_semaphore-properties[]
2673
2674:refpage: VkPhysicalDeviceTimelineSemaphoreProperties
2675include::{chapters}/limits.txt[tag=limits_desc]
2676
2677include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
2678--
2679endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
2680
2681ifdef::VK_EXT_line_rasterization[]
2682[open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs']
2683--
2684The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is
2685defined as:
2686
2687include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
2688
2689  * pname:sType is the type of this structure.
2690  * pname:pNext is `NULL` or a pointer to a structure extending this
2691    structure.
2692  * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is
2693    the number of bits of subpixel precision in framebuffer coordinates
2694    [eq]#x~f~# and [eq]#y~f~# when rasterizing <<primsrast-lines,line
2695    segments>>.
2696
2697:refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT
2698include::{chapters}/limits.txt[tag=limits_desc]
2699
2700include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
2701--
2702endif::VK_EXT_line_rasterization[]
2703
2704ifdef::VK_EXT_robustness2[]
2705[open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs']
2706--
2707The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as:
2708
2709include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
2710
2711  * pname:sType is the type of this structure.
2712  * pname:pNext is `NULL` or a pointer to a structure extending this
2713    structure.
2714  * [[limits-robustStorageBufferAccessSizeAlignment]]
2715    pname:robustStorageBufferAccessSizeAlignment is the number of bytes that
2716    the range of a storage buffer descriptor is rounded up to when used for
2717    bounds-checking when
2718    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
2719    This value is either 1 or 4.
2720  * [[limits-robustUniformBufferAccessSizeAlignment]]
2721    pname:robustUniformBufferAccessSizeAlignment is the number of bytes that
2722    the range of a uniform buffer descriptor is rounded up to when used for
2723    bounds-checking when
2724    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
2725    This value is a power of two in the range [1, 256].
2726
2727:refpage: VkPhysicalDeviceRobustness2PropertiesEXT
2728include::{chapters}/limits.txt[tag=limits_desc]
2729
2730include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
2731--
2732endif::VK_EXT_robustness2[]
2733
2734ifdef::VK_NV_device_generated_commands[]
2735[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
2736--
2737The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is
2738defined as:
2739
2740include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
2741
2742  * pname:sType is the type of this structure.
2743  * pname:pNext is `NULL` or a pointer to a structure extending this
2744    structure.
2745  * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups
2746    in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV.
2747  * pname:maxIndirectSequenceCount is the maximum number of sequences in
2748    slink:VkGeneratedCommandsInfoNV and in
2749    slink:VkGeneratedCommandsMemoryRequirementsInfoNV.
2750  * pname:maxIndirectCommandsLayoutTokenCount is the maximum number of
2751    tokens in slink:VkIndirectCommandsLayoutCreateInfoNV.
2752  * pname:maxIndirectCommandsStreamCount is the maximum number of streams in
2753    slink:VkIndirectCommandsLayoutCreateInfoNV.
2754  * pname:maxIndirectCommandsTokenOffset is the maximum offset in
2755    sname:VkIndirectCommandsLayoutTokenNV.
2756  * pname:maxIndirectCommandsStreamStride is the maximum stream stride in
2757    slink:VkIndirectCommandsLayoutCreateInfoNV.
2758  * pname:minSequenceCountBufferOffsetAlignment is the minimum alignment for
2759    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
2760  * pname:minSequenceIndexBufferOffsetAlignment is the minimum alignment for
2761    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
2762  * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment
2763    for memory addresses used in sname:VkIndirectCommandsStreamNV, and as
2764    preprocess buffer in sname:VkGeneratedCommandsInfoNV.
2765
2766:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
2767include::{chapters}/limits.txt[tag=limits_desc]
2768
2769include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
2770--
2771
2772endif::VK_NV_device_generated_commands[]
2773
2774ifdef::VK_KHR_portability_subset[]
2775[open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs']
2776--
2777The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is
2778defined as:
2779
2780include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
2781
2782  * pname:sType is the type of this structure.
2783  * pname:pNext is `NULL` or a pointer to a structure extending this
2784    structure.
2785  * [[limits-minVertexInputBindingStrideAlignment]]
2786    pname:minVertexInputBindingStrideAlignment indicates the minimum
2787    alignment for vertex input strides.
2788    slink:VkVertexInputBindingDescription::pname:stride must: be a multiple
2789    of, and at least as large as, this value.
2790
2791:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR
2792include::{chapters}/limits.txt[tag=limits_desc]
2793
2794include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
2795--
2796endif::VK_KHR_portability_subset[]
2797
2798
2799ifdef::VK_KHR_fragment_shading_rate[]
2800[open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs']
2801--
2802The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is
2803defined as:
2804
2805include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
2806
2807  * pname:sType is the type of this structure.
2808  * pname:pNext is `NULL` or a pointer to a structure extending this
2809    structure.
2810  * [[limits-minFragmentShadingRateAttachmentTexelSize]]
2811    pname:minFragmentShadingRateAttachmentTexelSize indicates minimum
2812    supported width and height of the portion of the framebuffer
2813    corresponding to each texel in a fragment shading rate attachment.
2814    Each value must: be less than or equal to the values in
2815    pname:maxFragmentShadingRateAttachmentTexelSize.
2816    Each value must: be a power-of-two.
2817    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
2818    pname:attachmentFragmentShadingRate>> feature is not supported.
2819  * [[limits-maxFragmentShadingRateAttachmentTexelSize]]
2820    pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum
2821    supported width and height of the portion of the framebuffer
2822    corresponding to each texel in a fragment shading rate attachment.
2823    Each value must: be greater than or equal to the values in
2824    pname:minFragmentShadingRateAttachmentTexelSize.
2825    Each value must: be a power-of-two.
2826    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
2827    pname:attachmentFragmentShadingRate>> feature is not supported.
2828  * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]]
2829    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the
2830    maximum ratio between the width and height of the portion of the
2831    framebuffer corresponding to each texel in a fragment shading rate
2832    attachment.
2833    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a
2834    power-of-two value, and must: be less than or equal to
2835    [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width /
2836    pname:minFragmentShadingRateAttachmentTexelSize.height,
2837    pname:maxFragmentShadingRateAttachmentTexelSize.height /
2838    pname:minFragmentShadingRateAttachmentTexelSize.width)#.
2839    It must: be 0 if the <<features-attachmentFragmentShadingRate,
2840    pname:attachmentFragmentShadingRate>> feature is not supported.
2841  * [[limits-primitiveFragmentShadingRateWithMultipleViewports]]
2842    pname:primitiveFragmentShadingRateWithMultipleViewports specifies
2843    whether the <<primsrast-fragment-shading-rate-primitive,primitive
2844    fragment shading rate>> can: be used when multiple viewports are used.
2845    If this value is ename:VK_FALSE, only a single viewport must: be used,
2846    and applications must: not write to the
2847ifdef::VK_NV_viewport_array2[]
2848    code:ViewportMaskNV or
2849endif::VK_NV_viewport_array2[]
2850    code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR.
2851    It must: be ename:VK_FALSE if
2852ifdef::VK_VERSION_1_2[]
2853    the <<features-shaderOutputViewportIndex,
2854    pname:shaderOutputViewportIndex>> feature,
2855endif::VK_VERSION_1_2[]
2856ifdef::VK_EXT_shader_viewport_index_layer[]
2857    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
2858endif::VK_EXT_shader_viewport_index_layer[]
2859ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
2860    the <<features-geometryShader, pname:geometryShader>> feature is not
2861    supported, or if the <<features-primitiveFragmentShadingRate,
2862    pname:primitiveFragmentShadingRate>> feature is not supported.
2863  * [[limits-layeredShadingRateAttachments]]
2864    pname:layeredShadingRateAttachments specifies whether a shading rate
2865    attachment image view can: be created with multiple layers.
2866    If this value is ename:VK_FALSE, when creating an image view with a
2867    pname:usage that includes
2868    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
2869    pname:layerCount must: be `1`.
2870    It must: be ename:VK_FALSE if
2871ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
2872    the <<features-multiview,pname:multiview>> feature,
2873endif::VK_VERSION_1_1,VK_KHR_multiview[]
2874ifdef::VK_VERSION_1_2[]
2875    the <<features-shaderOutputViewportIndex,
2876    pname:shaderOutputViewportIndex>> feature,
2877endif::VK_VERSION_1_2[]
2878ifdef::VK_EXT_shader_viewport_index_layer[]
2879    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
2880endif::VK_EXT_shader_viewport_index_layer[]
2881ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
2882    the <<features-geometryShader, pname:geometryShader>> feature is not
2883    supported, or if the <<features-attachmentFragmentShadingRate,
2884    pname:attachmentFragmentShadingRate>> feature is not supported.
2885  * [[limits-fragmentShadingRateNonTrivialCombinerOps]]
2886    pname:fragmentShadingRateNonTrivialCombinerOps specifies whether
2887    elink:VkFragmentShadingRateCombinerOpKHR enums other than
2888    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
2889    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used.
2890    It must: be ename:VK_FALSE unless either the
2891    <<features-primitiveFragmentShadingRate,
2892    pname:primitiveFragmentShadingRate>> or
2893    <<features-attachmentFragmentShadingRate,
2894    pname:attachmentFragmentShadingRate>> feature is supported.
2895  * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum
2896    supported width and height of a fragment.
2897    Its pname:width and pname:height members must: both be power-of-two
2898    values.
2899    This limit is purely informational, and is not validated.
2900  * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio
2901    indicates the maximum ratio between the width and height of a fragment.
2902    pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and
2903    must: be less than or equal to the maximum of the pname:width and
2904    pname:height members of pname:maxFragmentSize.
2905    This limit is purely informational, and is not validated.
2906  * [[limits-maxFragmentShadingRateCoverageSamples]]
2907    pname:maxFragmentShadingRateCoverageSamples specifies the maximum number
2908    of coverage samples supported in a single fragment.
2909    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
2910    to the product of the pname:width and pname:height members of
2911    pname:maxFragmentSize, and the sample count reported by
2912    pname:maxFragmentShadingRateRasterizationSamples.
2913    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
2914    to [eq]#pname:maxSampleMaskWords {times} 32# if
2915    pname:fragmentShadingRateWithShaderSampleMask is supported.
2916    This limit is purely informational, and is not validated.
2917  * [[limits-maxFragmentShadingRateRasterizationSamples]]
2918    pname:maxFragmentShadingRateRasterizationSamples is a
2919    elink:VkSampleCountFlagBits value specifying the maximum sample rate
2920    supported when a fragment covers multiple pixels.
2921    This limit is purely informational, and is not validated.
2922  * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]]
2923    pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether
2924    the implementation supports writing code:FragDepth
2925ifdef::VK_EXT_shader_stencil_export[]
2926    or code:FragStencilRefEXT
2927endif::VK_EXT_shader_stencil_export[]
2928    from a fragment shader for multi-pixel fragments.
2929    If this value is ename:VK_FALSE, writing to those built-ins will clamp
2930    the fragment shading rate to [eq]#(1,1)#.
2931  * [[limits-fragmentShadingRateWithSampleMask]]
2932    pname:fragmentShadingRateWithSampleMask specifies whether the the
2933    implementation supports setting valid bits of
2934    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for
2935    multi-pixel fragments.
2936    If this value is ename:VK_FALSE, zeroing valid bits in the sample mask
2937    will clamp the fragment shading rate to [eq]#(1,1)#.
2938  * [[limits-fragmentShadingRateWithShaderSampleMask]]
2939    pname:fragmentShadingRateWithShaderSampleMask specifies whether the
2940    implementation supports reading or writing code:SampleMask for
2941    multi-pixel fragments.
2942    If this value is ename:VK_FALSE, using that built-in will clamp the
2943    fragment shading rate to [eq]#(1,1)#.
2944  * [[limits-fragmentShadingRateWithConservativeRasterization]]
2945    pname:fragmentShadingRateWithConservativeRasterization
2946ifndef::VK_EXT_conservative_rasterization[]
2947    is reserved for future use.
2948endif::VK_EXT_conservative_rasterization[]
2949ifdef::VK_EXT_conservative_rasterization[]
2950    specifies whether <<primsrast-conservativeraster, conservative
2951    rasterization>> is supported for multi-pixel fragments.
2952    It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization`
2953    is not supported.
2954    If this value is ename:VK_FALSE, using <<primsrast-conservativeraster,
2955    conservative rasterization>> will clamp the fragment shading rate to
2956    [eq]#(1,1)#.
2957endif::VK_EXT_conservative_rasterization[]
2958  * [[limits-fragmentShadingRateWithFragmentShaderInterlock]]
2959    pname:fragmentShadingRateWithFragmentShaderInterlock
2960ifndef::VK_EXT_fragment_shader_interlock[]
2961    is reserved for future use.
2962endif::VK_EXT_fragment_shader_interlock[]
2963ifdef::VK_EXT_fragment_shader_interlock[]
2964    specifies whether <<fragops-shader-interlock, fragment shader
2965    interlock>> is supported for multi-pixel fragments.
2966    It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock`
2967    is not supported.
2968    If this value is ename:VK_FALSE, using <<fragops-shader-interlock,
2969    fragment shader interlock>> will clamp the fragment shading rate to
2970    [eq]#(1,1)#.
2971endif::VK_EXT_fragment_shader_interlock[]
2972  * [[limits-fragmentShadingRateWithCustomSampleLocations]]
2973    pname:fragmentShadingRateWithCustomSampleLocations
2974ifndef::VK_EXT_sample_locations[]
2975    is reserved for future use.
2976endif::VK_EXT_sample_locations[]
2977ifdef::VK_EXT_sample_locations[]
2978    specifies whether <<primsrast-samplelocations, custom sample locations>>
2979    are supported for multi-pixel fragments.
2980    It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not
2981    supported.
2982    If this value is ename:VK_FALSE, using <<primsrast-samplelocations,
2983    custom sample locations>> will clamp the fragment shading rate to
2984    [eq]#(1,1)#.
2985endif::VK_EXT_sample_locations[]
2986  * [[limits-fragmentShadingRateStrictMultiplyCombiner]]
2987    pname:fragmentShadingRateStrictMultiplyCombiner specifies whether
2988    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a
2989    multiplication or not.
2990    Implementations where this value is ename:VK_FALSE will instead combine
2991    rates with an addition.
2992    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE,
2993    implementations must: report this as ename:VK_FALSE.
2994    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE,
2995    implementations should: report this as ename:VK_TRUE.
2996
2997[NOTE]
2998.Note
2999====
3000Multiplication of the combiner rates using the fragment width/height in
3001linear space is equivalent to an addition of those values in log2 space.
3002Some implementations inadvertently implemented an addition in linear space
3003due to unclear requirements originating outside of this specification.
3004This resulted in <<limits-fragmentShadingRateStrictMultiplyCombiner,
3005pname:fragmentShadingRateStrictMultiplyCombiner>> being added.
3006Fortunately, this only affects situations where a rate of 1 in either
3007dimension is combined with another rate of 1.
3008All other combinations result in the exact same result as if multiplication
3009was performed in linear space due to the clamping logic, and the fact that
3010both the sum and product of 2 and 2 are equal.
3011In many cases, this limit will not affect the correct operation of
3012applications.
3013====
3014
3015:refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR
3016include::{chapters}/limits.txt[tag=limits_desc]
3017
3018These properties are related to <<primsrast-fragment-shading-rate, fragment
3019shading rates>>.
3020
3021include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
3022--
3023endif::VK_KHR_fragment_shading_rate[]
3024
3025ifdef::VK_NV_fragment_shading_rate_enums[]
3026[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs']
3027--
3028The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is
3029defined as:
3030
3031include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
3032
3033  * pname:sType is the type of this structure.
3034  * pname:pNext is `NULL` or a pointer to a structure extending this
3035    structure.
3036  * [[limits-maxFragmentShadingRateInvocationCount]]
3037    pname:maxFragmentShadingRateInvocationCount is a
3038    elink:VkSampleCountFlagBits value indicating the maximum number of
3039    fragment shader invocations per fragment supported in pipeline,
3040    primitive, and attachment fragment shading rates.
3041
3042:refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV
3043include::{chapters}/limits.txt[tag=limits_desc]
3044
3045These properties are related to <<primsrast-fragment-shading-rate, fragment
3046shading rates>>.
3047
3048include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
3049--
3050endif::VK_NV_fragment_shading_rate_enums[]
3051
3052ifdef::VK_EXT_custom_border_color[]
3053[open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
3054--
3055The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is
3056defined as:
3057
3058include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
3059
3060  * [[limits-maxCustomBorderColorSamplers]]
3061    pname:maxCustomBorderColorSamplers indicates the maximum number of
3062    samplers with custom border colors which can: simultaneously exist on a
3063    device.
3064
3065:refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT
3066include::{chapters}/limits.txt[tag=limits_desc]
3067
3068include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
3069--
3070endif::VK_EXT_custom_border_color[]
3071
3072ifdef::VK_EXT_provoking_vertex[]
3073[open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs']
3074--
3075The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined
3076as:
3077
3078include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
3079
3080  * pname:sType is the type of this structure.
3081  * pname:pNext is `NULL` or a pointer to a structure extending this
3082    structure.
3083  * [[limits-provokingVertexModePerPipeline]]
3084    pname:provokingVertexModePerPipeline indicates whether the
3085    implementation supports graphics pipelines with different provoking
3086    vertex modes within the same render pass instance.
3087  * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]]
3088    pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates
3089    whether the implementation can preserve the provoking vertex order when
3090    writing triangle fan vertices to transform feedback.
3091
3092:refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT
3093include::{chapters}/limits.txt[tag=limits_desc]
3094
3095include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
3096--
3097endif::VK_EXT_provoking_vertex[]
3098
3099ifdef::VK_HUAWEI_subpass_shading[]
3100[open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs']
3101--
3102The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is
3103defined as:
3104
3105include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
3106
3107  * pname:sType is the type of this structure.
3108  * pname:pNext is `NULL` or a pointer to a structure extending this
3109    structure.
3110  * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]]
3111    pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum
3112    ratio between the width and height of the portion of the subpass shading
3113    shader workgroup size.
3114    pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two
3115    value, and must: be less than or equal to max(code:WorkgroupSize.x /
3116    code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x).
3117
3118:refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI
3119include::{chapters}/limits.txt[tag=limits_desc]
3120
3121include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
3122--
3123endif::VK_HUAWEI_subpass_shading[]
3124
3125ifdef::VK_EXT_multi_draw[]
3126
3127[open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs']
3128--
3129The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as:
3130
3131include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
3132
3133The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure
3134describe the following features:
3135
3136  * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the
3137    maximum number of draw calls which can: be batched into a single
3138    multidraw.
3139
3140:refpage: VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT
3141include::{chapters}/limits.txt[tag=limits_desc]
3142
3143include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
3144--
3145
3146endif::VK_EXT_multi_draw[]
3147
3148[[limits-minmax]]
3149== Limit Requirements
3150
3151The following table specifies the required: minimum/maximum for all Vulkan
3152graphics implementations.
3153Where a limit corresponds to a fine-grained device feature which is
3154optional:, the feature name is listed with two required: limits, one when
3155the feature is supported and one when it is not supported.
3156If an implementation supports a feature, the limits reported are the same
3157whether or not the feature is enabled.
3158
3159[[limits-types]]
3160.Required Limit Types
3161[width="100%",cols="<20%,<50%,<30%",options="header"]
3162|====
3163| Type                     | Limit                                      | Feature
3164| code:uint32_t            | pname:maxImageDimension1D                  | -
3165| code:uint32_t            | pname:maxImageDimension2D                  | -
3166| code:uint32_t            | pname:maxImageDimension3D                  | -
3167| code:uint32_t            | pname:maxImageDimensionCube                | -
3168| code:uint32_t            | pname:maxImageArrayLayers                  | -
3169| code:uint32_t            | pname:maxTexelBufferElements               | -
3170| code:uint32_t            | pname:maxUniformBufferRange                | -
3171| code:uint32_t            | pname:maxStorageBufferRange                | -
3172| code:uint32_t            | pname:maxPushConstantsSize                 | -
3173| code:uint32_t            | pname:maxMemoryAllocationCount             | -
3174| code:uint32_t            | pname:maxSamplerAllocationCount            | -
3175| basetype:VkDeviceSize    | pname:bufferImageGranularity               | -
3176| basetype:VkDeviceSize    | pname:sparseAddressSpaceSize               | pname:sparseBinding
3177| code:uint32_t            | pname:maxBoundDescriptorSets               | -
3178| code:uint32_t            | pname:maxPerStageDescriptorSamplers        | -
3179| code:uint32_t            | pname:maxPerStageDescriptorUniformBuffers  | -
3180| code:uint32_t            | pname:maxPerStageDescriptorStorageBuffers  | -
3181| code:uint32_t            | pname:maxPerStageDescriptorSampledImages   | -
3182| code:uint32_t            | pname:maxPerStageDescriptorStorageImages   | -
3183| code:uint32_t            | pname:maxPerStageDescriptorInputAttachments| -
3184| code:uint32_t            | pname:maxPerStageResources                 | -
3185| code:uint32_t            | pname:maxDescriptorSetSamplers             | -
3186| code:uint32_t            | pname:maxDescriptorSetUniformBuffers       | -
3187| code:uint32_t            | pname:maxDescriptorSetUniformBuffersDynamic| -
3188| code:uint32_t            | pname:maxDescriptorSetStorageBuffers       | -
3189| code:uint32_t            | pname:maxDescriptorSetStorageBuffersDynamic| -
3190| code:uint32_t            | pname:maxDescriptorSetSampledImages        | -
3191| code:uint32_t            | pname:maxDescriptorSetStorageImages        | -
3192| code:uint32_t            | pname:maxDescriptorSetInputAttachments     | -
3193| code:uint32_t            | pname:maxVertexInputAttributes             | -
3194| code:uint32_t            | pname:maxVertexInputBindings               | -
3195| code:uint32_t            | pname:maxVertexInputAttributeOffset        | -
3196| code:uint32_t            | pname:maxVertexInputBindingStride          | -
3197| code:uint32_t            | pname:maxVertexOutputComponents            | -
3198| code:uint32_t            | pname:maxTessellationGenerationLevel       | pname:tessellationShader
3199| code:uint32_t            | pname:maxTessellationPatchSize             | pname:tessellationShader
3200| code:uint32_t            | pname:maxTessellationControlPerVertexInputComponents  | pname:tessellationShader
3201| code:uint32_t            | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader
3202| code:uint32_t            | pname:maxTessellationControlPerPatchOutputComponents  | pname:tessellationShader
3203| code:uint32_t            | pname:maxTessellationControlTotalOutputComponents     | pname:tessellationShader
3204| code:uint32_t            | pname:maxTessellationEvaluationInputComponents        | pname:tessellationShader
3205| code:uint32_t            | pname:maxTessellationEvaluationOutputComponents       | pname:tessellationShader
3206| code:uint32_t            | pname:maxGeometryShaderInvocations         | pname:geometryShader
3207| code:uint32_t            | pname:maxGeometryInputComponents           | pname:geometryShader
3208| code:uint32_t            | pname:maxGeometryOutputComponents          | pname:geometryShader
3209| code:uint32_t            | pname:maxGeometryOutputVertices            | pname:geometryShader
3210| code:uint32_t            | pname:maxGeometryTotalOutputComponents     | pname:geometryShader
3211| code:uint32_t            | pname:maxFragmentInputComponents           | -
3212| code:uint32_t            | pname:maxFragmentOutputAttachments         | -
3213| code:uint32_t            | pname:maxFragmentDualSrcAttachments        | pname:dualSrcBlend
3214| code:uint32_t            | pname:maxFragmentCombinedOutputResources   | -
3215| code:uint32_t            | pname:maxComputeSharedMemorySize           | -
3216| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupCount             | -
3217| code:uint32_t            | pname:maxComputeWorkGroupInvocations       | -
3218| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupSize              | -
3219| code:uint32_t            | pname:subPixelPrecisionBits                | -
3220| code:uint32_t            | pname:subTexelPrecisionBits                | -
3221| code:uint32_t            | pname:mipmapPrecisionBits                  | -
3222| code:uint32_t            | pname:maxDrawIndexedIndexValue             | pname:fullDrawIndexUint32
3223| code:uint32_t            | pname:maxDrawIndirectCount                 | pname:multiDrawIndirect
3224| code:float               | pname:maxSamplerLodBias                    | -
3225| code:float               | pname:maxSamplerAnisotropy                 | pname:samplerAnisotropy
3226| code:uint32_t            | pname:maxViewports                         | pname:multiViewport
3227| 2 {times} code:uint32_t  | pname:maxViewportDimensions                | -
3228| 2 {times} code:float     | pname:viewportBoundsRange                  | -
3229| code:uint32_t            | pname:viewportSubPixelBits                 | -
3230| code:size_t              | pname:minMemoryMapAlignment                | -
3231| basetype:VkDeviceSize    | pname:minTexelBufferOffsetAlignment        | -
3232| basetype:VkDeviceSize    | pname:minUniformBufferOffsetAlignment      | -
3233| basetype:VkDeviceSize    | pname:minStorageBufferOffsetAlignment      | -
3234| code:int32_t             | pname:minTexelOffset                       | -
3235| code:uint32_t            | pname:maxTexelOffset                       | -
3236| code:int32_t             | pname:minTexelGatherOffset                 | pname:shaderImageGatherExtended
3237| code:uint32_t            | pname:maxTexelGatherOffset                 | pname:shaderImageGatherExtended
3238| code:float               | pname:minInterpolationOffset               | pname:sampleRateShading
3239| code:float               | pname:maxInterpolationOffset               | pname:sampleRateShading
3240| code:uint32_t            | pname:subPixelInterpolationOffsetBits      | pname:sampleRateShading
3241| code:uint32_t            | pname:maxFramebufferWidth                  | -
3242| code:uint32_t            | pname:maxFramebufferHeight                 | -
3243| code:uint32_t            | pname:maxFramebufferLayers                 | -
3244| tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts         | -
3245ifdef::VK_VERSION_1_2[]
3246| tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts  | -
3247endif::VK_VERSION_1_2[]
3248| tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts         | -
3249| tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts       | -
3250| tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | -
3251| code:uint32_t            | pname:maxColorAttachments                  | -
3252| tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts        | -
3253| tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts      | -
3254| tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts        | -
3255| tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts      | -
3256| tlink:VkSampleCountFlags | pname:storageImageSampleCounts             | pname:shaderStorageImageMultisample
3257| code:uint32_t            | pname:maxSampleMaskWords                   | -
3258| basetype:VkBool32        | pname:timestampComputeAndGraphics          | -
3259| code:float               | pname:timestampPeriod                      | -
3260| code:uint32_t            | pname:maxClipDistances                     | pname:shaderClipDistance
3261| code:uint32_t            | pname:maxCullDistances                     | pname:shaderCullDistance
3262| code:uint32_t            | pname:maxCombinedClipAndCullDistances      | pname:shaderCullDistance
3263| code:uint32_t            | pname:discreteQueuePriorities              | -
3264| 2 {times} code:float     | pname:pointSizeRange                       | pname:largePoints
3265| 2 {times} code:float     | pname:lineWidthRange                       | pname:wideLines
3266| code:float               | pname:pointSizeGranularity                 | pname:largePoints
3267| code:float               | pname:lineWidthGranularity                 | pname:wideLines
3268| basetype:VkBool32        | pname:strictLines                          | -
3269| basetype:VkBool32        | pname:standardSampleLocations              | -
3270| basetype:VkDeviceSize    | pname:optimalBufferCopyOffsetAlignment     | -
3271| basetype:VkDeviceSize    | pname:optimalBufferCopyRowPitchAlignment   | -
3272| basetype:VkDeviceSize    | pname:nonCoherentAtomSize                  | -
3273ifdef::VK_EXT_discard_rectangles[]
3274| code:uint32_t            | pname:maxDiscardRectangles                 | `apiext:VK_EXT_discard_rectangles`
3275endif::VK_EXT_discard_rectangles[]
3276ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3277| basetype:VkBool32        | pname:filterMinmaxSingleComponentFormats   |
3278ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ]
3279ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
3280| basetype:VkBool32        | pname:filterMinmaxImageComponentMapping    |
3281ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ]
3282ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
3283endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3284ifdef::VK_KHR_maintenance4[]
3285| basetype:VkDeviceSize    | pname:maxBufferSize                        | `<<features-maintenance4,pname:maintenance4>>`
3286endif::VK_KHR_maintenance4[]
3287ifdef::VK_EXT_conservative_rasterization[]
3288| code:float           | pname:primitiveOverestimationSize                 | `apiext:VK_EXT_conservative_rasterization`
3289| basetype:VkBool32        | pname:maxExtraPrimitiveOverestimationSize         | `apiext:VK_EXT_conservative_rasterization`
3290| code:float           | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization`
3291| basetype:VkBool32        | pname:degenerateTriangleRasterized                | `apiext:VK_EXT_conservative_rasterization`
3292| code:float           | pname:degenerateLinesRasterized                   | `apiext:VK_EXT_conservative_rasterization`
3293| basetype:VkBool32        | pname:fullyCoveredFragmentShaderInputVariable     | `apiext:VK_EXT_conservative_rasterization`
3294| basetype:VkBool32        | pname:conservativeRasterizationPostDepthCoverage  | `apiext:VK_EXT_conservative_rasterization`
3295endif::VK_EXT_conservative_rasterization[]
3296ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3297| code:uint32_t     | pname:maxUpdateAfterBindDescriptorsInAllPools             | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3298| basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative    | -
3299| basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative     | -
3300| basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative    | -
3301| basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative     | -
3302| basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative  | -
3303| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSamplers        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3304| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3305| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3306| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3307| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3308| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3309| code:uint32_t     | pname:maxPerStageUpdateAfterBindResources                 | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3310| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSamplers             | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3311| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3312| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3313| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3314| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3315| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSampledImages        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3316| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageImages        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3317| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInputAttachments     | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3318endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3319ifdef::VK_EXT_vertex_attribute_divisor[]
3320| code:uint32_t            | pname:maxVertexAttribDivisor               | `apiext:VK_EXT_vertex_attribute_divisor`
3321endif::VK_EXT_vertex_attribute_divisor[]
3322ifdef::VK_NV_mesh_shader[]
3323| code:uint32_t            | pname:maxDrawMeshTasksCount               | `apiext:VK_NV_mesh_shader`
3324| code:uint32_t            | pname:maxTaskWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
3325| code:uint32_t            | pname:maxTaskWorkGroupSize                | `apiext:VK_NV_mesh_shader`
3326| code:uint32_t            | pname:maxTaskTotalMemorySize              | `apiext:VK_NV_mesh_shader`
3327| code:uint32_t            | pname:maxTaskOutputCount                  | `apiext:VK_NV_mesh_shader`
3328| code:uint32_t            | pname:maxMeshWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
3329| code:uint32_t            | pname:maxMeshWorkGroupSize                | `apiext:VK_NV_mesh_shader`
3330| code:uint32_t            | pname:maxMeshTotalMemorySize              | `apiext:VK_NV_mesh_shader`
3331| code:uint32_t            | pname:maxMeshOutputVertices               | `apiext:VK_NV_mesh_shader`
3332| code:uint32_t            | pname:maxMeshOutputPrimitives             | `apiext:VK_NV_mesh_shader`
3333| code:uint32_t            | pname:maxMeshMultiviewViewCount           | `apiext:VK_NV_mesh_shader`
3334| code:uint32_t            | pname:meshOutputPerVertexGranularity      | `apiext:VK_NV_mesh_shader`
3335| code:uint32_t            | pname:meshOutputPerPrimitiveGranularity   | `apiext:VK_NV_mesh_shader`
3336endif::VK_NV_mesh_shader[]
3337ifdef::VK_EXT_transform_feedback[]
3338| code:uint32_t            | pname:maxTransformFeedbackStreams                 | `apiext:VK_EXT_transform_feedback`
3339| code:uint32_t            | pname:maxTransformFeedbackBuffers                 | `apiext:VK_EXT_transform_feedback`
3340| basetype:VkDeviceSize    | pname:maxTransformFeedbackBufferSize              | `apiext:VK_EXT_transform_feedback`
3341| code:uint32_t            | pname:maxTransformFeedbackStreamDataSize          | `apiext:VK_EXT_transform_feedback`
3342| code:uint32_t            | pname:maxTransformFeedbackBufferDataSize          | `apiext:VK_EXT_transform_feedback`
3343| code:uint32_t            | pname:maxTransformFeedbackBufferDataStride        | `apiext:VK_EXT_transform_feedback`
3344| basetype:VkBool32        | pname:transformFeedbackQueries                    | `apiext:VK_EXT_transform_feedback`
3345| basetype:VkBool32        | pname:transformFeedbackStreamsLinesTriangles      | `apiext:VK_EXT_transform_feedback`
3346| basetype:VkBool32        | pname:transformFeedbackRasterizationStreamSelect  | `apiext:VK_EXT_transform_feedback`
3347| basetype:VkBool32        | pname:transformFeedbackDraw                       | `apiext:VK_EXT_transform_feedback`
3348endif::VK_EXT_transform_feedback[]
3349ifdef::VK_EXT_fragment_density_map[]
3350| slink:VkExtent2D         | pname:minFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
3351| slink:VkExtent2D         | pname:maxFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
3352| basetype:VkBool32        | pname:fragmentDensityInvocations          | `apiext:VK_EXT_fragment_density_map`
3353endif::VK_EXT_fragment_density_map[]
3354ifdef::VK_EXT_fragment_density_map2[]
3355| basetype:VkBool32        | pname:subsampledLoads                           | `apiext:VK_EXT_fragment_density_map2`
3356| basetype:VkBool32        | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2`
3357| code:uint32_t            | pname:maxSubsampledArrayLayers                  | `apiext:VK_EXT_fragment_density_map2`
3358| code:uint32_t            | pname:maxDescriptorSetSubsampledSamplers        | `apiext:VK_EXT_fragment_density_map2`
3359endif::VK_EXT_fragment_density_map2[]
3360ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3361| code:uint32_t            | pname:maxGeometryCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
3362| code:uint32_t            | pname:maxInstanceCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
3363endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3364ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3365| code:uint32_t            | pname:shaderGroupHandleSize                    | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
3366| code:uint32_t            | pname:maxShaderGroupStride                     | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
3367| code:uint32_t            | pname:shaderGroupBaseAlignment                 | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
3368endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3369ifdef::VK_NV_ray_tracing[]
3370| code:uint32_t            | pname:maxRecursionDepth                        | `apiext:VK_NV_ray_tracing`
3371| code:uint32_t            | pname:maxTriangleCount                         | `apiext:VK_NV_ray_tracing`
3372endif::VK_NV_ray_tracing[]
3373ifdef::VK_KHR_acceleration_structure[]
3374| code:uint32_t            | pname:maxPerStageDescriptorAccelerationStructures
3375                                                                            | `apiext:VK_KHR_acceleration_structure`
3376| code:uint32_t            | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
3377                                                                            | `apiext:VK_KHR_acceleration_structure`
3378endif::VK_KHR_acceleration_structure[]
3379ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3380| code:uint32_t            | pname:maxDescriptorSetAccelerationStructures   | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
3381endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3382ifdef::VK_KHR_acceleration_structure[]
3383| code:uint32_t            | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
3384                                                                            | `apiext:VK_KHR_acceleration_structure`
3385| code:uint32_t            | pname:minAccelerationStructureScratchOffsetAlignment
3386                                                                            | `apiext:VK_KHR_acceleration_structure`
3387endif::VK_KHR_acceleration_structure[]
3388ifdef::VK_KHR_ray_tracing_pipeline[]
3389| code:uint32_t            | pname:maxRayRecursionDepth                     | `apiext:VK_KHR_ray_tracing_pipeline`
3390| code:uint32_t            | pname:shaderGroupHandleCaptureReplaySize       | `apiext:VK_KHR_ray_tracing_pipeline`
3391| code:uint32_t            | pname:maxRayDispatchInvocationCount            | `apiext:VK_KHR_ray_tracing_pipeline`
3392| code:uint32_t            | pname:shaderGroupHandleAlignment               | `apiext:VK_KHR_ray_tracing_pipeline`
3393| code:uint32_t            | pname:maxRayHitAttributeSize                   | `apiext:VK_KHR_ray_tracing_pipeline`
3394endif::VK_KHR_ray_tracing_pipeline[]
3395ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3396| code:uint64_t            | pname:maxTimelineSemaphoreValueDifference      | `<<features-timelineSemaphore,pname:timelineSemaphore>>`
3397endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3398ifdef::VK_EXT_line_rasterization[]
3399| code:uint32_t            | pname:lineSubPixelPrecisionBits                | `apiext:VK_EXT_line_rasterization`
3400endif::VK_EXT_line_rasterization[]
3401ifdef::VK_EXT_custom_border_color[]
3402| code:uint32_t            | pname:maxCustomBorderColorSamplers             | `apiext:VK_EXT_custom_border_color`
3403endif::VK_EXT_custom_border_color[]
3404ifdef::VK_EXT_robustness2[]
3405| basetype:VkDeviceSize    | pname:robustStorageBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
3406| basetype:VkDeviceSize    | pname:robustUniformBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
3407endif::VK_EXT_robustness2[]
3408ifdef::VK_KHR_fragment_shading_rate[]
3409| 2 {times} code:uint32_t       | pname:minFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3410| 2 {times} code:uint32_t       | pname:maxFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3411| code:uint32_t                 | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3412| basetype:VkBool32             | pname:primitiveFragmentShadingRateWithMultipleViewports   | `<<features-primitiveFragmentShadingRate,pname:primitiveFragmentShadingRate>>`
3413| basetype:VkBool32             | pname:layeredShadingRateAttachments                       | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3414| basetype:VkBool32             | pname:fragmentShadingRateNonTrivialCombinerOps            | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3415| 2 {times} code:uint32_t       | pname:maxFragmentSize                                     | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3416| code:uint32_t                 | pname:maxFragmentSizeAspectRatio                          | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3417| code:uint32_t                 | pname:maxFragmentShadingRateCoverageSamples               | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3418| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateRasterizationSamples          | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3419| basetype:VkBool32             | pname:fragmentShadingRateWithShaderDepthStencilWrites     | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3420| basetype:VkBool32             | pname:fragmentShadingRateWithSampleMask                   | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3421| basetype:VkBool32             | pname:fragmentShadingRateWithShaderSampleMask             | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3422| basetype:VkBool32             | pname:fragmentShadingRateWithConservativeRasterization    | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3423| basetype:VkBool32             | pname:fragmentShadingRateWithFragmentShaderInterlock      | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3424| basetype:VkBool32             | pname:fragmentShadingRateWithCustomSampleLocations        | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3425| basetype:VkBool32             | pname:fragmentShadingRateStrictMultiplyCombiner           | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3426endif::VK_KHR_fragment_shading_rate[]
3427ifdef::VK_NV_fragment_shading_rate_enums[]
3428| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateInvocationCount               | `<<features-supersampleFragmentShadingRates,pname:supersampleFragmentShadingRates>>`
3429endif::VK_NV_fragment_shading_rate_enums[]
3430ifdef::VK_HUAWEI_subpass_shading[]
3431| code:uint32_t                 | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading,pname:subpassShading>>`
3432endif::VK_HUAWEI_subpass_shading[]
3433|====
3434
3435[[limits-required]]
3436.Required Limits
3437[width="100%",cols="<35,<9,<14,<11",options="header"]
3438|====
3439| Limit | Unsupported Limit | Supported Limit | Limit Type^1^
3440| pname:maxImageDimension1D                  | - | 4096    | min
3441| pname:maxImageDimension2D                  | - | 4096    | min
3442| pname:maxImageDimension3D                  | - | 256     | min
3443| pname:maxImageDimensionCube                | - | 4096    | min
3444| pname:maxImageArrayLayers                  | - | 256     | min
3445| pname:maxTexelBufferElements               | - | 65536   | min
3446| pname:maxUniformBufferRange                | - | 16384   | min
3447| pname:maxStorageBufferRange                | - | 2^27^   | min
3448| pname:maxPushConstantsSize                 | - | 128     | min
3449| pname:maxMemoryAllocationCount             | - | 4096    | min
3450| pname:maxSamplerAllocationCount            | - | 4000    | min
3451| pname:bufferImageGranularity               | - | 131072  | max
3452| pname:sparseAddressSpaceSize               | 0 | 2^31^   | min
3453| pname:maxBoundDescriptorSets               | - | 4       | min
3454| pname:maxPerStageDescriptorSamplers        | - | 16      | min
3455| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | min
3456| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | min
3457| pname:maxPerStageDescriptorSampledImages   | - | 16      | min
3458| pname:maxPerStageDescriptorStorageImages   | - | 4       | min
3459| pname:maxPerStageDescriptorInputAttachments| - | 4       | min
3460| pname:maxPerStageResources                 | - | 128 ^2^ | min
3461| pname:maxDescriptorSetSamplers             | - | 96 ^8^  | min, _n_ {times} PerStage
3462| pname:maxDescriptorSetUniformBuffers       | - | 72 ^8^  | min, _n_ {times} PerStage
3463| pname:maxDescriptorSetUniformBuffersDynamic| - | 8       | min
3464| pname:maxDescriptorSetStorageBuffers       | - | 24 ^8^  | min, _n_ {times} PerStage
3465| pname:maxDescriptorSetStorageBuffersDynamic| - | 4       | min
3466| pname:maxDescriptorSetSampledImages        | - | 96 ^8^  | min, _n_ {times} PerStage
3467| pname:maxDescriptorSetStorageImages        | - | 24 ^8^  | min, _n_ {times} PerStage
3468| pname:maxDescriptorSetInputAttachments     | - | 4       | min
3469| pname:maxVertexInputAttributes             | - | 16      | min
3470ifndef::VK_KHR_portability_subset[]
3471| pname:maxVertexInputBindings               | - | 16      | min
3472endif::VK_KHR_portability_subset[]
3473ifdef::VK_KHR_portability_subset[]
3474| pname:maxVertexInputBindings               | - | 16 ^10^ | min
3475endif::VK_KHR_portability_subset[]
3476| pname:maxVertexInputAttributeOffset        | - | 2047    | min
3477| pname:maxVertexInputBindingStride          | - | 2048    | min
3478| pname:maxVertexOutputComponents            | - | 64      | min
3479| pname:maxTessellationGenerationLevel       | 0 | 64      | min
3480| pname:maxTessellationPatchSize             | 0 | 32      | min
3481| pname:maxTessellationControlPerVertexInputComponents  | 0 |64 | min
3482| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min
3483| pname:maxTessellationControlPerPatchOutputComponents  | 0 |120 | min
3484| pname:maxTessellationControlTotalOutputComponents     | 0 |2048 | min
3485| pname:maxTessellationEvaluationInputComponents        | 0 |64 | min
3486| pname:maxTessellationEvaluationOutputComponents       | 0 |64 | min
3487| pname:maxGeometryShaderInvocations         | 0 | 32      | min
3488| pname:maxGeometryInputComponents           | 0 | 64      | min
3489| pname:maxGeometryOutputComponents          | 0 | 64      | min
3490| pname:maxGeometryOutputVertices            | 0 | 256     | min
3491| pname:maxGeometryTotalOutputComponents     | 0 | 1024    | min
3492| pname:maxFragmentInputComponents           | - | 64      | min
3493| pname:maxFragmentOutputAttachments         | - | 4       | min
3494| pname:maxFragmentDualSrcAttachments        | 0 | 1       | min
3495| pname:maxFragmentCombinedOutputResources   | - | 4       | min
3496| pname:maxComputeSharedMemorySize           | - | 16384   | min
3497| pname:maxComputeWorkGroupCount             | - | (65535,65535,65535) | min
3498| pname:maxComputeWorkGroupInvocations       | - | 128     | min
3499| pname:maxComputeWorkGroupSize              | - | (128,128,64) | min
3500| pname:subPixelPrecisionBits                | - | 4       | min
3501| pname:subTexelPrecisionBits                | - | 4       | min
3502| pname:mipmapPrecisionBits                  | - | 4       | min
3503| pname:maxDrawIndexedIndexValue             | 2^24^-1 | 2^32^-1 | min
3504| pname:maxDrawIndirectCount                 | 1 | 2^16^-1 | min
3505| pname:maxSamplerLodBias                    | - | 2       | min
3506| pname:maxSamplerAnisotropy                 | 1 | 16      | min
3507| pname:maxViewports                         | 1 | 16      | min
3508| pname:maxViewportDimensions                | - | (4096,4096) ^3^  | min
3509| pname:viewportBoundsRange                  | - | (-8192,8191) ^4^ | (max,min)
3510| pname:viewportSubPixelBits                 | - | 0   | min
3511| pname:minMemoryMapAlignment                | - | 64  | min
3512| pname:minTexelBufferOffsetAlignment        | - | 256 | max
3513| pname:minUniformBufferOffsetAlignment      | - | 256 | max
3514| pname:minStorageBufferOffsetAlignment      | - | 256 | max
3515| pname:minTexelOffset                       | - | -8  | max
3516| pname:maxTexelOffset                       | - | 7   | min
3517| pname:minTexelGatherOffset                 | 0 | -8  | max
3518| pname:maxTexelGatherOffset                 | 0 | 7   | min
3519| pname:minInterpolationOffset               |0.0| -0.5 ^5^ | max
3520| pname:maxInterpolationOffset               |0.0| 0.5 - (1 ULP) ^5^ | min
3521| pname:subPixelInterpolationOffsetBits      | 0 | 4 ^5^ | min
3522| pname:maxFramebufferWidth                  | - | 4096  | min
3523| pname:maxFramebufferHeight                 | - | 4096  | min
3524| pname:maxFramebufferLayers                 | - | 256   | min
3525| pname:framebufferColorSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3526ifdef::VK_VERSION_1_2[]
3527| pname:framebufferIntegerColorSampleCounts  | - | (ename:VK_SAMPLE_COUNT_1_BIT)                                | min
3528endif::VK_VERSION_1_2[]
3529| pname:framebufferDepthSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3530| pname:framebufferStencilSampleCounts       | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3531| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3532| pname:maxColorAttachments                  | - | 4     | min
3533| pname:sampledImageColorSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3534| pname:sampledImageIntegerSampleCounts      | - | ename:VK_SAMPLE_COUNT_1_BIT                                  | min
3535| pname:sampledImageDepthSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3536| pname:sampledImageStencilSampleCounts      | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3537| pname:storageImageSampleCounts             | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3538| pname:maxSampleMaskWords                   | - | 1     | min
3539| pname:timestampComputeAndGraphics          | - | -     |implementation-dependent
3540| pname:timestampPeriod                      | - | -     |duration
3541| pname:maxClipDistances                     | 0 | 8     | min
3542| pname:maxCullDistances                     | 0 | 8     | min
3543| pname:maxCombinedClipAndCullDistances      | 0 | 8     | min
3544| pname:discreteQueuePriorities              | - | 2     | min
3545| pname:pointSizeRange                       | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min)
3546| pname:lineWidthRange                       | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min)
3547| pname:pointSizeGranularity                 |  0.0 | 1.0 ^6^ | max, fixed point increment
3548| pname:lineWidthGranularity                 |  0.0 | 1.0 ^7^ | max, fixed point increment
3549| pname:strictLines                          | - | -   | implementation-dependent
3550| pname:standardSampleLocations              | - | -   | implementation-dependent
3551| pname:optimalBufferCopyOffsetAlignment     | - | -   | recommendation
3552| pname:optimalBufferCopyRowPitchAlignment   | - | -   | recommendation
3553| pname:nonCoherentAtomSize                  | - | 256 | max
3554ifdef::VK_KHR_push_descriptor[]
3555| pname:maxPushDescriptors                   | - | 32  | min
3556endif::VK_KHR_push_descriptor[]
3557ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
3558| pname:maxMultiviewViewCount                | - |  6  | min
3559| pname:maxMultiviewInstanceIndex            | - |  2^27^-1  | min
3560endif::VK_VERSION_1_1,VK_KHR_multiview[]
3561ifdef::VK_EXT_discard_rectangles[]
3562| pname:maxDiscardRectangles                 | 0 | 4   | min
3563endif::VK_EXT_discard_rectangles[]
3564ifdef::VK_EXT_sample_locations[]
3565| pname:sampleLocationSampleCounts           | - | ename:VK_SAMPLE_COUNT_4_BIT | min
3566| pname:maxSampleLocationGridSize            | - | (1,1) | min
3567| pname:sampleLocationCoordinateRange        | - | (0.0, 0.9375) | (max,min)
3568| pname:sampleLocationSubPixelBits           | - | 4   | min
3569| pname:variableSampleLocations              | - |false| implementation-dependent
3570endif::VK_EXT_sample_locations[]
3571ifdef::VK_EXT_external_memory_host[]
3572| pname:minImportedHostPointerAlignment      | - | 65536 | max
3573endif::VK_EXT_external_memory_host[]
3574ifdef::VK_NVX_multiview_per_view_attributes[]
3575| pname:perViewPositionAllComponents         | - | -   | implementation-dependent
3576endif::VK_NVX_multiview_per_view_attributes[]
3577ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3578| pname:filterMinmaxSingleComponentFormats   | - | -   | implementation-dependent
3579| pname:filterMinmaxImageComponentMapping    | - | -   | implementation-dependent
3580endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3581ifdef::VK_EXT_blend_operation_advanced[]
3582| pname:advancedBlendMaxColorAttachments        | - | 1   | min
3583| pname:advancedBlendIndependentBlend           | - |false| implementation-dependent
3584| pname:advancedBlendNonPremultipliedSrcColor   | - |false| implementation-dependent
3585| pname:advancedBlendNonPremultipliedDstColor   | - |false| implementation-dependent
3586| pname:advancedBlendCorrelatedOverlap          | - |false| implementation-dependent
3587| pname:advancedBlendAllOperations              | - |false| implementation-dependent
3588endif::VK_EXT_blend_operation_advanced[]
3589ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
3590| pname:maxPerSetDescriptors                                | - |1024 | min
3591| pname:maxMemoryAllocationSize                             | - | 2^30^ | min
3592endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
3593ifdef::VK_KHR_maintenance4[]
3594| pname:maxBufferSize                                       | - | 2^30^ | min
3595endif::VK_KHR_maintenance4[]
3596ifdef::VK_EXT_conservative_rasterization[]
3597| pname:primitiveOverestimationSize                 | - |0.0   | min
3598| pname:maxExtraPrimitiveOverestimationSize         | - |0.0   | min
3599| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0   | min
3600| pname:primitiveUnderestimation                    | - |false | implementation-dependent
3601| pname:conservativePointAndLineRasterization       | - |false | implementation-dependent
3602| pname:degenerateTrianglesRasterized               | - |false | implementation-dependent
3603| pname:degenerateLinesRasterized                   | - |false | implementation-dependent
3604| pname:fullyCoveredFragmentShaderInputVariable     | - |false | implementation-dependent
3605| pname:conservativeRasterizationPostDepthCoverage  | - |false | implementation-dependent
3606endif::VK_EXT_conservative_rasterization[]
3607ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3608| pname:maxUpdateAfterBindDescriptorsInAllPools             | 0 |500000| min
3609| pname:shaderUniformBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
3610| pname:shaderSampledImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
3611| pname:shaderStorageBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
3612| pname:shaderStorageImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
3613| pname:shaderInputAttachmentArrayNonUniformIndexingNative  | - |false| implementation-dependent
3614| pname:maxPerStageDescriptorUpdateAfterBindSamplers        | 0^9^ |500000 ^9^ | min
3615| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | 0^9^ |12 ^9^ | min
3616| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | 0^9^ |500000 ^9^ | min
3617| pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | 0^9^ |500000 ^9^ | min
3618| pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | 0^9^ |500000 ^9^ | min
3619| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min
3620| pname:maxPerStageUpdateAfterBindResources                 | 0^9^ |500000 ^9^ | min
3621| pname:maxDescriptorSetUpdateAfterBindSamplers             | 0^9^ |500000 ^9^ | min
3622| pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage
3623| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min
3624| pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | 0^9^ |500000 ^9^ | min
3625| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min
3626| pname:maxDescriptorSetUpdateAfterBindSampledImages        | 0^9^ |500000 ^9^ | min
3627| pname:maxDescriptorSetUpdateAfterBindStorageImages        | 0^9^ |500000 ^9^ | min
3628| pname:maxDescriptorSetUpdateAfterBindInputAttachments     | 0^9^ |4 ^9^ | min
3629endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3630ifdef::VK_EXT_inline_uniform_block[]
3631| pname:maxInlineUniformBlockSize                               | - | 256   | min
3632| pname:maxPerStageDescriptorInlineUniformBlocks                | - | 4     | min
3633| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4     | min
3634| pname:maxDescriptorSetInlineUniformBlocks                     | - | 4     | min
3635| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      | - | 4     | min
3636endif::VK_EXT_inline_uniform_block[]
3637ifdef::VK_EXT_vertex_attribute_divisor[]
3638| pname:maxVertexAttribDivisor               | - | 2^16^-1   | min
3639endif::VK_EXT_vertex_attribute_divisor[]
3640ifdef::VK_NV_mesh_shader[]
3641| pname:maxDrawMeshTasksCount                | - | 2^16^-1   | min
3642| pname:maxTaskWorkGroupInvocations          | - | 32        | min
3643| pname:maxTaskWorkGroupSize                 | - | (32,1,1)  | min
3644| pname:maxTaskTotalMemorySize               | - | 16384     | min
3645| pname:maxTaskOutputCount                   | - | 2^16^-1   | min
3646| pname:maxMeshWorkGroupInvocations          | - | 32        | min
3647| pname:maxMeshWorkGroupSize                 | - | (32,1,1)  | min
3648| pname:maxMeshTotalMemorySize               | - | 16384     | min
3649| pname:maxMeshOutputVertices                | - | 256       | min
3650| pname:maxMeshOutputPrimitives              | - | 256       | min
3651| pname:maxMeshMultiviewViewCount            | - | 1         | min
3652| pname:meshOutputPerVertexGranularity       | - | -         | implementation-dependent
3653| pname:meshOutputPerPrimitiveGranularity    | - | -         | implementation-dependent
3654endif::VK_NV_mesh_shader[]
3655ifdef::VK_EXT_transform_feedback[]
3656| pname:maxTransformFeedbackStreams                         | - | 1         | min
3657| pname:maxTransformFeedbackBuffers                         | - | 1         | min
3658| pname:maxTransformFeedbackBufferSize                      | - | 2^27^     | min
3659| pname:maxTransformFeedbackStreamDataSize                  | - | 512       | min
3660| pname:maxTransformFeedbackBufferDataSize                  | - | 512       | min
3661| pname:maxTransformFeedbackBufferDataStride                | - | 512       | min
3662| pname:transformFeedbackQueries                            | - | false     | implementation-dependent
3663| pname:transformFeedbackStreamsLinesTriangles              | - | false     | implementation-dependent
3664| pname:transformFeedbackRasterizationStreamSelect          | - | false     | implementation-dependent
3665| pname:transformFeedbackDraw                               | - | false     | implementation-dependent
3666endif::VK_EXT_transform_feedback[]
3667ifdef::VK_EXT_fragment_density_map[]
3668| pname:minFragmentDensityTexelSize          | - | (1,1)  | min
3669| pname:maxFragmentDensityTexelSize          | - | (1,1)  | min
3670| pname:fragmentDensityInvocations           | - |  -     | implementation-dependent
3671endif::VK_EXT_fragment_density_map[]
3672ifdef::VK_EXT_fragment_density_map2[]
3673| pname:subsampledLoads                           | true  | false | implementation-dependent
3674| pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent
3675| pname:maxSubsampledArrayLayers                  | 2     | 2     | min
3676| pname:maxDescriptorSetSubsampledSamplers        | 1     | 1     | min
3677endif::VK_EXT_fragment_density_map2[]
3678ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3679ifdef::VK_NV_ray_tracing[]
3680| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16      | min
3681| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth     | - | 31      | min
3682endif::VK_NV_ray_tracing[]
3683ifdef::VK_KHR_ray_tracing_pipeline[]
3684| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32      | exact
3685| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth  | - | 1       | min
3686endif::VK_KHR_ray_tracing_pipeline[]
3687| pname:maxShaderGroupStride                     | - | 4096    | min
3688| pname:shaderGroupBaseAlignment                 | - | 64      | max
3689| pname:maxGeometryCount                         | - | 2^24^-1 | min
3690| pname:maxInstanceCount                         | - | 2^24^-1 | min
3691ifdef::VK_NV_ray_tracing[]
3692| pname:maxTriangleCount                         | - | 2^29^-1 | min
3693endif::VK_NV_ray_tracing[]
3694ifdef::VK_KHR_acceleration_structure[]
3695| pname:maxPrimitiveCount                        | - | 2^29^-1 | min
3696| pname:maxPerStageDescriptorAccelerationStructures                 | - | 16         | min
3697| pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures  | - | 500000 ^9^ | min
3698endif::VK_KHR_acceleration_structure[]
3699| pname:maxDescriptorSetAccelerationStructures                      | - | 16         | min
3700endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3701ifdef::VK_KHR_acceleration_structure[]
3702| pname:maxDescriptorSetUpdateAfterBindAccelerationStructures       | - | 500000 ^9^ | min
3703| pname:minAccelerationStructureScratchOffsetAlignment              | - | 256        | max
3704endif::VK_KHR_acceleration_structure[]
3705ifdef::VK_KHR_ray_tracing_pipeline[]
3706| pname:shaderGroupHandleCaptureReplaySize              | - | 64  | max
3707| pname:maxRayDispatchInvocationCount                   | - | 2^30^ | min
3708| pname:shaderGroupHandleAlignment                      | - | 32  | max
3709| pname:maxRayHitAttributeSize                          | - | 32  | min
3710endif::VK_KHR_ray_tracing_pipeline[]
3711ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3712| pname:maxTimelineSemaphoreValueDifference      | - | 2^31^-1 | min
3713endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3714ifdef::VK_EXT_line_rasterization[]
3715| pname:lineSubPixelPrecisionBits                | - | 4    | min
3716endif::VK_EXT_line_rasterization[]
3717ifdef::VK_NV_device_generated_commands[]
3718| pname:maxGraphicsShaderGroupCount               | - | 2^12^   | min
3719| pname:maxIndirectSequenceCount                  | - | 2^20^   | min
3720| pname:maxIndirectCommandsTokenCount             | - | 16     | min
3721| pname:maxIndirectCommandsStreamCount            | - | 16     | min
3722| pname:maxIndirectCommandsTokenOffset            | - | 2047   | min
3723| pname:maxIndirectCommandsStreamStride           | - | 2048   | min
3724| pname:minSequencesCountBufferOffsetAlignment    | - | 256    | max
3725| pname:minSequencesIndexBufferOffsetAlignment    | - | 256    | max
3726| pname:minIndirectCommandsBufferOffsetAlignment  | - | 256    | max
3727endif::VK_NV_device_generated_commands[]
3728ifdef::VK_EXT_custom_border_color[]
3729| pname:maxCustomBorderColorSamplers              | - | 32    | min
3730endif::VK_EXT_custom_border_color[]
3731ifdef::VK_EXT_robustness2[]
3732| pname:robustStorageBufferAccessSizeAlignment   | - | 4    | max
3733| pname:robustUniformBufferAccessSizeAlignment   | - | 256  | max
3734endif::VK_EXT_robustness2[]
3735ifdef::VK_KHR_fragment_shading_rate[]
3736| pname:minFragmentShadingRateAttachmentTexelSize           | (0,0) | (32,32) | max
3737| pname:maxFragmentShadingRateAttachmentTexelSize           | (0,0) | (8,8)   | min
3738| pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio |  0   |   1     | min
3739| pname:primitiveFragmentShadingRateWithMultipleViewports   | false | false   | implementation-dependent
3740| pname:layeredShadingRateAttachments                       | false | false   | implementation-dependent
3741| pname:fragmentShadingRateNonTrivialCombinerOps            |   -   | false   | implementation-dependent
3742| pname:maxFragmentSize                                     |   -   | (2,2)   | min
3743| pname:maxFragmentSizeAspectRatio                          |   -   | 2       | min
3744| pname:maxFragmentShadingRateCoverageSamples               |   -   | 16      | min
3745| pname:maxFragmentShadingRateRasterizationSamples          |   -   | ename:VK_SAMPLE_COUNT_4_BIT      | min
3746| pname:fragmentShadingRateWithShaderDepthStencilWrites     |   -   | false   | implementation-dependent
3747| pname:fragmentShadingRateWithSampleMask                   |   -   | false   | implementation-dependent
3748| pname:fragmentShadingRateWithShaderSampleMask             |   -   | false   | implementation-dependent
3749| pname:fragmentShadingRateWithConservativeRasterization    |   -   | false   | implementation-dependent
3750| pname:fragmentShadingRateWithFragmentShaderInterlock      |   -   | false   | implementation-dependent
3751| pname:fragmentShadingRateWithCustomSampleLocations        |   -   | false   | implementation-dependent
3752| pname:fragmentShadingRateStrictMultiplyCombiner           |   -   | false   | implementation-dependent
3753endif::VK_KHR_fragment_shading_rate[]
3754ifdef::VK_NV_fragment_shading_rate_enums[]
3755| pname:maxFragmentShadingRateInvocationCount               | - | ename:VK_SAMPLE_COUNT_4_BIT | min
3756endif::VK_NV_fragment_shading_rate_enums[]
3757ifdef::VK_HUAWEI_subpass_shading[]
3758| pname:maxSubpassShadingWorkgroupSizeAspectRatio |  0   |   1     | min
3759endif::VK_HUAWEI_subpass_shading[]
3760ifdef::VK_EXT_multi_draw[]
3761| pname:maxMultiDrawCount               | - | 1024 | min
3762endif::VK_EXT_multi_draw[]
3763|====
3764
37651::
3766    The *Limit Type* column specifies the limit is either the minimum limit
3767    all implementations must: support, the maximum limit all implementations
3768    must: support, or the exact value all implementations must: support.
3769    For bitmasks a minimum limit is the least bits all implementations must:
3770    set, but they may: have additional bits set beyond this minimum.
3771
37722::
3773    The pname:maxPerStageResources must: be at least the smallest of the
3774    following:
3775+
3776  * the sum of the pname:maxPerStageDescriptorUniformBuffers,
3777    pname:maxPerStageDescriptorStorageBuffers,
3778    pname:maxPerStageDescriptorSampledImages,
3779    pname:maxPerStageDescriptorStorageImages,
3780    pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments
3781    limits, or
3782  * 128.
3783+
3784It may: not be possible to reach this limit in every stage.
3785
37863::
3787    See <<limits-maxViewportDimensions,pname:maxViewportDimensions>> for the
3788    required: relationship to other limits.
3789
37904::
3791    See <<limits-viewportboundsrange,pname:viewportBoundsRange>> for the
3792    required: relationship to other limits.
3793
37945::
3795    The values pname:minInterpolationOffset and pname:maxInterpolationOffset
3796    describe the closed interval of supported interpolation offsets:
3797    [pname:minInterpolationOffset, pname:maxInterpolationOffset].
3798    The ULP is determined by pname:subPixelInterpolationOffsetBits.
3799    If pname:subPixelInterpolationOffsetBits is 4, this provides increments
3800    of (1/2^4^) = 0.0625, and thus the range of supported interpolation
3801    offsets would be [eq]#[-0.5, 0.4375]#.
3802
38036::
3804    The point size ULP is determined by pname:pointSizeGranularity.
3805    If the pname:pointSizeGranularity is 0.125, the range of supported point
3806    sizes must: be at least [1.0, 63.875].
3807
38087::
3809    The line width ULP is determined by pname:lineWidthGranularity.
3810    If the pname:lineWidthGranularity is 0.0625, the range of supported line
3811    widths must: be at least [1.0, 7.9375].
3812
38138::
3814    The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding
3815    _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is
3816    the number of shader stages supported by the slink:VkPhysicalDevice.
3817    If all shader stages are supported, _n_ = 6 (vertex, tessellation
3818    control, tessellation evaluation, geometry, fragment, compute).
3819
3820ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
38219::
3822    The ptext:UpdateAfterBind descriptor limits must: each be greater than
3823    or equal to the corresponding ptext:non-UpdateAfterBind limit.
3824endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3825
3826ifdef::VK_KHR_portability_subset[]
382710::
3828     If the `apiext:VK_KHR_portability_subset` extension is enabled, the
3829     required minimum value of pname:maxVertexInputBindings is code:8.
3830endif::VK_KHR_portability_subset[]
3831
3832
3833ifdef::VK_EXT_sample_locations[]
3834
3835[[limits-multisample]]
3836== Additional Multisampling Capabilities
3837
3838[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos']
3839--
3840To query additional multisampling capabilities which may: be supported for a
3841specific sample count, beyond the minimum capabilities described for
3842<<limits, Limits>> above, call:
3843
3844include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
3845
3846  * pname:physicalDevice is the physical device from which to query the
3847    additional multisampling capabilities.
3848  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
3849    sample count to query capabilities for.
3850  * pname:pMultisampleProperties is a pointer to a
3851    slink:VkMultisamplePropertiesEXT structure in which information about
3852    additional multisampling capabilities specific to the sample count is
3853    returned.
3854
3855include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
3856--
3857
3858[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
3859--
3860The sname:VkMultisamplePropertiesEXT structure is defined as
3861
3862include::{generated}/api/structs/VkMultisamplePropertiesEXT.txt[]
3863
3864  * pname:sType is the type of this structure.
3865  * pname:pNext is `NULL` or a pointer to a structure extending this
3866    structure.
3867  * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
3868    which sample locations can: vary.
3869
3870include::{generated}/validity/structs/VkMultisamplePropertiesEXT.txt[]
3871--
3872
3873If the sample count for which additional multisampling capabilities are
3874requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set
3875in sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
3876<<limits-sampleLocationSampleCounts, pname:sampleLocationSampleCounts>> the
3877pname:width and pname:height members of
3878sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be
3879greater than or equal to the corresponding members of
3880sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
3881<<limits-maxSampleLocationGridSize,pname:maxSampleLocationGridSize>>,
3882respectively, otherwise both members must: be `0`.
3883endif::VK_EXT_sample_locations[]
3884
3885// If you are adding a new features structure, it must be placed at the end
3886// of the previous section (immediately before [[limits-multisample]]).
3887