• 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 draw 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 that specifies the color sample counts that are
676    supported 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 which specifies that conservative
2037    rasterization is enabled and the fragment area is fully covered by the
2038    generating 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 buffers).
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::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
2417:refpage: VkPhysicalDeviceRayTracingPropertiesNV
2418include::{chapters}/limits.txt[tag=limits_desc]
2419
2420ifdef::VK_KHR_ray_tracing_pipeline[]
2421Limits specified by this structure must: match those specified with the same
2422name in slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR and
2423slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR.
2424endif::VK_KHR_ray_tracing_pipeline[]
2425
2426include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[]
2427--
2428endif::VK_NV_ray_tracing[]
2429
2430ifdef::VK_KHR_acceleration_structure[]
2431[open,refpage='VkPhysicalDeviceAccelerationStructurePropertiesKHR',desc='Properties of the physical device for acceleration structure',type='structs']
2432--
2433The sname:VkPhysicalDeviceAccelerationStructurePropertiesKHR structure is
2434defined as:
2435
2436include::{generated}/api/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[]
2437
2438  * pname:sType is the type of this structure.
2439  * pname:pNext is `NULL` or a pointer to a structure extending this
2440    structure.
2441  * pname:maxGeometryCount is the maximum number of geometries in the bottom
2442    level acceleration structure.
2443  * pname:maxInstanceCount is the maximum number of instances in the top
2444    level acceleration structure.
2445  * pname:maxPrimitiveCount is the maximum number of triangles or AABBs in
2446    all geometries in the bottom level acceleration structure.
2447  * [[limits-maxPerStageDescriptorAccelerationStructures]]
2448    pname:maxPerStageDescriptorAccelerationStructures is the maximum number
2449    of acceleration structure bindings that can: be accessible to a single
2450    shader stage in a pipeline layout.
2451    Descriptor bindings with a descriptor type of
2452    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
2453    limit.
2454    Only descriptor bindings in descriptor set layouts created without the
2455    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2456    count against this limit.
2457  * [[limits-maxPerStageDescriptorUpdateAfterBindAccelerationStructures]]
2458    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures is
2459    similar to pname:maxPerStageDescriptorAccelerationStructures but counts
2460    descriptor bindings from descriptor sets created with or without the
2461    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2462    set.
2463  * [[limits-maxDescriptorSetAccelerationStructures]]
2464    pname:maxDescriptorSetAccelerationStructures is the maximum number of
2465    acceleration structure descriptors that can: be included in descriptor
2466    bindings in a pipeline layout across all pipeline shader stages and
2467    descriptor set numbers.
2468    Descriptor bindings with a descriptor type of
2469    ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR count against this
2470    limit.
2471    Only descriptor bindings in descriptor set layouts created without the
2472    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
2473    count against this limit.
2474  * [[limits-maxDescriptorSetUpdateAfterBindAccelerationStructures]]
2475    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures is similar
2476    to pname:maxDescriptorSetAccelerationStructures but counts descriptor
2477    bindings from descriptor sets created with or without the
2478    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit
2479    set.
2480  * [[limits-minAccelerationStructureScratchOffsetAlignment]]
2481    pname:minAccelerationStructureScratchOffsetAlignment is the minimum
2482    required: alignment, in bytes, for scratch data passed in to an
2483    acceleration structure build command.
2484
2485:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR
2486include::{chapters}/limits.txt[tag=limits_desc]
2487
2488ifdef::VK_NV_ray_tracing[]
2489Limits specified by this structure must: match those specified with the same
2490name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
2491endif::VK_NV_ray_tracing[]
2492
2493include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructurePropertiesKHR.txt[]
2494--
2495endif::VK_KHR_acceleration_structure[]
2496
2497ifdef::VK_KHR_ray_tracing_pipeline[]
2498[open,refpage='VkPhysicalDeviceRayTracingPipelinePropertiesKHR',desc='Properties of the physical device for ray tracing',type='structs']
2499--
2500The sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR structure is
2501defined as:
2502
2503include::{generated}/api/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[]
2504
2505  * pname:sType is the type of this structure.
2506  * pname:pNext is `NULL` or a pointer to a structure extending this
2507    structure.
2508  * pname:shaderGroupHandleSize is the size in bytes of the shader header.
2509  * [[limits-maxRayRecursionDepth]] pname:maxRayRecursionDepth is the
2510    maximum number of levels of ray recursion allowed in a trace command.
2511  * pname:maxShaderGroupStride is the maximum stride in bytes allowed
2512    between shader groups in the shader binding table.
2513  * pname:shaderGroupBaseAlignment is the required: alignment in bytes for
2514    the base of the shader binding table.
2515  * pname:shaderGroupHandleCaptureReplaySize is the number of bytes for the
2516    information required to do capture and replay for shader group handles.
2517  * pname:maxRayDispatchInvocationCount is the maximum number of ray
2518    generation shader invocations which may: be produced by a single
2519    flink:vkCmdTraceRaysIndirectKHR or flink:vkCmdTraceRaysKHR command.
2520  * pname:shaderGroupHandleAlignment is the required: alignment in bytes for
2521    each shader binding table entry.
2522  * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray
2523    attribute structure
2524
2525:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR
2526include::{chapters}/limits.txt[tag=limits_desc]
2527
2528ifdef::VK_NV_ray_tracing[]
2529Limits specified by this structure must: match those specified with the same
2530name in slink:VkPhysicalDeviceRayTracingPropertiesNV.
2531endif::VK_NV_ray_tracing[]
2532
2533include::{generated}/validity/structs/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.txt[]
2534--
2535endif::VK_KHR_ray_tracing_pipeline[]
2536
2537ifdef::VK_NV_cooperative_matrix[]
2538[open,refpage='VkPhysicalDeviceCooperativeMatrixPropertiesNV',desc='Structure describing cooperative matrix properties supported by an implementation',type='structs']
2539--
2540The sname:VkPhysicalDeviceCooperativeMatrixPropertiesNV structure is defined
2541as:
2542
2543include::{generated}/api/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
2544
2545  * pname:sType is the type of this structure.
2546  * pname:pNext is `NULL` or a pointer to a structure extending this
2547    structure.
2548  * [[limits-cooperativeMatrixSupportedStages]]
2549    pname:cooperativeMatrixSupportedStages is a bitfield of
2550    elink:VkShaderStageFlagBits describing the shader stages that
2551    cooperative matrix instructions are supported in.
2552    pname:cooperativeMatrixSupportedStages will have the
2553    ename:VK_SHADER_STAGE_COMPUTE_BIT bit set if any of the physical
2554    device's queues support ename:VK_QUEUE_COMPUTE_BIT.
2555
2556:refpage: VkPhysicalDeviceCooperativeMatrixPropertiesNV
2557include::{chapters}/limits.txt[tag=limits_desc]
2558
2559include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
2560--
2561endif::VK_NV_cooperative_matrix[]
2562
2563ifdef::VK_NV_shader_sm_builtins[]
2564[open,refpage='VkPhysicalDeviceShaderSMBuiltinsPropertiesNV',desc='Structure describing shader SM Builtins properties supported by an implementation',type='structs']
2565--
2566The sname:VkPhysicalDeviceShaderSMBuiltinsPropertiesNV structure is defined
2567as:
2568
2569include::{generated}/api/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
2570
2571  * pname:sType is the type of this structure.
2572  * pname:pNext is `NULL` or a pointer to a structure extending this
2573    structure.
2574  * [[limits-shaderSMCount]] pname:shaderSMCount is the number of SMs on the
2575    device.
2576  * [[limits-shaderWarpsPerSM]] pname:shaderWarpsPerSM is the maximum number
2577    of simultaneously executing warps on an SM.
2578
2579:refpage: VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
2580include::{chapters}/limits.txt[tag=limits_desc]
2581
2582include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
2583--
2584endif::VK_NV_shader_sm_builtins[]
2585
2586ifdef::VK_EXT_texel_buffer_alignment[]
2587[open,refpage='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs']
2588--
2589The sname:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT structure is
2590defined as:
2591
2592include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
2593
2594  * pname:sType is the type of this structure.
2595  * pname:pNext is `NULL` or a pointer to a structure extending this
2596    structure.
2597  * [[limits-storageTexelBufferOffsetAlignmentBytes]]
2598    pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is
2599    sufficient for a storage texel buffer of any format.
2600  * [[limits-storageTexelBufferOffsetSingleTexelAlignment]]
2601    pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether
2602    single texel alignment is sufficient for a storage texel buffer of any
2603    format.
2604  * [[limits-uniformTexelBufferOffsetAlignmentBytes]]
2605    pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is
2606    sufficient for a uniform texel buffer of any format.
2607  * [[limits-uniformTexelBufferOffsetSingleTexelAlignment]]
2608    pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether
2609    single texel alignment is sufficient for a uniform texel buffer of any
2610    format.
2611
2612:refpage: VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
2613include::{chapters}/limits.txt[tag=limits_desc]
2614
2615If the single texel alignment property is ename:VK_FALSE, then the buffer
2616view's offset must: be aligned to the corresponding byte alignment value.
2617If the single texel alignment property is ename:VK_TRUE, then the buffer
2618view's offset must: be aligned to the lesser of the corresponding byte
2619alignment value or the size of a single texel, based on
2620slink:VkBufferViewCreateInfo::pname:format.
2621If the size of a single texel is a multiple of three bytes, then the size of
2622a single component of the format is used instead.
2623
2624These limits must: not advertise a larger alignment than the
2625<<limits-required,required>> maximum minimum value of
2626slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment, for any
2627format that supports use as a texel buffer.
2628
2629include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
2630--
2631endif::VK_EXT_texel_buffer_alignment[]
2632
2633ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
2634[open,refpage='VkPhysicalDeviceTimelineSemaphoreProperties',desc='Structure describing timeline semaphore properties that can be supported by an implementation',type='structs',alias='VkPhysicalDeviceTimelineSemaphorePropertiesKHR']
2635--
2636The sname:VkPhysicalDeviceTimelineSemaphoreProperties structure is defined
2637as:
2638
2639include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
2640
2641ifdef::VK_KHR_timeline_semaphore[]
2642or the equivalent
2643
2644include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.txt[]
2645endif::VK_KHR_timeline_semaphore[]
2646
2647  * pname:sType is the type of this structure.
2648  * pname:pNext is `NULL` or a pointer to a structure extending this
2649    structure.
2650
2651// Must have preceding whitespace
2652ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
2653ifndef::VK_VERSION_1_2[:anchor-prefix:]
2654// tag::VK_KHR_timeline_semaphore-properties[]
2655  * [[{anchor-prefix}limits-maxTimelineSemaphoreValueDifference]]
2656    pname:maxTimelineSemaphoreValueDifference indicates the maximum
2657    difference allowed by the implementation between the current value of a
2658    timeline semaphore and any pending signal or wait operations.
2659// end::VK_KHR_timeline_semaphore-properties[]
2660
2661:refpage: VkPhysicalDeviceTimelineSemaphoreProperties
2662include::{chapters}/limits.txt[tag=limits_desc]
2663
2664include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
2665--
2666endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
2667
2668ifdef::VK_EXT_line_rasterization[]
2669[open,refpage='VkPhysicalDeviceLineRasterizationPropertiesEXT',desc='Structure describing line rasterization properties supported by an implementation',type='structs']
2670--
2671The sname:VkPhysicalDeviceLineRasterizationPropertiesEXT structure is
2672defined as:
2673
2674include::{generated}/api/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
2675
2676  * pname:sType is the type of this structure.
2677  * pname:pNext is `NULL` or a pointer to a structure extending this
2678    structure.
2679  * [[limits-lineSubPixelPrecisionBits]] pname:lineSubPixelPrecisionBits is
2680    the number of bits of subpixel precision in framebuffer coordinates
2681    [eq]#x~f~# and [eq]#y~f~# when rasterizing <<primsrast-lines,line
2682    segments>>.
2683
2684:refpage: VkPhysicalDeviceLineRasterizationPropertiesEXT
2685include::{chapters}/limits.txt[tag=limits_desc]
2686
2687include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
2688--
2689endif::VK_EXT_line_rasterization[]
2690
2691ifdef::VK_EXT_robustness2[]
2692[open,refpage='VkPhysicalDeviceRobustness2PropertiesEXT',desc='Structure describing robust buffer access properties supported by an implementation',type='structs']
2693--
2694The sname:VkPhysicalDeviceRobustness2PropertiesEXT structure is defined as:
2695
2696include::{generated}/api/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
2697
2698  * pname:sType is the type of this structure.
2699  * pname:pNext is `NULL` or a pointer to a structure extending this
2700    structure.
2701  * [[limits-robustStorageBufferAccessSizeAlignment]]
2702    pname:robustStorageBufferAccessSizeAlignment is the number of bytes that
2703    the range of a storage buffer descriptor is rounded up to when used for
2704    bounds-checking when
2705    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
2706    This value is either 1 or 4.
2707  * [[limits-robustUniformBufferAccessSizeAlignment]]
2708    pname:robustUniformBufferAccessSizeAlignment is the number of bytes that
2709    the range of a uniform buffer descriptor is rounded up to when used for
2710    bounds-checking when
2711    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
2712    This value is a power of two in the range [1, 256].
2713
2714:refpage: VkPhysicalDeviceRobustness2PropertiesEXT
2715include::{chapters}/limits.txt[tag=limits_desc]
2716
2717include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
2718--
2719endif::VK_EXT_robustness2[]
2720
2721ifdef::VK_NV_device_generated_commands[]
2722[open,refpage='VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
2723--
2724The sname:VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV structure is
2725defined as:
2726
2727include::{generated}/api/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
2728
2729  * pname:sType is the type of this structure.
2730  * pname:pNext is `NULL` or a pointer to a structure extending this
2731    structure.
2732  * pname:maxGraphicsShaderGroupCount is the maximum number of shader groups
2733    in slink:VkGraphicsPipelineShaderGroupsCreateInfoNV.
2734  * pname:maxIndirectSequenceCount is the maximum number of sequences in
2735    slink:VkGeneratedCommandsInfoNV and in
2736    slink:VkGeneratedCommandsMemoryRequirementsInfoNV.
2737  * pname:maxIndirectCommandsLayoutTokenCount is the maximum number of
2738    tokens in slink:VkIndirectCommandsLayoutCreateInfoNV.
2739  * pname:maxIndirectCommandsStreamCount is the maximum number of streams in
2740    slink:VkIndirectCommandsLayoutCreateInfoNV.
2741  * pname:maxIndirectCommandsTokenOffset is the maximum offset in
2742    sname:VkIndirectCommandsLayoutTokenNV.
2743  * pname:maxIndirectCommandsStreamStride is the maximum stream stride in
2744    slink:VkIndirectCommandsLayoutCreateInfoNV.
2745  * pname:minSequenceCountBufferOffsetAlignment is the minimum alignment for
2746    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
2747  * pname:minSequenceIndexBufferOffsetAlignment is the minimum alignment for
2748    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
2749  * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment
2750    for memory addresses used in sname:VkIndirectCommandsStreamNV, and as
2751    preprocess buffer in sname:VkGeneratedCommandsInfoNV.
2752
2753:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
2754include::{chapters}/limits.txt[tag=limits_desc]
2755
2756include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
2757--
2758
2759endif::VK_NV_device_generated_commands[]
2760
2761ifdef::VK_KHR_portability_subset[]
2762[open,refpage='VkPhysicalDevicePortabilitySubsetPropertiesKHR',desc='Structure describing additional properties supported by a portable implementation',type='structs']
2763--
2764The sname:VkPhysicalDevicePortabilitySubsetPropertiesKHR structure is
2765defined as:
2766
2767include::{generated}/api/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
2768
2769  * pname:sType is the type of this structure.
2770  * pname:pNext is `NULL` or a pointer to a structure extending this
2771    structure.
2772  * [[limits-minVertexInputBindingStrideAlignment]]
2773    pname:minVertexInputBindingStrideAlignment indicates the minimum
2774    alignment for vertex input strides.
2775    slink:VkVertexInputBindingDescription::pname:stride must: be a multiple
2776    of, and at least as large as, this value.
2777
2778:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR
2779include::{chapters}/limits.txt[tag=limits_desc]
2780
2781include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
2782--
2783endif::VK_KHR_portability_subset[]
2784
2785
2786ifdef::VK_KHR_fragment_shading_rate[]
2787[open,refpage='VkPhysicalDeviceFragmentShadingRatePropertiesKHR',desc='Structure describing variable fragment shading rate limits that can be supported by an implementation',type='structs']
2788--
2789The sname:VkPhysicalDeviceFragmentShadingRatePropertiesKHR structure is
2790defined as:
2791
2792include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
2793
2794  * pname:sType is the type of this structure.
2795  * pname:pNext is `NULL` or a pointer to a structure extending this
2796    structure.
2797  * [[limits-minFragmentShadingRateAttachmentTexelSize]]
2798    pname:minFragmentShadingRateAttachmentTexelSize indicates minimum
2799    supported width and height of the portion of the framebuffer
2800    corresponding to each texel in a fragment shading rate attachment.
2801    Each value must: be less than or equal to the values in
2802    pname:maxFragmentShadingRateAttachmentTexelSize.
2803    Each value must: be a power-of-two.
2804    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
2805    pname:attachmentFragmentShadingRate>> feature is not supported.
2806  * [[limits-maxFragmentShadingRateAttachmentTexelSize]]
2807    pname:maxFragmentShadingRateAttachmentTexelSize indicates maximum
2808    supported width and height of the portion of the framebuffer
2809    corresponding to each texel in a fragment shading rate attachment.
2810    Each value must: be greater than or equal to the values in
2811    pname:minFragmentShadingRateAttachmentTexelSize.
2812    Each value must: be a power-of-two.
2813    It must: be [eq]#(0,0)# if the <<features-attachmentFragmentShadingRate,
2814    pname:attachmentFragmentShadingRate>> feature is not supported.
2815  * [[limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio]]
2816    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio indicates the
2817    maximum ratio between the width and height of the portion of the
2818    framebuffer corresponding to each texel in a fragment shading rate
2819    attachment.
2820    pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio must: be a
2821    power-of-two value, and must: be less than or equal to
2822    [eq]#max(pname:maxFragmentShadingRateAttachmentTexelSize.width /
2823    pname:minFragmentShadingRateAttachmentTexelSize.height,
2824    pname:maxFragmentShadingRateAttachmentTexelSize.height /
2825    pname:minFragmentShadingRateAttachmentTexelSize.width)#.
2826    It must: be 0 if the <<features-attachmentFragmentShadingRate,
2827    pname:attachmentFragmentShadingRate>> feature is not supported.
2828  * [[limits-primitiveFragmentShadingRateWithMultipleViewports]]
2829    pname:primitiveFragmentShadingRateWithMultipleViewports specifies
2830    whether the <<primsrast-fragment-shading-rate-primitive,primitive
2831    fragment shading rate>> can: be used when multiple viewports are used.
2832    If this value is ename:VK_FALSE, only a single viewport must: be used,
2833    and applications must: not write to the
2834ifdef::VK_NV_viewport_array2[]
2835    code:ViewportMaskNV or
2836endif::VK_NV_viewport_array2[]
2837    code:ViewportIndex built-in when setting code:PrimitiveShadingRateKHR.
2838    It must: be ename:VK_FALSE if
2839ifdef::VK_VERSION_1_2[]
2840    the <<features-shaderOutputViewportIndex,
2841    pname:shaderOutputViewportIndex>> feature,
2842endif::VK_VERSION_1_2[]
2843ifdef::VK_EXT_shader_viewport_index_layer[]
2844    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
2845endif::VK_EXT_shader_viewport_index_layer[]
2846ifdef::VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
2847    the <<features-geometryShader, pname:geometryShader>> feature is not
2848    supported, or if the <<features-primitiveFragmentShadingRate,
2849    pname:primitiveFragmentShadingRate>> feature is not supported.
2850  * [[limits-layeredShadingRateAttachments]]
2851    pname:layeredShadingRateAttachments specifies whether a shading rate
2852    attachment image view can: be created with multiple layers.
2853    If this value is ename:VK_FALSE, when creating an image view with a
2854    pname:usage that includes
2855    ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
2856    pname:layerCount must: be `1`.
2857    It must: be ename:VK_FALSE if
2858ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
2859    the <<features-multiview,pname:multiview>> feature,
2860endif::VK_VERSION_1_1,VK_KHR_multiview[]
2861ifdef::VK_VERSION_1_2[]
2862    the <<features-shaderOutputViewportIndex,
2863    pname:shaderOutputViewportIndex>> feature,
2864endif::VK_VERSION_1_2[]
2865ifdef::VK_EXT_shader_viewport_index_layer[]
2866    the `apiext:VK_EXT_shader_viewport_index_layer` extension,
2867endif::VK_EXT_shader_viewport_index_layer[]
2868ifdef::VK_VERSION_1_1,VK_KHR_multiview,VK_VERSION_1_2,VK_EXT_shader_viewport_index_layer[or]
2869    the <<features-geometryShader, pname:geometryShader>> feature is not
2870    supported, or if the <<features-attachmentFragmentShadingRate,
2871    pname:attachmentFragmentShadingRate>> feature is not supported.
2872  * [[limits-fragmentShadingRateNonTrivialCombinerOps]]
2873    pname:fragmentShadingRateNonTrivialCombinerOps specifies whether
2874    elink:VkFragmentShadingRateCombinerOpKHR enums other than
2875    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or
2876    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR can: be used.
2877    It must: be ename:VK_FALSE unless either the
2878    <<features-primitiveFragmentShadingRate,
2879    pname:primitiveFragmentShadingRate>> or
2880    <<features-attachmentFragmentShadingRate,
2881    pname:attachmentFragmentShadingRate>> feature is supported.
2882  * [[limits-maxFragmentSize]] pname:maxFragmentSize indicates the maximum
2883    supported width and height of a fragment.
2884    Its pname:width and pname:height members must: both be power-of-two
2885    values.
2886    This limit is purely informational, and is not validated.
2887  * [[limits-maxFragmentSizeAspectRatio]] pname:maxFragmentSizeAspectRatio
2888    indicates the maximum ratio between the width and height of a fragment.
2889    pname:maxFragmentSizeAspectRatio must: be a power-of-two value, and
2890    must: be less than or equal to the maximum of the pname:width and
2891    pname:height members of pname:maxFragmentSize.
2892    This limit is purely informational, and is not validated.
2893  * [[limits-maxFragmentShadingRateCoverageSamples]]
2894    pname:maxFragmentShadingRateCoverageSamples specifies the maximum number
2895    of coverage samples supported in a single fragment.
2896    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
2897    to the product of the pname:width and pname:height members of
2898    pname:maxFragmentSize, and the sample count reported by
2899    pname:maxFragmentShadingRateRasterizationSamples.
2900    pname:maxFragmentShadingRateCoverageSamples must: be less than or equal
2901    to [eq]#pname:maxSampleMaskWords {times} 32# if
2902    pname:fragmentShadingRateWithShaderSampleMask is supported.
2903    This limit is purely informational, and is not validated.
2904  * [[limits-maxFragmentShadingRateRasterizationSamples]]
2905    pname:maxFragmentShadingRateRasterizationSamples is a
2906    elink:VkSampleCountFlagBits value specifying the maximum sample rate
2907    supported when a fragment covers multiple pixels.
2908    This limit is purely informational, and is not validated.
2909  * [[limits-fragmentShadingRateWithShaderDepthStencilWrites]]
2910    pname:fragmentShadingRateWithShaderDepthStencilWrites specifies whether
2911    the implementation supports writing code:FragDepth
2912ifdef::VK_EXT_shader_stencil_export[]
2913    or code:FragStencilRefEXT
2914endif::VK_EXT_shader_stencil_export[]
2915    from a fragment shader for multi-pixel fragments.
2916    If this value is ename:VK_FALSE, writing to those built-ins will clamp
2917    the fragment shading rate to [eq]#(1,1)#.
2918  * [[limits-fragmentShadingRateWithSampleMask]]
2919    pname:fragmentShadingRateWithSampleMask specifies whether the the
2920    implementation supports setting valid bits of
2921    slink:VkPipelineMultisampleStateCreateInfo::pname:pSampleMask to `0` for
2922    multi-pixel fragments.
2923    If this value is ename:VK_FALSE, zeroing valid bits in the sample mask
2924    will clamp the fragment shading rate to [eq]#(1,1)#.
2925  * [[limits-fragmentShadingRateWithShaderSampleMask]]
2926    pname:fragmentShadingRateWithShaderSampleMask specifies whether the
2927    implementation supports reading or writing code:SampleMask for
2928    multi-pixel fragments.
2929    If this value is ename:VK_FALSE, using that built-in will clamp the
2930    fragment shading rate to [eq]#(1,1)#.
2931  * [[limits-fragmentShadingRateWithConservativeRasterization]]
2932    pname:fragmentShadingRateWithConservativeRasterization
2933ifndef::VK_EXT_conservative_rasterization[]
2934    is reserved for future use.
2935endif::VK_EXT_conservative_rasterization[]
2936ifdef::VK_EXT_conservative_rasterization[]
2937    specifies whether <<primsrast-conservativeraster, conservative
2938    rasterization>> is supported for multi-pixel fragments.
2939    It must: be ename:VK_FALSE if `apiext:VK_EXT_conservative_rasterization`
2940    is not supported.
2941    If this value is ename:VK_FALSE, using <<primsrast-conservativeraster,
2942    conservative rasterization>> will clamp the fragment shading rate to
2943    [eq]#(1,1)#.
2944endif::VK_EXT_conservative_rasterization[]
2945  * [[limits-fragmentShadingRateWithFragmentShaderInterlock]]
2946    pname:fragmentShadingRateWithFragmentShaderInterlock
2947ifndef::VK_EXT_fragment_shader_interlock[]
2948    is reserved for future use.
2949endif::VK_EXT_fragment_shader_interlock[]
2950ifdef::VK_EXT_fragment_shader_interlock[]
2951    specifies whether <<fragops-shader-interlock, fragment shader
2952    interlock>> is supported for multi-pixel fragments.
2953    It must: be ename:VK_FALSE if `apiext:VK_EXT_fragment_shader_interlock`
2954    is not supported.
2955    If this value is ename:VK_FALSE, using <<fragops-shader-interlock,
2956    fragment shader interlock>> will clamp the fragment shading rate to
2957    [eq]#(1,1)#.
2958endif::VK_EXT_fragment_shader_interlock[]
2959  * [[limits-fragmentShadingRateWithCustomSampleLocations]]
2960    pname:fragmentShadingRateWithCustomSampleLocations
2961ifndef::VK_EXT_sample_locations[]
2962    is reserved for future use.
2963endif::VK_EXT_sample_locations[]
2964ifdef::VK_EXT_sample_locations[]
2965    specifies whether <<primsrast-samplelocations, custom sample locations>>
2966    are supported for multi-pixel fragments.
2967    It must: be ename:VK_FALSE if `apiext:VK_EXT_sample_locations` is not
2968    supported.
2969    If this value is ename:VK_FALSE, using <<primsrast-samplelocations,
2970    custom sample locations>> will clamp the fragment shading rate to
2971    [eq]#(1,1)#.
2972endif::VK_EXT_sample_locations[]
2973  * [[limits-fragmentShadingRateStrictMultiplyCombiner]]
2974    pname:fragmentShadingRateStrictMultiplyCombiner specifies whether
2975    ename:VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a
2976    multiplication or not.
2977    Implementations where this value is ename:VK_FALSE will instead combine
2978    rates with an addition.
2979    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_FALSE,
2980    implementations must: report this as ename:VK_FALSE.
2981    If pname:fragmentShadingRateNonTrivialCombinerOps is ename:VK_TRUE,
2982    implementations should: report this as ename:VK_TRUE.
2983
2984[NOTE]
2985.Note
2986====
2987Multiplication of the combiner rates using the fragment width/height in
2988linear space is equivalent to an addition of those values in log2 space.
2989Some implementations inadvertently implemented an addition in linear space
2990due to unclear requirements originating outside of this specification.
2991This resulted in <<limits-fragmentShadingRateStrictMultiplyCombiner,
2992pname:fragmentShadingRateStrictMultiplyCombiner>> being added.
2993Fortunately, this only affects situations where a rate of 1 in either
2994dimension is combined with another rate of 1.
2995All other combinations result in the exact same result as if multiplication
2996was performed in linear space due to the clamping logic, and the fact that
2997both the sum and product of 2 and 2 are equal.
2998In many cases, this limit will not affect the correct operation of
2999applications.
3000====
3001
3002:refpage: VkPhysicalDeviceFragmentShadingRatePropertiesKHR
3003include::{chapters}/limits.txt[tag=limits_desc]
3004
3005These properties are related to <<primsrast-fragment-shading-rate, fragment
3006shading rates>>.
3007
3008include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
3009--
3010endif::VK_KHR_fragment_shading_rate[]
3011
3012ifdef::VK_NV_fragment_shading_rate_enums[]
3013[open,refpage='VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV',desc='Structure describing fragment shading rate limits that can be supported by an implementation',type='structs']
3014--
3015The sname:VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV structure is
3016defined as:
3017
3018include::{generated}/api/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
3019
3020  * pname:sType is the type of this structure.
3021  * pname:pNext is `NULL` or a pointer to a structure extending this
3022    structure.
3023  * [[limits-maxFragmentShadingRateInvocationCount]]
3024    pname:maxFragmentShadingRateInvocationCount is a
3025    elink:VkSampleCountFlagBits value indicating the maximum number of
3026    fragment shader invocations per fragment supported in pipeline,
3027    primitive, and attachment fragment shading rates.
3028
3029:refpage: VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV
3030include::{chapters}/limits.txt[tag=limits_desc]
3031
3032These properties are related to <<primsrast-fragment-shading-rate, fragment
3033shading rates>>.
3034
3035include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
3036--
3037endif::VK_NV_fragment_shading_rate_enums[]
3038
3039ifdef::VK_EXT_custom_border_color[]
3040[open,refpage='VkPhysicalDeviceCustomBorderColorPropertiesEXT',desc='Structure describing whether custom border colors can be supported by an implementation',type='structs']
3041--
3042The sname:VkPhysicalDeviceCustomBorderColorPropertiesEXT structure is
3043defined as:
3044
3045include::{generated}/api/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
3046
3047  * [[limits-maxCustomBorderColorSamplers]]
3048    pname:maxCustomBorderColorSamplers indicates the maximum number of
3049    samplers with custom border colors which can: simultaneously exist on a
3050    device.
3051
3052:refpage: VkPhysicalDeviceCustomBorderColorPropertiesEXT
3053include::{chapters}/limits.txt[tag=limits_desc]
3054
3055include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
3056--
3057endif::VK_EXT_custom_border_color[]
3058
3059ifdef::VK_EXT_provoking_vertex[]
3060[open,refpage='VkPhysicalDeviceProvokingVertexPropertiesEXT',desc='Structure describing provoking vertex properties supported by an implementation',type='structs']
3061--
3062The sname:VkPhysicalDeviceProvokingVertexPropertiesEXT structure is defined
3063as:
3064
3065include::{generated}/api/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
3066
3067  * pname:sType is the type of this structure.
3068  * pname:pNext is `NULL` or a pointer to a structure extending this
3069    structure.
3070  * [[limits-provokingVertexModePerPipeline]]
3071    pname:provokingVertexModePerPipeline indicates whether the
3072    implementation supports graphics pipelines with different provoking
3073    vertex modes within the same render pass instance.
3074  * [[limits-transformFeedbackPreservesTriangleFanProvokingVertex]]
3075    pname:transformFeedbackPreservesTriangleFanProvokingVertex indicates
3076    whether the implementation can preserve the provoking vertex order when
3077    writing triangle fan vertices to transform feedback.
3078
3079:refpage: VkPhysicalDeviceProvokingVertexPropertiesEXT
3080include::{chapters}/limits.txt[tag=limits_desc]
3081
3082include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
3083--
3084endif::VK_EXT_provoking_vertex[]
3085
3086ifdef::VK_HUAWEI_subpass_shading[]
3087[open,refpage='VkPhysicalDeviceSubpassShadingPropertiesHUAWEI',desc='Structure describing subpass shading properties supported by an implementation',type='structs']
3088--
3089The sname:VkPhysicalDeviceSubpassShadingPropertiesHUAWEI structure is
3090defined as:
3091
3092include::{generated}/api/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
3093
3094  * pname:sType is the type of this structure.
3095  * pname:pNext is `NULL` or a pointer to a structure extending this
3096    structure.
3097  * [[limits-maxSubpassShadingWorkgroupSizeAspectRatio]]
3098    pname:maxSubpassShadingWorkgroupSizeAspectRatio indicates the maximum
3099    ratio between the width and height of the portion of the subpass shading
3100    shader workgroup size.
3101    pname:maxSubpassShadingWorkgroupSizeAspectRatio must: be a power-of-two
3102    value, and must: be less than or equal to max(code:WorkgroupSize.x /
3103    code:WorkgroupSize.y, code:WorkgroupSize.y / code:WorkgroupSize.x).
3104
3105:refpage: VkPhysicalDeviceSubpassShadingPropertiesHUAWEI
3106include::{chapters}/limits.txt[tag=limits_desc]
3107
3108include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
3109--
3110endif::VK_HUAWEI_subpass_shading[]
3111
3112ifdef::VK_EXT_multi_draw[]
3113
3114[open,refpage='VkPhysicalDeviceMultiDrawPropertiesEXT',desc='Structure describing multidraw limits of an implementation',type='structs']
3115--
3116The sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure is defined as:
3117
3118include::{generated}/api/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
3119
3120The members of the sname:VkPhysicalDeviceMultiDrawPropertiesEXT structure
3121describe the following features:
3122
3123  * [[limits-maxMultiDrawCount]] pname:maxMultiDrawCount indicates the
3124    maximum number of draw calls which can: be batched into a single
3125    multidraw.
3126
3127:refpage: VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT
3128include::{chapters}/limits.txt[tag=limits_desc]
3129
3130include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
3131--
3132
3133endif::VK_EXT_multi_draw[]
3134
3135[[limits-minmax]]
3136== Limit Requirements
3137
3138The following table specifies the required: minimum/maximum for all Vulkan
3139graphics implementations.
3140Where a limit corresponds to a fine-grained device feature which is
3141optional:, the feature name is listed with two required: limits, one when
3142the feature is supported and one when it is not supported.
3143If an implementation supports a feature, the limits reported are the same
3144whether or not the feature is enabled.
3145
3146[[limits-types]]
3147.Required Limit Types
3148[width="100%",cols="<20%,<50%,<30%",options="header"]
3149|====
3150| Type                     | Limit                                      | Feature
3151| code:uint32_t            | pname:maxImageDimension1D                  | -
3152| code:uint32_t            | pname:maxImageDimension2D                  | -
3153| code:uint32_t            | pname:maxImageDimension3D                  | -
3154| code:uint32_t            | pname:maxImageDimensionCube                | -
3155| code:uint32_t            | pname:maxImageArrayLayers                  | -
3156| code:uint32_t            | pname:maxTexelBufferElements               | -
3157| code:uint32_t            | pname:maxUniformBufferRange                | -
3158| code:uint32_t            | pname:maxStorageBufferRange                | -
3159| code:uint32_t            | pname:maxPushConstantsSize                 | -
3160| code:uint32_t            | pname:maxMemoryAllocationCount             | -
3161| code:uint32_t            | pname:maxSamplerAllocationCount            | -
3162| basetype:VkDeviceSize    | pname:bufferImageGranularity               | -
3163| basetype:VkDeviceSize    | pname:sparseAddressSpaceSize               | pname:sparseBinding
3164| code:uint32_t            | pname:maxBoundDescriptorSets               | -
3165| code:uint32_t            | pname:maxPerStageDescriptorSamplers        | -
3166| code:uint32_t            | pname:maxPerStageDescriptorUniformBuffers  | -
3167| code:uint32_t            | pname:maxPerStageDescriptorStorageBuffers  | -
3168| code:uint32_t            | pname:maxPerStageDescriptorSampledImages   | -
3169| code:uint32_t            | pname:maxPerStageDescriptorStorageImages   | -
3170| code:uint32_t            | pname:maxPerStageDescriptorInputAttachments| -
3171| code:uint32_t            | pname:maxPerStageResources                 | -
3172| code:uint32_t            | pname:maxDescriptorSetSamplers             | -
3173| code:uint32_t            | pname:maxDescriptorSetUniformBuffers       | -
3174| code:uint32_t            | pname:maxDescriptorSetUniformBuffersDynamic| -
3175| code:uint32_t            | pname:maxDescriptorSetStorageBuffers       | -
3176| code:uint32_t            | pname:maxDescriptorSetStorageBuffersDynamic| -
3177| code:uint32_t            | pname:maxDescriptorSetSampledImages        | -
3178| code:uint32_t            | pname:maxDescriptorSetStorageImages        | -
3179| code:uint32_t            | pname:maxDescriptorSetInputAttachments     | -
3180| code:uint32_t            | pname:maxVertexInputAttributes             | -
3181| code:uint32_t            | pname:maxVertexInputBindings               | -
3182| code:uint32_t            | pname:maxVertexInputAttributeOffset        | -
3183| code:uint32_t            | pname:maxVertexInputBindingStride          | -
3184| code:uint32_t            | pname:maxVertexOutputComponents            | -
3185| code:uint32_t            | pname:maxTessellationGenerationLevel       | pname:tessellationShader
3186| code:uint32_t            | pname:maxTessellationPatchSize             | pname:tessellationShader
3187| code:uint32_t            | pname:maxTessellationControlPerVertexInputComponents  | pname:tessellationShader
3188| code:uint32_t            | pname:maxTessellationControlPerVertexOutputComponents | pname:tessellationShader
3189| code:uint32_t            | pname:maxTessellationControlPerPatchOutputComponents  | pname:tessellationShader
3190| code:uint32_t            | pname:maxTessellationControlTotalOutputComponents     | pname:tessellationShader
3191| code:uint32_t            | pname:maxTessellationEvaluationInputComponents        | pname:tessellationShader
3192| code:uint32_t            | pname:maxTessellationEvaluationOutputComponents       | pname:tessellationShader
3193| code:uint32_t            | pname:maxGeometryShaderInvocations         | pname:geometryShader
3194| code:uint32_t            | pname:maxGeometryInputComponents           | pname:geometryShader
3195| code:uint32_t            | pname:maxGeometryOutputComponents          | pname:geometryShader
3196| code:uint32_t            | pname:maxGeometryOutputVertices            | pname:geometryShader
3197| code:uint32_t            | pname:maxGeometryTotalOutputComponents     | pname:geometryShader
3198| code:uint32_t            | pname:maxFragmentInputComponents           | -
3199| code:uint32_t            | pname:maxFragmentOutputAttachments         | -
3200| code:uint32_t            | pname:maxFragmentDualSrcAttachments        | pname:dualSrcBlend
3201| code:uint32_t            | pname:maxFragmentCombinedOutputResources   | -
3202| code:uint32_t            | pname:maxComputeSharedMemorySize           | -
3203| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupCount             | -
3204| code:uint32_t            | pname:maxComputeWorkGroupInvocations       | -
3205| 3 {times} code:uint32_t  | pname:maxComputeWorkGroupSize              | -
3206| code:uint32_t            | pname:subPixelPrecisionBits                | -
3207| code:uint32_t            | pname:subTexelPrecisionBits                | -
3208| code:uint32_t            | pname:mipmapPrecisionBits                  | -
3209| code:uint32_t            | pname:maxDrawIndexedIndexValue             | pname:fullDrawIndexUint32
3210| code:uint32_t            | pname:maxDrawIndirectCount                 | pname:multiDrawIndirect
3211| code:float               | pname:maxSamplerLodBias                    | -
3212| code:float               | pname:maxSamplerAnisotropy                 | pname:samplerAnisotropy
3213| code:uint32_t            | pname:maxViewports                         | pname:multiViewport
3214| 2 {times} code:uint32_t  | pname:maxViewportDimensions                | -
3215| 2 {times} code:float     | pname:viewportBoundsRange                  | -
3216| code:uint32_t            | pname:viewportSubPixelBits                 | -
3217| code:size_t              | pname:minMemoryMapAlignment                | -
3218| basetype:VkDeviceSize    | pname:minTexelBufferOffsetAlignment        | -
3219| basetype:VkDeviceSize    | pname:minUniformBufferOffsetAlignment      | -
3220| basetype:VkDeviceSize    | pname:minStorageBufferOffsetAlignment      | -
3221| code:int32_t             | pname:minTexelOffset                       | -
3222| code:uint32_t            | pname:maxTexelOffset                       | -
3223| code:int32_t             | pname:minTexelGatherOffset                 | pname:shaderImageGatherExtended
3224| code:uint32_t            | pname:maxTexelGatherOffset                 | pname:shaderImageGatherExtended
3225| code:float               | pname:minInterpolationOffset               | pname:sampleRateShading
3226| code:float               | pname:maxInterpolationOffset               | pname:sampleRateShading
3227| code:uint32_t            | pname:subPixelInterpolationOffsetBits      | pname:sampleRateShading
3228| code:uint32_t            | pname:maxFramebufferWidth                  | -
3229| code:uint32_t            | pname:maxFramebufferHeight                 | -
3230| code:uint32_t            | pname:maxFramebufferLayers                 | -
3231| tlink:VkSampleCountFlags | pname:framebufferColorSampleCounts         | -
3232ifdef::VK_VERSION_1_2[]
3233| tlink:VkSampleCountFlags | pname:framebufferIntegerColorSampleCounts  | -
3234endif::VK_VERSION_1_2[]
3235| tlink:VkSampleCountFlags | pname:framebufferDepthSampleCounts         | -
3236| tlink:VkSampleCountFlags | pname:framebufferStencilSampleCounts       | -
3237| tlink:VkSampleCountFlags | pname:framebufferNoAttachmentsSampleCounts | -
3238| code:uint32_t            | pname:maxColorAttachments                  | -
3239| tlink:VkSampleCountFlags | pname:sampledImageColorSampleCounts        | -
3240| tlink:VkSampleCountFlags | pname:sampledImageIntegerSampleCounts      | -
3241| tlink:VkSampleCountFlags | pname:sampledImageDepthSampleCounts        | -
3242| tlink:VkSampleCountFlags | pname:sampledImageStencilSampleCounts      | -
3243| tlink:VkSampleCountFlags | pname:storageImageSampleCounts             | pname:shaderStorageImageMultisample
3244| code:uint32_t            | pname:maxSampleMaskWords                   | -
3245| basetype:VkBool32        | pname:timestampComputeAndGraphics          | -
3246| code:float               | pname:timestampPeriod                      | -
3247| code:uint32_t            | pname:maxClipDistances                     | pname:shaderClipDistance
3248| code:uint32_t            | pname:maxCullDistances                     | pname:shaderCullDistance
3249| code:uint32_t            | pname:maxCombinedClipAndCullDistances      | pname:shaderCullDistance
3250| code:uint32_t            | pname:discreteQueuePriorities              | -
3251| 2 {times} code:float     | pname:pointSizeRange                       | pname:largePoints
3252| 2 {times} code:float     | pname:lineWidthRange                       | pname:wideLines
3253| code:float               | pname:pointSizeGranularity                 | pname:largePoints
3254| code:float               | pname:lineWidthGranularity                 | pname:wideLines
3255| basetype:VkBool32        | pname:strictLines                          | -
3256| basetype:VkBool32        | pname:standardSampleLocations              | -
3257| basetype:VkDeviceSize    | pname:optimalBufferCopyOffsetAlignment     | -
3258| basetype:VkDeviceSize    | pname:optimalBufferCopyRowPitchAlignment   | -
3259| basetype:VkDeviceSize    | pname:nonCoherentAtomSize                  | -
3260ifdef::VK_EXT_discard_rectangles[]
3261| code:uint32_t            | pname:maxDiscardRectangles                 | `apiext:VK_EXT_discard_rectangles`
3262endif::VK_EXT_discard_rectangles[]
3263ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3264| basetype:VkBool32        | pname:filterMinmaxSingleComponentFormats   |
3265ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ]
3266ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
3267| basetype:VkBool32        | pname:filterMinmaxImageComponentMapping    |
3268ifdef::VK_VERSION_1_2[`<<features-samplerFilterMinmax,pname:samplerFilterMinmax>>` ]
3269ifdef::VK_EXT_sampler_filter_minmax[`apiext:VK_EXT_sampler_filter_minmax`]
3270endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3271ifdef::VK_KHR_maintenance4[]
3272| basetype:VkDeviceSize    | pname:maxBufferSize                        | `<<features-maintenance4,pname:maintenance4>>`
3273endif::VK_KHR_maintenance4[]
3274ifdef::VK_EXT_conservative_rasterization[]
3275| code:float           | pname:primitiveOverestimationSize                 | `apiext:VK_EXT_conservative_rasterization`
3276| basetype:VkBool32        | pname:maxExtraPrimitiveOverestimationSize         | `apiext:VK_EXT_conservative_rasterization`
3277| code:float           | pname:extraPrimitiveOverestimationSizeGranularity | `apiext:VK_EXT_conservative_rasterization`
3278| basetype:VkBool32        | pname:degenerateTriangleRasterized                | `apiext:VK_EXT_conservative_rasterization`
3279| code:float           | pname:degenerateLinesRasterized                   | `apiext:VK_EXT_conservative_rasterization`
3280| basetype:VkBool32        | pname:fullyCoveredFragmentShaderInputVariable     | `apiext:VK_EXT_conservative_rasterization`
3281| basetype:VkBool32        | pname:conservativeRasterizationPostDepthCoverage  | `apiext:VK_EXT_conservative_rasterization`
3282endif::VK_EXT_conservative_rasterization[]
3283ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3284| code:uint32_t     | pname:maxUpdateAfterBindDescriptorsInAllPools             | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3285| basetype:VkBool32 | pname:shaderUniformBufferArrayNonUniformIndexingNative    | -
3286| basetype:VkBool32 | pname:shaderSampledImageArrayNonUniformIndexingNative     | -
3287| basetype:VkBool32 | pname:shaderStorageBufferArrayNonUniformIndexingNative    | -
3288| basetype:VkBool32 | pname:shaderStorageImageArrayNonUniformIndexingNative     | -
3289| basetype:VkBool32 | pname:shaderInputAttachmentArrayNonUniformIndexingNative  | -
3290| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSamplers        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3291| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3292| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3293| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3294| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3295| code:uint32_t     | pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3296| code:uint32_t     | pname:maxPerStageUpdateAfterBindResources                 | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3297| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSamplers             | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3298| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3299| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3300| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3301| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3302| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindSampledImages        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3303| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindStorageImages        | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3304| code:uint32_t     | pname:maxDescriptorSetUpdateAfterBindInputAttachments     | `<<features-descriptorIndexing,pname:descriptorIndexing>>`
3305endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3306ifdef::VK_EXT_vertex_attribute_divisor[]
3307| code:uint32_t            | pname:maxVertexAttribDivisor               | `apiext:VK_EXT_vertex_attribute_divisor`
3308endif::VK_EXT_vertex_attribute_divisor[]
3309ifdef::VK_NV_mesh_shader[]
3310| code:uint32_t            | pname:maxDrawMeshTasksCount               | `apiext:VK_NV_mesh_shader`
3311| code:uint32_t            | pname:maxTaskWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
3312| code:uint32_t            | pname:maxTaskWorkGroupSize                | `apiext:VK_NV_mesh_shader`
3313| code:uint32_t            | pname:maxTaskTotalMemorySize              | `apiext:VK_NV_mesh_shader`
3314| code:uint32_t            | pname:maxTaskOutputCount                  | `apiext:VK_NV_mesh_shader`
3315| code:uint32_t            | pname:maxMeshWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
3316| code:uint32_t            | pname:maxMeshWorkGroupSize                | `apiext:VK_NV_mesh_shader`
3317| code:uint32_t            | pname:maxMeshTotalMemorySize              | `apiext:VK_NV_mesh_shader`
3318| code:uint32_t            | pname:maxMeshOutputVertices               | `apiext:VK_NV_mesh_shader`
3319| code:uint32_t            | pname:maxMeshOutputPrimitives             | `apiext:VK_NV_mesh_shader`
3320| code:uint32_t            | pname:maxMeshMultiviewViewCount           | `apiext:VK_NV_mesh_shader`
3321| code:uint32_t            | pname:meshOutputPerVertexGranularity      | `apiext:VK_NV_mesh_shader`
3322| code:uint32_t            | pname:meshOutputPerPrimitiveGranularity   | `apiext:VK_NV_mesh_shader`
3323endif::VK_NV_mesh_shader[]
3324ifdef::VK_EXT_transform_feedback[]
3325| code:uint32_t            | pname:maxTransformFeedbackStreams                 | `apiext:VK_EXT_transform_feedback`
3326| code:uint32_t            | pname:maxTransformFeedbackBuffers                 | `apiext:VK_EXT_transform_feedback`
3327| basetype:VkDeviceSize    | pname:maxTransformFeedbackBufferSize              | `apiext:VK_EXT_transform_feedback`
3328| code:uint32_t            | pname:maxTransformFeedbackStreamDataSize          | `apiext:VK_EXT_transform_feedback`
3329| code:uint32_t            | pname:maxTransformFeedbackBufferDataSize          | `apiext:VK_EXT_transform_feedback`
3330| code:uint32_t            | pname:maxTransformFeedbackBufferDataStride        | `apiext:VK_EXT_transform_feedback`
3331| basetype:VkBool32        | pname:transformFeedbackQueries                    | `apiext:VK_EXT_transform_feedback`
3332| basetype:VkBool32        | pname:transformFeedbackStreamsLinesTriangles      | `apiext:VK_EXT_transform_feedback`
3333| basetype:VkBool32        | pname:transformFeedbackRasterizationStreamSelect  | `apiext:VK_EXT_transform_feedback`
3334| basetype:VkBool32        | pname:transformFeedbackDraw                       | `apiext:VK_EXT_transform_feedback`
3335endif::VK_EXT_transform_feedback[]
3336ifdef::VK_EXT_fragment_density_map[]
3337| slink:VkExtent2D         | pname:minFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
3338| slink:VkExtent2D         | pname:maxFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
3339| basetype:VkBool32        | pname:fragmentDensityInvocations          | `apiext:VK_EXT_fragment_density_map`
3340endif::VK_EXT_fragment_density_map[]
3341ifdef::VK_EXT_fragment_density_map2[]
3342| basetype:VkBool32        | pname:subsampledLoads                           | `apiext:VK_EXT_fragment_density_map2`
3343| basetype:VkBool32        | pname:subsampledCoarseReconstructionEarlyAccess | `apiext:VK_EXT_fragment_density_map2`
3344| code:uint32_t            | pname:maxSubsampledArrayLayers                  | `apiext:VK_EXT_fragment_density_map2`
3345| code:uint32_t            | pname:maxDescriptorSetSubsampledSamplers        | `apiext:VK_EXT_fragment_density_map2`
3346endif::VK_EXT_fragment_density_map2[]
3347ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3348| code:uint32_t            | pname:maxGeometryCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
3349| code:uint32_t            | pname:maxInstanceCount                         | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
3350endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3351ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3352| code:uint32_t            | pname:shaderGroupHandleSize                    | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
3353| code:uint32_t            | pname:maxShaderGroupStride                     | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
3354| code:uint32_t            | pname:shaderGroupBaseAlignment                 | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_ray_tracing_pipeline`
3355endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3356ifdef::VK_NV_ray_tracing[]
3357| code:uint32_t            | pname:maxRecursionDepth                        | `apiext:VK_NV_ray_tracing`
3358| code:uint32_t            | pname:maxTriangleCount                         | `apiext:VK_NV_ray_tracing`
3359endif::VK_NV_ray_tracing[]
3360ifdef::VK_KHR_acceleration_structure[]
3361| code:uint32_t            | pname:maxPerStageDescriptorAccelerationStructures
3362                                                                            | `apiext:VK_KHR_acceleration_structure`
3363| code:uint32_t            | pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures
3364                                                                            | `apiext:VK_KHR_acceleration_structure`
3365endif::VK_KHR_acceleration_structure[]
3366ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3367| code:uint32_t            | pname:maxDescriptorSetAccelerationStructures   | `apiext:VK_NV_ray_tracing`, `apiext:VK_KHR_acceleration_structure`
3368endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
3369ifdef::VK_KHR_acceleration_structure[]
3370| code:uint32_t            | pname:maxDescriptorSetUpdateAfterBindAccelerationStructures
3371                                                                            | `apiext:VK_KHR_acceleration_structure`
3372| code:uint32_t            | pname:minAccelerationStructureScratchOffsetAlignment
3373                                                                            | `apiext:VK_KHR_acceleration_structure`
3374endif::VK_KHR_acceleration_structure[]
3375ifdef::VK_KHR_ray_tracing_pipeline[]
3376| code:uint32_t            | pname:maxRayRecursionDepth                     | `apiext:VK_KHR_ray_tracing_pipeline`
3377| code:uint32_t            | pname:shaderGroupHandleCaptureReplaySize       | `apiext:VK_KHR_ray_tracing_pipeline`
3378| code:uint32_t            | pname:maxRayDispatchInvocationCount            | `apiext:VK_KHR_ray_tracing_pipeline`
3379| code:uint32_t            | pname:shaderGroupHandleAlignment               | `apiext:VK_KHR_ray_tracing_pipeline`
3380| code:uint32_t            | pname:maxRayHitAttributeSize                   | `apiext:VK_KHR_ray_tracing_pipeline`
3381endif::VK_KHR_ray_tracing_pipeline[]
3382ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3383| code:uint64_t            | pname:maxTimelineSemaphoreValueDifference      | `<<features-timelineSemaphore,pname:timelineSemaphore>>`
3384endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3385ifdef::VK_EXT_line_rasterization[]
3386| code:uint32_t            | pname:lineSubPixelPrecisionBits                | `apiext:VK_EXT_line_rasterization`
3387endif::VK_EXT_line_rasterization[]
3388ifdef::VK_EXT_custom_border_color[]
3389| code:uint32_t            | pname:maxCustomBorderColorSamplers             | `apiext:VK_EXT_custom_border_color`
3390endif::VK_EXT_custom_border_color[]
3391ifdef::VK_EXT_robustness2[]
3392| basetype:VkDeviceSize    | pname:robustStorageBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
3393| basetype:VkDeviceSize    | pname:robustUniformBufferAccessSizeAlignment   | `apiext:VK_EXT_robustness2`
3394endif::VK_EXT_robustness2[]
3395ifdef::VK_KHR_fragment_shading_rate[]
3396| 2 {times} code:uint32_t       | pname:minFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3397| 2 {times} code:uint32_t       | pname:maxFragmentShadingRateAttachmentTexelSize           | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3398| code:uint32_t                 | pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3399| basetype:VkBool32             | pname:primitiveFragmentShadingRateWithMultipleViewports   | `<<features-primitiveFragmentShadingRate,pname:primitiveFragmentShadingRate>>`
3400| basetype:VkBool32             | pname:layeredShadingRateAttachments                       | `<<features-attachmentFragmentShadingRate,pname:attachmentFragmentShadingRate>>`
3401| basetype:VkBool32             | pname:fragmentShadingRateNonTrivialCombinerOps            | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3402| 2 {times} code:uint32_t       | pname:maxFragmentSize                                     | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3403| code:uint32_t                 | pname:maxFragmentSizeAspectRatio                          | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3404| code:uint32_t                 | pname:maxFragmentShadingRateCoverageSamples               | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3405| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateRasterizationSamples          | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3406| basetype:VkBool32             | pname:fragmentShadingRateWithShaderDepthStencilWrites     | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3407| basetype:VkBool32             | pname:fragmentShadingRateWithSampleMask                   | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3408| basetype:VkBool32             | pname:fragmentShadingRateWithShaderSampleMask             | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3409| basetype:VkBool32             | pname:fragmentShadingRateWithConservativeRasterization    | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3410| basetype:VkBool32             | pname:fragmentShadingRateWithFragmentShaderInterlock      | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3411| basetype:VkBool32             | pname:fragmentShadingRateWithCustomSampleLocations        | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3412| basetype:VkBool32             | pname:fragmentShadingRateStrictMultiplyCombiner           | `<<features-pipelineFragmentShadingRate,pname:pipelineFragmentShadingRate>>`
3413endif::VK_KHR_fragment_shading_rate[]
3414ifdef::VK_NV_fragment_shading_rate_enums[]
3415| elink:VkSampleCountFlagBits   | pname:maxFragmentShadingRateInvocationCount               | `<<features-supersampleFragmentShadingRates,pname:supersampleFragmentShadingRates>>`
3416endif::VK_NV_fragment_shading_rate_enums[]
3417ifdef::VK_HUAWEI_subpass_shading[]
3418| code:uint32_t                 | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading,pname:subpassShading>>`
3419endif::VK_HUAWEI_subpass_shading[]
3420|====
3421
3422[[limits-required]]
3423.Required Limits
3424[width="100%",cols="<35,<9,<14,<11",options="header"]
3425|====
3426| Limit | Unsupported Limit | Supported Limit | Limit Type^1^
3427| pname:maxImageDimension1D                  | - | 4096    | min
3428| pname:maxImageDimension2D                  | - | 4096    | min
3429| pname:maxImageDimension3D                  | - | 256     | min
3430| pname:maxImageDimensionCube                | - | 4096    | min
3431| pname:maxImageArrayLayers                  | - | 256     | min
3432| pname:maxTexelBufferElements               | - | 65536   | min
3433| pname:maxUniformBufferRange                | - | 16384   | min
3434| pname:maxStorageBufferRange                | - | 2^27^   | min
3435| pname:maxPushConstantsSize                 | - | 128     | min
3436| pname:maxMemoryAllocationCount             | - | 4096    | min
3437| pname:maxSamplerAllocationCount            | - | 4000    | min
3438| pname:bufferImageGranularity               | - | 131072  | max
3439| pname:sparseAddressSpaceSize               | 0 | 2^31^   | min
3440| pname:maxBoundDescriptorSets               | - | 4       | min
3441| pname:maxPerStageDescriptorSamplers        | - | 16      | min
3442| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | min
3443| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | min
3444| pname:maxPerStageDescriptorSampledImages   | - | 16      | min
3445| pname:maxPerStageDescriptorStorageImages   | - | 4       | min
3446| pname:maxPerStageDescriptorInputAttachments| - | 4       | min
3447| pname:maxPerStageResources                 | - | 128 ^2^ | min
3448| pname:maxDescriptorSetSamplers             | - | 96 ^8^  | min, _n_ {times} PerStage
3449| pname:maxDescriptorSetUniformBuffers       | - | 72 ^8^  | min, _n_ {times} PerStage
3450| pname:maxDescriptorSetUniformBuffersDynamic| - | 8       | min
3451| pname:maxDescriptorSetStorageBuffers       | - | 24 ^8^  | min, _n_ {times} PerStage
3452| pname:maxDescriptorSetStorageBuffersDynamic| - | 4       | min
3453| pname:maxDescriptorSetSampledImages        | - | 96 ^8^  | min, _n_ {times} PerStage
3454| pname:maxDescriptorSetStorageImages        | - | 24 ^8^  | min, _n_ {times} PerStage
3455| pname:maxDescriptorSetInputAttachments     | - | 4       | min
3456| pname:maxVertexInputAttributes             | - | 16      | min
3457ifndef::VK_KHR_portability_subset[]
3458| pname:maxVertexInputBindings               | - | 16      | min
3459endif::VK_KHR_portability_subset[]
3460ifdef::VK_KHR_portability_subset[]
3461| pname:maxVertexInputBindings               | - | 16 ^10^ | min
3462endif::VK_KHR_portability_subset[]
3463| pname:maxVertexInputAttributeOffset        | - | 2047    | min
3464| pname:maxVertexInputBindingStride          | - | 2048    | min
3465| pname:maxVertexOutputComponents            | - | 64      | min
3466| pname:maxTessellationGenerationLevel       | 0 | 64      | min
3467| pname:maxTessellationPatchSize             | 0 | 32      | min
3468| pname:maxTessellationControlPerVertexInputComponents  | 0 |64 | min
3469| pname:maxTessellationControlPerVertexOutputComponents | 0 |64 | min
3470| pname:maxTessellationControlPerPatchOutputComponents  | 0 |120 | min
3471| pname:maxTessellationControlTotalOutputComponents     | 0 |2048 | min
3472| pname:maxTessellationEvaluationInputComponents        | 0 |64 | min
3473| pname:maxTessellationEvaluationOutputComponents       | 0 |64 | min
3474| pname:maxGeometryShaderInvocations         | 0 | 32      | min
3475| pname:maxGeometryInputComponents           | 0 | 64      | min
3476| pname:maxGeometryOutputComponents          | 0 | 64      | min
3477| pname:maxGeometryOutputVertices            | 0 | 256     | min
3478| pname:maxGeometryTotalOutputComponents     | 0 | 1024    | min
3479| pname:maxFragmentInputComponents           | - | 64      | min
3480| pname:maxFragmentOutputAttachments         | - | 4       | min
3481| pname:maxFragmentDualSrcAttachments        | 0 | 1       | min
3482| pname:maxFragmentCombinedOutputResources   | - | 4       | min
3483| pname:maxComputeSharedMemorySize           | - | 16384   | min
3484| pname:maxComputeWorkGroupCount             | - | (65535,65535,65535) | min
3485| pname:maxComputeWorkGroupInvocations       | - | 128     | min
3486| pname:maxComputeWorkGroupSize              | - | (128,128,64) | min
3487| pname:subPixelPrecisionBits                | - | 4       | min
3488| pname:subTexelPrecisionBits                | - | 4       | min
3489| pname:mipmapPrecisionBits                  | - | 4       | min
3490| pname:maxDrawIndexedIndexValue             | 2^24^-1 | 2^32^-1 | min
3491| pname:maxDrawIndirectCount                 | 1 | 2^16^-1 | min
3492| pname:maxSamplerLodBias                    | - | 2       | min
3493| pname:maxSamplerAnisotropy                 | 1 | 16      | min
3494| pname:maxViewports                         | 1 | 16      | min
3495| pname:maxViewportDimensions                | - | (4096,4096) ^3^  | min
3496| pname:viewportBoundsRange                  | - | (-8192,8191) ^4^ | (max,min)
3497| pname:viewportSubPixelBits                 | - | 0   | min
3498| pname:minMemoryMapAlignment                | - | 64  | min
3499| pname:minTexelBufferOffsetAlignment        | - | 256 | max
3500| pname:minUniformBufferOffsetAlignment      | - | 256 | max
3501| pname:minStorageBufferOffsetAlignment      | - | 256 | max
3502| pname:minTexelOffset                       | - | -8  | max
3503| pname:maxTexelOffset                       | - | 7   | min
3504| pname:minTexelGatherOffset                 | 0 | -8  | max
3505| pname:maxTexelGatherOffset                 | 0 | 7   | min
3506| pname:minInterpolationOffset               |0.0| -0.5 ^5^ | max
3507| pname:maxInterpolationOffset               |0.0| 0.5 - (1 ULP) ^5^ | min
3508| pname:subPixelInterpolationOffsetBits      | 0 | 4 ^5^ | min
3509| pname:maxFramebufferWidth                  | - | 4096  | min
3510| pname:maxFramebufferHeight                 | - | 4096  | min
3511| pname:maxFramebufferLayers                 | - | 256   | min
3512| pname:framebufferColorSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3513ifdef::VK_VERSION_1_2[]
3514| pname:framebufferIntegerColorSampleCounts  | - | (ename:VK_SAMPLE_COUNT_1_BIT)                                | min
3515endif::VK_VERSION_1_2[]
3516| pname:framebufferDepthSampleCounts         | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3517| pname:framebufferStencilSampleCounts       | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3518| pname:framebufferNoAttachmentsSampleCounts | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3519| pname:maxColorAttachments                  | - | 4     | min
3520| pname:sampledImageColorSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3521| pname:sampledImageIntegerSampleCounts      | - | ename:VK_SAMPLE_COUNT_1_BIT                                  | min
3522| pname:sampledImageDepthSampleCounts        | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3523| pname:sampledImageStencilSampleCounts      | - | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3524| pname:storageImageSampleCounts             | ename:VK_SAMPLE_COUNT_1_BIT | (ename:VK_SAMPLE_COUNT_1_BIT \| ename:VK_SAMPLE_COUNT_4_BIT) | min
3525| pname:maxSampleMaskWords                   | - | 1     | min
3526| pname:timestampComputeAndGraphics          | - | -     |implementation-dependent
3527| pname:timestampPeriod                      | - | -     |duration
3528| pname:maxClipDistances                     | 0 | 8     | min
3529| pname:maxCullDistances                     | 0 | 8     | min
3530| pname:maxCombinedClipAndCullDistances      | 0 | 8     | min
3531| pname:discreteQueuePriorities              | - | 2     | min
3532| pname:pointSizeRange                       | (1.0,1.0) | (1.0,64.0 - ULP)^6^| (max,min)
3533| pname:lineWidthRange                       | (1.0,1.0) | (1.0,8.0 - ULP)^7^ | (max,min)
3534| pname:pointSizeGranularity                 |  0.0 | 1.0 ^6^ | max, fixed point increment
3535| pname:lineWidthGranularity                 |  0.0 | 1.0 ^7^ | max, fixed point increment
3536| pname:strictLines                          | - | -   | implementation-dependent
3537| pname:standardSampleLocations              | - | -   | implementation-dependent
3538| pname:optimalBufferCopyOffsetAlignment     | - | -   | recommendation
3539| pname:optimalBufferCopyRowPitchAlignment   | - | -   | recommendation
3540| pname:nonCoherentAtomSize                  | - | 256 | max
3541ifdef::VK_KHR_push_descriptor[]
3542| pname:maxPushDescriptors                   | - | 32  | min
3543endif::VK_KHR_push_descriptor[]
3544ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
3545| pname:maxMultiviewViewCount                | - |  6  | min
3546| pname:maxMultiviewInstanceIndex            | - |  2^27^-1  | min
3547endif::VK_VERSION_1_1,VK_KHR_multiview[]
3548ifdef::VK_EXT_discard_rectangles[]
3549| pname:maxDiscardRectangles                 | 0 | 4   | min
3550endif::VK_EXT_discard_rectangles[]
3551ifdef::VK_EXT_sample_locations[]
3552| pname:sampleLocationSampleCounts           | - | ename:VK_SAMPLE_COUNT_4_BIT | min
3553| pname:maxSampleLocationGridSize            | - | (1,1) | min
3554| pname:sampleLocationCoordinateRange        | - | (0.0, 0.9375) | (max,min)
3555| pname:sampleLocationSubPixelBits           | - | 4   | min
3556| pname:variableSampleLocations              | - |false| implementation-dependent
3557endif::VK_EXT_sample_locations[]
3558ifdef::VK_EXT_external_memory_host[]
3559| pname:minImportedHostPointerAlignment      | - | 65536 | max
3560endif::VK_EXT_external_memory_host[]
3561ifdef::VK_NVX_multiview_per_view_attributes[]
3562| pname:perViewPositionAllComponents         | - | -   | implementation-dependent
3563endif::VK_NVX_multiview_per_view_attributes[]
3564ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3565| pname:filterMinmaxSingleComponentFormats   | - | -   | implementation-dependent
3566| pname:filterMinmaxImageComponentMapping    | - | -   | implementation-dependent
3567endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
3568ifdef::VK_EXT_blend_operation_advanced[]
3569| pname:advancedBlendMaxColorAttachments        | - | 1   | min
3570| pname:advancedBlendIndependentBlend           | - |false| implementation-dependent
3571| pname:advancedBlendNonPremultipliedSrcColor   | - |false| implementation-dependent
3572| pname:advancedBlendNonPremultipliedDstColor   | - |false| implementation-dependent
3573| pname:advancedBlendCorrelatedOverlap          | - |false| implementation-dependent
3574| pname:advancedBlendAllOperations              | - |false| implementation-dependent
3575endif::VK_EXT_blend_operation_advanced[]
3576ifdef::VK_VERSION_1_1,VK_KHR_maintenance3[]
3577| pname:maxPerSetDescriptors                                | - |1024 | min
3578| pname:maxMemoryAllocationSize                             | - | 2^30^ | min
3579endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
3580ifdef::VK_KHR_maintenance4[]
3581| pname:maxBufferSize                                       | - | 2^30^ | min
3582endif::VK_KHR_maintenance4[]
3583ifdef::VK_EXT_conservative_rasterization[]
3584| pname:primitiveOverestimationSize                 | - |0.0   | min
3585| pname:maxExtraPrimitiveOverestimationSize         | - |0.0   | min
3586| pname:extraPrimitiveOverestimationSizeGranularity | - |0.0   | min
3587| pname:primitiveUnderestimation                    | - |false | implementation-dependent
3588| pname:conservativePointAndLineRasterization       | - |false | implementation-dependent
3589| pname:degenerateTrianglesRasterized               | - |false | implementation-dependent
3590| pname:degenerateLinesRasterized                   | - |false | implementation-dependent
3591| pname:fullyCoveredFragmentShaderInputVariable     | - |false | implementation-dependent
3592| pname:conservativeRasterizationPostDepthCoverage  | - |false | implementation-dependent
3593endif::VK_EXT_conservative_rasterization[]
3594ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3595| pname:maxUpdateAfterBindDescriptorsInAllPools             | 0 |500000| min
3596| pname:shaderUniformBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
3597| pname:shaderSampledImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
3598| pname:shaderStorageBufferArrayNonUniformIndexingNative    | - |false| implementation-dependent
3599| pname:shaderStorageImageArrayNonUniformIndexingNative     | - |false| implementation-dependent
3600| pname:shaderInputAttachmentArrayNonUniformIndexingNative  | - |false| implementation-dependent
3601| pname:maxPerStageDescriptorUpdateAfterBindSamplers        | 0^9^ |500000 ^9^ | min
3602| pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers  | 0^9^ |12 ^9^ | min
3603| pname:maxPerStageDescriptorUpdateAfterBindStorageBuffers  | 0^9^ |500000 ^9^ | min
3604| pname:maxPerStageDescriptorUpdateAfterBindSampledImages   | 0^9^ |500000 ^9^ | min
3605| pname:maxPerStageDescriptorUpdateAfterBindStorageImages   | 0^9^ |500000 ^9^ | min
3606| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments| 0^9^ |4 ^9^ | min
3607| pname:maxPerStageUpdateAfterBindResources                 | 0^9^ |500000 ^9^ | min
3608| pname:maxDescriptorSetUpdateAfterBindSamplers             | 0^9^ |500000 ^9^ | min
3609| pname:maxDescriptorSetUpdateAfterBindUniformBuffers       | 0^9^ |72 ^8^ ^9^ | min, _n_ {times} PerStage
3610| pname:maxDescriptorSetUpdateAfterBindUniformBuffersDynamic| 0^9^ |8 ^9^ | min
3611| pname:maxDescriptorSetUpdateAfterBindStorageBuffers       | 0^9^ |500000 ^9^ | min
3612| pname:maxDescriptorSetUpdateAfterBindStorageBuffersDynamic| 0^9^ |4 ^9^ | min
3613| pname:maxDescriptorSetUpdateAfterBindSampledImages        | 0^9^ |500000 ^9^ | min
3614| pname:maxDescriptorSetUpdateAfterBindStorageImages        | 0^9^ |500000 ^9^ | min
3615| pname:maxDescriptorSetUpdateAfterBindInputAttachments     | 0^9^ |4 ^9^ | min
3616endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3617ifdef::VK_EXT_inline_uniform_block[]
3618| pname:maxInlineUniformBlockSize                               | - | 256   | min
3619| pname:maxPerStageDescriptorInlineUniformBlocks                | - | 4     | min
3620| pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks | - | 4     | min
3621| pname:maxDescriptorSetInlineUniformBlocks                     | - | 4     | min
3622| pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks      | - | 4     | min
3623endif::VK_EXT_inline_uniform_block[]
3624ifdef::VK_EXT_vertex_attribute_divisor[]
3625| pname:maxVertexAttribDivisor               | - | 2^16^-1   | min
3626endif::VK_EXT_vertex_attribute_divisor[]
3627ifdef::VK_NV_mesh_shader[]
3628| pname:maxDrawMeshTasksCount                | - | 2^16^-1   | min
3629| pname:maxTaskWorkGroupInvocations          | - | 32        | min
3630| pname:maxTaskWorkGroupSize                 | - | (32,1,1)  | min
3631| pname:maxTaskTotalMemorySize               | - | 16384     | min
3632| pname:maxTaskOutputCount                   | - | 2^16^-1   | min
3633| pname:maxMeshWorkGroupInvocations          | - | 32        | min
3634| pname:maxMeshWorkGroupSize                 | - | (32,1,1)  | min
3635| pname:maxMeshTotalMemorySize               | - | 16384     | min
3636| pname:maxMeshOutputVertices                | - | 256       | min
3637| pname:maxMeshOutputPrimitives              | - | 256       | min
3638| pname:maxMeshMultiviewViewCount            | - | 1         | min
3639| pname:meshOutputPerVertexGranularity       | - | -         | implementation-dependent
3640| pname:meshOutputPerPrimitiveGranularity    | - | -         | implementation-dependent
3641endif::VK_NV_mesh_shader[]
3642ifdef::VK_EXT_transform_feedback[]
3643| pname:maxTransformFeedbackStreams                         | - | 1         | min
3644| pname:maxTransformFeedbackBuffers                         | - | 1         | min
3645| pname:maxTransformFeedbackBufferSize                      | - | 2^27^     | min
3646| pname:maxTransformFeedbackStreamDataSize                  | - | 512       | min
3647| pname:maxTransformFeedbackBufferDataSize                  | - | 512       | min
3648| pname:maxTransformFeedbackBufferDataStride                | - | 512       | min
3649| pname:transformFeedbackQueries                            | - | false     | implementation-dependent
3650| pname:transformFeedbackStreamsLinesTriangles              | - | false     | implementation-dependent
3651| pname:transformFeedbackRasterizationStreamSelect          | - | false     | implementation-dependent
3652| pname:transformFeedbackDraw                               | - | false     | implementation-dependent
3653endif::VK_EXT_transform_feedback[]
3654ifdef::VK_EXT_fragment_density_map[]
3655| pname:minFragmentDensityTexelSize          | - | (1,1)  | min
3656| pname:maxFragmentDensityTexelSize          | - | (1,1)  | min
3657| pname:fragmentDensityInvocations           | - |  -     | implementation-dependent
3658endif::VK_EXT_fragment_density_map[]
3659ifdef::VK_EXT_fragment_density_map2[]
3660| pname:subsampledLoads                           | true  | false | implementation-dependent
3661| pname:subsampledCoarseReconstructionEarlyAccess | false | false | implementation-dependent
3662| pname:maxSubsampledArrayLayers                  | 2     | 2     | min
3663| pname:maxDescriptorSetSubsampledSamplers        | 1     | 1     | min
3664endif::VK_EXT_fragment_density_map2[]
3665ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3666ifdef::VK_NV_ray_tracing[]
3667| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:shaderGroupHandleSize | - | 16      | min
3668| slink:VkPhysicalDeviceRayTracingPropertiesNV::pname:maxRecursionDepth     | - | 31      | min
3669endif::VK_NV_ray_tracing[]
3670ifdef::VK_KHR_ray_tracing_pipeline[]
3671| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleSize | - | 32      | exact
3672| slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayRecursionDepth  | - | 1       | min
3673endif::VK_KHR_ray_tracing_pipeline[]
3674| pname:maxShaderGroupStride                     | - | 4096    | min
3675| pname:shaderGroupBaseAlignment                 | - | 64      | max
3676| pname:maxGeometryCount                         | - | 2^24^-1 | min
3677| pname:maxInstanceCount                         | - | 2^24^-1 | min
3678ifdef::VK_NV_ray_tracing[]
3679| pname:maxTriangleCount                         | - | 2^29^-1 | min
3680endif::VK_NV_ray_tracing[]
3681ifdef::VK_KHR_acceleration_structure[]
3682| pname:maxPrimitiveCount                        | - | 2^29^-1 | min
3683| pname:maxPerStageDescriptorAccelerationStructures                 | - | 16         | min
3684| pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures  | - | 500000 ^9^ | min
3685endif::VK_KHR_acceleration_structure[]
3686| pname:maxDescriptorSetAccelerationStructures                      | - | 16         | min
3687endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
3688ifdef::VK_KHR_acceleration_structure[]
3689| pname:maxDescriptorSetUpdateAfterBindAccelerationStructures       | - | 500000 ^9^ | min
3690| pname:minAccelerationStructureScratchOffsetAlignment              | - | 256        | max
3691endif::VK_KHR_acceleration_structure[]
3692ifdef::VK_KHR_ray_tracing_pipeline[]
3693| pname:shaderGroupHandleCaptureReplaySize              | - | 64  | max
3694| pname:maxRayDispatchInvocationCount                   | - | 2^30^ | min
3695| pname:shaderGroupHandleAlignment                      | - | 32  | max
3696| pname:maxRayHitAttributeSize                          | - | 32  | min
3697endif::VK_KHR_ray_tracing_pipeline[]
3698ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3699| pname:maxTimelineSemaphoreValueDifference      | - | 2^31^-1 | min
3700endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
3701ifdef::VK_EXT_line_rasterization[]
3702| pname:lineSubPixelPrecisionBits                | - | 4    | min
3703endif::VK_EXT_line_rasterization[]
3704ifdef::VK_NV_device_generated_commands[]
3705| pname:maxGraphicsShaderGroupCount               | - | 2^12^   | min
3706| pname:maxIndirectSequenceCount                  | - | 2^20^   | min
3707| pname:maxIndirectCommandsTokenCount             | - | 16     | min
3708| pname:maxIndirectCommandsStreamCount            | - | 16     | min
3709| pname:maxIndirectCommandsTokenOffset            | - | 2047   | min
3710| pname:maxIndirectCommandsStreamStride           | - | 2048   | min
3711| pname:minSequencesCountBufferOffsetAlignment    | - | 256    | max
3712| pname:minSequencesIndexBufferOffsetAlignment    | - | 256    | max
3713| pname:minIndirectCommandsBufferOffsetAlignment  | - | 256    | max
3714endif::VK_NV_device_generated_commands[]
3715ifdef::VK_EXT_custom_border_color[]
3716| pname:maxCustomBorderColorSamplers              | - | 32    | min
3717endif::VK_EXT_custom_border_color[]
3718ifdef::VK_EXT_robustness2[]
3719| pname:robustStorageBufferAccessSizeAlignment   | - | 4    | max
3720| pname:robustUniformBufferAccessSizeAlignment   | - | 256  | max
3721endif::VK_EXT_robustness2[]
3722ifdef::VK_KHR_fragment_shading_rate[]
3723| pname:minFragmentShadingRateAttachmentTexelSize           | (0,0) | (32,32) | max
3724| pname:maxFragmentShadingRateAttachmentTexelSize           | (0,0) | (8,8)   | min
3725| pname:maxFragmentShadingRateAttachmentTexelSizeAspectRatio |  0   |   1     | min
3726| pname:primitiveFragmentShadingRateWithMultipleViewports   | false | false   | implementation-dependent
3727| pname:layeredShadingRateAttachments                       | false | false   | implementation-dependent
3728| pname:fragmentShadingRateNonTrivialCombinerOps            |   -   | false   | implementation-dependent
3729| pname:maxFragmentSize                                     |   -   | (2,2)   | min
3730| pname:maxFragmentSizeAspectRatio                          |   -   | 2       | min
3731| pname:maxFragmentShadingRateCoverageSamples               |   -   | 16      | min
3732| pname:maxFragmentShadingRateRasterizationSamples          |   -   | ename:VK_SAMPLE_COUNT_4_BIT      | min
3733| pname:fragmentShadingRateWithShaderDepthStencilWrites     |   -   | false   | implementation-dependent
3734| pname:fragmentShadingRateWithSampleMask                   |   -   | false   | implementation-dependent
3735| pname:fragmentShadingRateWithShaderSampleMask             |   -   | false   | implementation-dependent
3736| pname:fragmentShadingRateWithConservativeRasterization    |   -   | false   | implementation-dependent
3737| pname:fragmentShadingRateWithFragmentShaderInterlock      |   -   | false   | implementation-dependent
3738| pname:fragmentShadingRateWithCustomSampleLocations        |   -   | false   | implementation-dependent
3739| pname:fragmentShadingRateStrictMultiplyCombiner           |   -   | false   | implementation-dependent
3740endif::VK_KHR_fragment_shading_rate[]
3741ifdef::VK_NV_fragment_shading_rate_enums[]
3742| pname:maxFragmentShadingRateInvocationCount               | - | ename:VK_SAMPLE_COUNT_4_BIT | min
3743endif::VK_NV_fragment_shading_rate_enums[]
3744ifdef::VK_HUAWEI_subpass_shading[]
3745| pname:maxSubpassShadingWorkgroupSizeAspectRatio |  0   |   1     | min
3746endif::VK_HUAWEI_subpass_shading[]
3747ifdef::VK_EXT_multi_draw[]
3748| pname:maxMultiDrawCount               | - | 1024 | min
3749endif::VK_EXT_multi_draw[]
3750|====
3751
37521::
3753    The *Limit Type* column specifies the limit is either the minimum limit
3754    all implementations must: support, the maximum limit all implementations
3755    must: support, or the exact value all implementations must: support.
3756    For bitmasks a minimum limit is the least bits all implementations must:
3757    set, but they may: have additional bits set beyond this minimum.
3758
37592::
3760    The pname:maxPerStageResources must: be at least the smallest of the
3761    following:
3762+
3763  * the sum of the pname:maxPerStageDescriptorUniformBuffers,
3764    pname:maxPerStageDescriptorStorageBuffers,
3765    pname:maxPerStageDescriptorSampledImages,
3766    pname:maxPerStageDescriptorStorageImages,
3767    pname:maxPerStageDescriptorInputAttachments, pname:maxColorAttachments
3768    limits, or
3769  * 128.
3770+
3771It may: not be possible to reach this limit in every stage.
3772
37733::
3774    See <<limits-maxViewportDimensions,pname:maxViewportDimensions>> for the
3775    required: relationship to other limits.
3776
37774::
3778    See <<limits-viewportboundsrange,pname:viewportBoundsRange>> for the
3779    required: relationship to other limits.
3780
37815::
3782    The values pname:minInterpolationOffset and pname:maxInterpolationOffset
3783    describe the closed interval of supported interpolation offsets:
3784    [pname:minInterpolationOffset, pname:maxInterpolationOffset].
3785    The ULP is determined by pname:subPixelInterpolationOffsetBits.
3786    If pname:subPixelInterpolationOffsetBits is 4, this provides increments
3787    of (1/2^4^) = 0.0625, and thus the range of supported interpolation
3788    offsets would be [eq]#[-0.5, 0.4375]#.
3789
37906::
3791    The point size ULP is determined by pname:pointSizeGranularity.
3792    If the pname:pointSizeGranularity is 0.125, the range of supported point
3793    sizes must: be at least [1.0, 63.875].
3794
37957::
3796    The line width ULP is determined by pname:lineWidthGranularity.
3797    If the pname:lineWidthGranularity is 0.0625, the range of supported line
3798    widths must: be at least [1.0, 7.9375].
3799
38008::
3801    The minimum ptext:maxDescriptorSet* limit is _n_ times the corresponding
3802    _specification_ minimum ptext:maxPerStageDescriptor* limit, where _n_ is
3803    the number of shader stages supported by the slink:VkPhysicalDevice.
3804    If all shader stages are supported, _n_ = 6 (vertex, tessellation
3805    control, tessellation evaluation, geometry, fragment, compute).
3806
3807ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
38089::
3809    The ptext:UpdateAfterBind descriptor limits must: each be greater than
3810    or equal to the corresponding ptext:non-UpdateAfterBind limit.
3811endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
3812
3813ifdef::VK_KHR_portability_subset[]
381410::
3815     If the `apiext:VK_KHR_portability_subset` extension is enabled, the
3816     required minimum value of pname:maxVertexInputBindings is code:8.
3817endif::VK_KHR_portability_subset[]
3818
3819
3820ifdef::VK_EXT_sample_locations[]
3821
3822[[limits-multisample]]
3823== Additional Multisampling Capabilities
3824
3825[open,refpage='vkGetPhysicalDeviceMultisamplePropertiesEXT',desc='Report sample count specific multisampling capabilities of a physical device',type='protos']
3826--
3827To query additional multisampling capabilities which may: be supported for a
3828specific sample count, beyond the minimum capabilities described for
3829<<limits, Limits>> above, call:
3830
3831include::{generated}/api/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
3832
3833  * pname:physicalDevice is the physical device from which to query the
3834    additional multisampling capabilities.
3835  * pname:samples is a elink:VkSampleCountFlagBits value specifying the
3836    sample count to query capabilities for.
3837  * pname:pMultisampleProperties is a pointer to a
3838    slink:VkMultisamplePropertiesEXT structure in which information about
3839    additional multisampling capabilities specific to the sample count is
3840    returned.
3841
3842include::{generated}/validity/protos/vkGetPhysicalDeviceMultisamplePropertiesEXT.txt[]
3843--
3844
3845[open,refpage='VkMultisamplePropertiesEXT',desc='Structure returning information about sample count specific additional multisampling capabilities',type='structs']
3846--
3847The sname:VkMultisamplePropertiesEXT structure is defined as
3848
3849include::{generated}/api/structs/VkMultisamplePropertiesEXT.txt[]
3850
3851  * pname:sType is the type of this structure.
3852  * pname:pNext is `NULL` or a pointer to a structure extending this
3853    structure.
3854  * pname:maxSampleLocationGridSize is the maximum size of the pixel grid in
3855    which sample locations can: vary.
3856
3857include::{generated}/validity/structs/VkMultisamplePropertiesEXT.txt[]
3858--
3859
3860If the sample count for which additional multisampling capabilities are
3861requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set
3862in sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
3863<<limits-sampleLocationSampleCounts, pname:sampleLocationSampleCounts>> the
3864pname:width and pname:height members of
3865sname:VkMultisamplePropertiesEXT::pname:maxSampleLocationGridSize must: be
3866greater than or equal to the corresponding members of
3867sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
3868<<limits-maxSampleLocationGridSize,pname:maxSampleLocationGridSize>>,
3869respectively, otherwise both members must: be `0`.
3870endif::VK_EXT_sample_locations[]
3871
3872// If you are adding a new features structure, it must be placed at the end
3873// of the previous section (immediately before [[limits-multisample]]).
3874