Repository navigation
Expand file tree
/
Copy pathlimits.txt
More file actions
3835 lines (3514 loc) · 206 KB
/
Copy pathlimits.txt
File metadata and controls
3835 lines (3514 loc) · 206 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// Copyright 2015-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0
// This text fragment is used many times in the Devices and Queues, and
// Limits chapters for different behavior, property, and limit queries.
ifdef::hidden[]
// tag::limits_desc[]
If the sname:{refpage} structure is included in the pname:pNext chain of the
slink:VkPhysicalDeviceProperties2 structure passed to
flink:vkGetPhysicalDeviceProperties2, it is filled in with each
corresponding implementation-dependent property.
// end::limits_desc[]
endif::hidden[]
[[limits]]
= Limits
_Limits_ are implementation-dependent minimums, maximums, and other device
characteristics that an application may: need to be aware of.
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[NOTE]
.Note
====
Limits are reported via the basic slink:VkPhysicalDeviceLimits structure as
well as the extensible structure sname:VkPhysicalDeviceProperties2, which
was added in `<<VK_KHR_get_physical_device_properties2>>` and included in
Vulkan 1.1.
When limits are added in future Vulkan versions or extensions, each
extension should: introduce one new limit structure, if needed.
This structure can: be added to the pname:pNext chain of the
sname:VkPhysicalDeviceProperties2 structure.
====
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='VkPhysicalDeviceLimits',desc='Structure reporting implementation-dependent physical device limits',type='structs']
--
The sname:VkPhysicalDeviceLimits structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceLimits.txt[]
The sname:VkPhysicalDeviceLimits are properties of the physical device.
These are available in the pname:limits member of the
slink:VkPhysicalDeviceProperties structure which is returned from
flink:vkGetPhysicalDeviceProperties.
* [[limits-maxImageDimension1D]] pname:maxImageDimension1D is the largest
dimension (pname:width) that is guaranteed to be supported for all
images created with an pname:imageType of ename:VK_IMAGE_TYPE_1D.
Some combinations of image parameters (format, usage, etc.) may: allow
support for larger dimensions, which can: be queried using
flink:vkGetPhysicalDeviceImageFormatProperties.
* [[limits-maxImageDimension2D]] pname:maxImageDimension2D is the largest
dimension (pname:width or pname:height) that is guaranteed to be
supported for all images created with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and without
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
Some combinations of image parameters (format, usage, etc.) may: allow
support for larger dimensions, which can: be queried using
flink:vkGetPhysicalDeviceImageFormatProperties.
* [[limits-maxImageDimension3D]] pname:maxImageDimension3D is the largest
dimension (pname:width, pname:height, or pname:depth) that is guaranteed
to be supported for all images created with an pname:imageType of
ename:VK_IMAGE_TYPE_3D.
Some combinations of image parameters (format, usage, etc.) may: allow
support for larger dimensions, which can: be queried using
flink:vkGetPhysicalDeviceImageFormatProperties.
* [[limits-maxImageDimensionCube]] pname:maxImageDimensionCube is the
largest dimension (pname:width or pname:height) that is guaranteed to be
supported for all images created with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and with
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT set in pname:flags.
Some combinations of image parameters (format, usage, etc.) may: allow
support for larger dimensions, which can: be queried using
flink:vkGetPhysicalDeviceImageFormatProperties.
* [[limits-maxImageArrayLayers]] pname:maxImageArrayLayers is the maximum
number of layers (pname:arrayLayers) for an image.
* [[limits-maxTexelBufferElements]] pname:maxTexelBufferElements is the
maximum number of addressable texels for a buffer view created on a
buffer which was created with the
ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set in the pname:usage
member of the slink:VkBufferCreateInfo structure.
* [[limits-maxUniformBufferRange]] pname:maxUniformBufferRange is the
maximum value that can: be specified in the pname:range member of a
slink:VkDescriptorBufferInfo structure passed to
flink:vkUpdateDescriptorSets for descriptors of type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC.
* [[limits-maxStorageBufferRange]] pname:maxStorageBufferRange is the
maximum value that can: be specified in the pname:range member of a
slink:VkDescriptorBufferInfo structure passed to
flink:vkUpdateDescriptorSets for descriptors of type
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC.
* [[limits-maxPushConstantsSize]] pname:maxPushConstantsSize is the
maximum size, in bytes, of the pool of push constant memory.
For each of the push constant ranges indicated by the
pname:pPushConstantRanges member of the slink:VkPipelineLayoutCreateInfo
structure, [eq]#(pname:offset {plus} pname:size)# must: be less than or
equal to this limit.
* [[limits-maxMemoryAllocationCount]] pname:maxMemoryAllocationCount is
the maximum number of device memory allocations, as created by
flink:vkAllocateMemory, which can: simultaneously exist.
* [[limits-maxSamplerAllocationCount]] pname:maxSamplerAllocationCount is
the maximum number of sampler objects, as created by
flink:vkCreateSampler, which can: simultaneously exist on a device.
* [[limits-bufferImageGranularity]] pname:bufferImageGranularity is the
granularity, in bytes, at which buffer or linear image resources, and
optimal image resources can: be bound to adjacent offsets in the same
sname:VkDeviceMemory object without aliasing.
See <<resources-bufferimagegranularity,Buffer-Image Granularity>> for
more details.
* [[limits-sparseAddressSpaceSize]] pname:sparseAddressSpaceSize is the
total amount of address space available, in bytes, for sparse memory
resources.
This is an upper bound on the sum of the sizes of all sparse resources,
regardless of whether any memory is bound to them.
* [[limits-maxBoundDescriptorSets]] pname:maxBoundDescriptorSets is the
maximum number of descriptor sets that can: be simultaneously used by a
pipeline.
All code:DescriptorSet decorations in shader modules must: have a value
less than pname:maxBoundDescriptorSets.
See <<descriptorsets-sets>>.
* [[limits-maxPerStageDescriptorSamplers]]
pname:maxPerStageDescriptorSamplers is the maximum number of samplers
that can: be accessible to a single shader stage in a pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
A descriptor is accessible to a shader stage when the pname:stageFlags
member of the sname:VkDescriptorSetLayoutBinding structure has the bit
for that shader stage set.
See <<descriptorsets-sampler>> and
<<descriptorsets-combinedimagesampler>>.
* [[limits-maxPerStageDescriptorUniformBuffers]]
pname:maxPerStageDescriptorUniformBuffers is the maximum number of
uniform buffers that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
A descriptor is accessible to a shader stage when the pname:stageFlags
member of the sname:VkDescriptorSetLayoutBinding structure has the bit
for that shader stage set.
See <<descriptorsets-uniformbuffer>> and
<<descriptorsets-uniformbufferdynamic>>.
* [[limits-maxPerStageDescriptorStorageBuffers]]
pname:maxPerStageDescriptorStorageBuffers is the maximum number of
storage buffers that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
See <<descriptorsets-storagebuffer>> and
<<descriptorsets-storagebufferdynamic>>.
* [[limits-maxPerStageDescriptorSampledImages]]
pname:maxPerStageDescriptorSampledImages is the maximum number of
sampled images that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
See <<descriptorsets-combinedimagesampler>>,
<<descriptorsets-sampledimage>>, and
<<descriptorsets-uniformtexelbuffer>>.
* [[limits-maxPerStageDescriptorStorageImages]]
pname:maxPerStageDescriptorStorageImages is the maximum number of
storage images that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
See <<descriptorsets-storageimage>>, and
<<descriptorsets-storagetexelbuffer>>.
* [[limits-maxPerStageDescriptorInputAttachments]]
pname:maxPerStageDescriptorInputAttachments is the maximum number of
input attachments that can: be accessible to a single shader stage in a
pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
A descriptor is accessible to a pipeline shader stage when the
pname:stageFlags member of the sname:VkDescriptorSetLayoutBinding
structure has the bit for that shader stage set.
These are only supported for the fragment stage.
See <<descriptorsets-inputattachment>>.
* [[limits-maxPerStageResources]] pname:maxPerStageResources is the
maximum number of resources that can: be accessible to a single shader
stage in a pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
For the fragment shader stage the framebuffer color attachments also
count against this limit.
* [[limits-maxDescriptorSetSamplers]] pname:maxDescriptorSetSamplers is
the maximum number of samplers that can: be included in a pipeline
layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-sampler>> and
<<descriptorsets-combinedimagesampler>>.
* [[limits-maxDescriptorSetUniformBuffers]]
pname:maxDescriptorSetUniformBuffers is the maximum number of uniform
buffers that can: be included in a pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-uniformbuffer>> and
<<descriptorsets-uniformbufferdynamic>>.
* [[limits-maxDescriptorSetUniformBuffersDynamic]]
pname:maxDescriptorSetUniformBuffersDynamic is the maximum number of
dynamic uniform buffers that can: be included in a pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-uniformbufferdynamic>>.
* [[limits-maxDescriptorSetStorageBuffers]]
pname:maxDescriptorSetStorageBuffers is the maximum number of storage
buffers that can: be included in a pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-storagebuffer>> and
<<descriptorsets-storagebufferdynamic>>.
* [[limits-maxDescriptorSetStorageBuffersDynamic]]
pname:maxDescriptorSetStorageBuffersDynamic is the maximum number of
dynamic storage buffers that can: be included in a pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC count against this
limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-storagebufferdynamic>>.
* [[limits-maxDescriptorSetSampledImages]]
pname:maxDescriptorSetSampledImages is the maximum number of sampled
images that can: be included in a pipeline layout.
Descriptors with a type of
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-combinedimagesampler>>,
<<descriptorsets-sampledimage>>, and
<<descriptorsets-uniformtexelbuffer>>.
* [[limits-maxDescriptorSetStorageImages]]
pname:maxDescriptorSetStorageImages is the maximum number of storage
images that can: be included in a pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-storageimage>>, and
<<descriptorsets-storagetexelbuffer>>.
* [[limits-maxDescriptorSetInputAttachments]]
pname:maxDescriptorSetInputAttachments is the maximum number of input
attachments that can: be included in a pipeline layout.
Descriptors with a type of ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
count against this limit.
ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
Only descriptors in descriptor set layouts created without the
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set
count against this limit.
endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
See <<descriptorsets-inputattachment>>.
* [[limits-maxVertexInputAttributes]] pname:maxVertexInputAttributes is
the maximum number of vertex input attributes that can: be specified for
a graphics pipeline.
These are described in the array of
sname:VkVertexInputAttributeDescription structures that are provided at
graphics pipeline creation time via the
pname:pVertexAttributeDescriptions member of the
slink:VkPipelineVertexInputStateCreateInfo structure.
See <<fxvertex-attrib>> and <<fxvertex-input>>.
* [[limits-maxVertexInputBindings]] pname:maxVertexInputBindings is the
maximum number of vertex buffers that can: be specified for providing
vertex attributes to a graphics pipeline.
These are described in the array of
sname:VkVertexInputBindingDescription structures that are provided at
graphics pipeline creation time via the pname:pVertexBindingDescriptions
member of the slink:VkPipelineVertexInputStateCreateInfo structure.
The pname:binding member of sname:VkVertexInputBindingDescription must:
be less than this limit.
See <<fxvertex-input>>.
* [[limits-maxVertexInputAttributeOffset]]
pname:maxVertexInputAttributeOffset is the maximum vertex input
attribute offset that can: be added to the vertex input binding stride.
The pname:offset member of the sname:VkVertexInputAttributeDescription
structure must: be less than or equal to this limit.
See <<fxvertex-input>>.
* [[limits-maxVertexInputBindingStride]] pname:maxVertexInputBindingStride
is the maximum vertex input binding stride that can: be specified in a
vertex input binding.
The pname:stride member of the sname:VkVertexInputBindingDescription
structure must: be less than or equal to this limit.
See <<fxvertex-input>>.
* [[limits-maxVertexOutputComponents]] pname:maxVertexOutputComponents is
the maximum number of components of output variables which can: be
output by a vertex shader.
See <<shaders-vertex>>.
* [[limits-maxTessellationGenerationLevel]]
pname:maxTessellationGenerationLevel is the maximum tessellation
generation level supported by the fixed-function tessellation primitive
generator.
See <<tessellation>>.
* [[limits-maxTessellationPatchSize]] pname:maxTessellationPatchSize is
the maximum patch size, in vertices, of patches that can: be processed
by the tessellation control shader and tessellation primitive generator.
The pname:patchControlPoints member of the
slink:VkPipelineTessellationStateCreateInfo structure specified at
pipeline creation time and the value provided in the code:OutputVertices
execution mode of shader modules must: be less than or equal to this
limit.
See <<tessellation>>.
* [[limits-maxTessellationControlPerVertexInputComponents]]
pname:maxTessellationControlPerVertexInputComponents is the maximum
number of components of input variables which can: be provided as
per-vertex inputs to the tessellation control shader stage.
* [[limits-maxTessellationControlPerVertexOutputComponents]]
pname:maxTessellationControlPerVertexOutputComponents is the maximum
number of components of per-vertex output variables which can: be output
from the tessellation control shader stage.
* [[limits-maxTessellationControlPerPatchOutputComponents]]
pname:maxTessellationControlPerPatchOutputComponents is the maximum
number of components of per-patch output variables which can: be output
from the tessellation control shader stage.
* [[limits-maxTessellationControlTotalOutputComponents]]
pname:maxTessellationControlTotalOutputComponents is the maximum total
number of components of per-vertex and per-patch output variables which
can: be output from the tessellation control shader stage.
* [[limits-maxTessellationEvaluationInputComponents]]
pname:maxTessellationEvaluationInputComponents is the maximum number of
components of input variables which can: be provided as per-vertex
inputs to the tessellation evaluation shader stage.
* [[limits-maxTessellationEvaluationOutputComponents]]
pname:maxTessellationEvaluationOutputComponents is the maximum number of
components of per-vertex output variables which can: be output from the
tessellation evaluation shader stage.
* [[limits-maxGeometryShaderInvocations]]
pname:maxGeometryShaderInvocations is the maximum invocation count
supported for instanced geometry shaders.
The value provided in the code:Invocations execution mode of shader
modules must: be less than or equal to this limit.
See <<geometry>>.
* [[limits-maxGeometryInputComponents]] pname:maxGeometryInputComponents
is the maximum number of components of input variables which can: be
provided as inputs to the geometry shader stage.
* [[limits-maxGeometryOutputComponents]] pname:maxGeometryOutputComponents
is the maximum number of components of output variables which can: be
output from the geometry shader stage.
* [[limits-maxGeometryOutputVertices]] pname:maxGeometryOutputVertices is
the maximum number of vertices which can: be emitted by any geometry
shader.
* [[limits-maxGeometryTotalOutputComponents]]
pname:maxGeometryTotalOutputComponents is the maximum total number of
components of output variables, across all emitted vertices, which can:
be output from the geometry shader stage.
* [[limits-maxFragmentInputComponents]] pname:maxFragmentInputComponents
is the maximum number of components of input variables which can: be
provided as inputs to the fragment shader stage.
* [[limits-maxFragmentOutputAttachments]]
pname:maxFragmentOutputAttachments is the maximum number of output
attachments which can: be written to by the fragment shader stage.
* [[limits-maxFragmentDualSrcAttachments]]
pname:maxFragmentDualSrcAttachments is the maximum number of output
attachments which can: be written to by the fragment shader stage when
blending is enabled and one of the dual source blend modes is in use.
See <<framebuffer-dsb>> and <<features-dualSrcBlend,dualSrcBlend>>.
* [[limits-maxFragmentCombinedOutputResources]]
pname:maxFragmentCombinedOutputResources is the total number of storage
buffers, storage images, and output code:Location decorated color
attachments (described in <<interfaces-fragmentoutput, Fragment Output
Interface>>) which can: be used in the fragment shader stage.
* [[limits-maxComputeSharedMemorySize]] pname:maxComputeSharedMemorySize
is the maximum total storage size, in bytes, available for variables
declared with the code:Workgroup storage class in shader modules (or
with the code:shared storage qualifier in GLSL) in the compute shader
stage.
ifdef::VK_KHR_workgroup_memory_explicit_layout[]
When variables declared with the code:Workgroup storage class are
explicitly laid out (hence they are also decorated with code:Block), the
amount of storage consumed is the size of the largest Block variable,
not counting any padding at the end.
endif::VK_KHR_workgroup_memory_explicit_layout[]
The amount of storage consumed by the
ifdef::VK_KHR_workgroup_memory_explicit_layout[]
non-Block
endif::VK_KHR_workgroup_memory_explicit_layout[]
variables declared with the code:Workgroup storage class is
implementation-dependent.
However, the amount of storage consumed may not exceed the largest block
size that would be obtained if all active
ifdef::VK_KHR_workgroup_memory_explicit_layout[]
non-Block
endif::VK_KHR_workgroup_memory_explicit_layout[]
variables declared with code:Workgroup storage class were assigned
offsets in an arbitrary order by successively taking the smallest valid
offset according to the <<interfaces-resources-standard-layout,Standard
Storage Buffer Layout>> rules.
(This is equivalent to using the GLSL std430 layout rules.)
* [[limits-maxComputeWorkGroupCount]] pname:maxComputeWorkGroupCount[3] is
the maximum number of local workgroups that can: be dispatched by a
single dispatching command.
These three values represent the maximum number of local workgroups for
the X, Y, and Z dimensions, respectively.
The workgroup count parameters to the dispatching commands must: be less
than or equal to the corresponding limit.
See <<dispatch>>.
* [[limits-maxComputeWorkGroupInvocations]]
pname:maxComputeWorkGroupInvocations is the maximum total number of
compute shader invocations in a single local workgroup.
The product of the X, Y, and Z sizes, as specified by the code:LocalSize
execution mode in shader modules or by the object decorated by the
code:WorkgroupSize decoration, must: be less than or equal to this
limit.
* [[limits-maxComputeWorkGroupSize]] pname:maxComputeWorkGroupSize[3] is
the maximum size of a local compute workgroup, per dimension.
These three values represent the maximum local workgroup size in the X,
Y, and Z dimensions, respectively.
The pname:x, pname:y, and pname:z sizes, as specified by the
code:LocalSize execution mode or by the object decorated by the
code:WorkgroupSize decoration in shader modules, must: be less than or
equal to the corresponding limit.
* [[limits-subPixelPrecisionBits]] pname:subPixelPrecisionBits is the
number of bits of subpixel precision in framebuffer coordinates
[eq]#x~f~# and [eq]#y~f~#.
See <<primsrast>>.
* [[limits-subTexelPrecisionBits]] pname:subTexelPrecisionBits is the
number of bits of precision in the division along an axis of an image
used for minification and magnification filters.
[eq]#2^pname:subTexelPrecisionBits^# is the actual number of divisions
along each axis of the image represented.
Sub-texel values calculated during image sampling will snap to these
locations when generating the filtered results.
* [[limits-mipmapPrecisionBits]] pname:mipmapPrecisionBits is the number
of bits of division that the LOD calculation for mipmap fetching get
snapped to when determining the contribution from each mip level to the
mip filtered results.
[eq]#2^pname:mipmapPrecisionBits^# is the actual number of divisions.
* [[limits-maxDrawIndexedIndexValue]] pname:maxDrawIndexedIndexValue is
the maximum index value that can: be used for indexed draw calls when
using 32-bit indices.
This excludes the primitive restart index value of 0xFFFFFFFF.
See <<features-fullDrawIndexUint32,fullDrawIndexUint32>>.
* [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the
maximum draw count that is supported for indirect draw calls.
See <<features-multiDrawIndirect,multiDrawIndirect>>.
* [[limits-maxSamplerLodBias]] pname:maxSamplerLodBias is the maximum
absolute sampler LOD bias.
The sum of the pname:mipLodBias member of the slink:VkSamplerCreateInfo
structure and the code:Bias operand of image sampling operations in
shader modules (or 0 if no code:Bias operand is provided to an image
sampling operation) are clamped to the range
[eq]#[-pname:maxSamplerLodBias,+pname:maxSamplerLodBias]#.
See <<samplers-mipLodBias>>.
* [[limits-maxSamplerAnisotropy]] pname:maxSamplerAnisotropy is the
maximum degree of sampler anisotropy.
The maximum degree of anisotropic filtering used for an image sampling
operation is the minimum of the pname:maxAnisotropy member of the
slink:VkSamplerCreateInfo structure and this limit.
See <<samplers-maxAnisotropy>>.
* [[limits-maxViewports]] pname:maxViewports is the maximum number of
active viewports.
The pname:viewportCount member of the
slink:VkPipelineViewportStateCreateInfo structure that is provided at
pipeline creation must: be less than or equal to this limit.
* [[limits-maxViewportDimensions]] pname:maxViewportDimensions[2] are the
maximum viewport dimensions in the X (width) and Y (height) dimensions,
respectively.
The maximum viewport dimensions must: be greater than or equal to the
largest image which can: be created and used as a framebuffer
attachment.
See <<vertexpostproc-viewport,Controlling the Viewport>>.
* [[limits-viewportboundsrange]] pname:viewportBoundsRange[2] is the
[eq]#[minimum, maximum]# range that the corners of a viewport must: be
contained in.
This range must: be at least [eq]#[-2 {times} pname:size, 2 {times}
pname:size - 1]#, where [eq]#pname:size =
max(pname:maxViewportDimensions[0], pname:maxViewportDimensions[1])#.
See <<vertexpostproc-viewport,Controlling the Viewport>>.
+
[NOTE]
.Note
====
The intent of the pname:viewportBoundsRange limit is to allow a maximum
sized viewport to be arbitrarily shifted relative to the output target as
long as at least some portion intersects.
This would give a bounds limit of [eq]#[-pname:size {plus} 1, 2 {times}
pname:size - 1]# which would allow all possible non-empty-set intersections
of the output target and the viewport.
Since these numbers are typically powers of two, picking the signed number
range using the smallest possible number of bits ends up with the specified
range.
====
* [[limits-viewportSubPixelBits]] pname:viewportSubPixelBits is the number
of bits of subpixel precision for viewport bounds.
The subpixel precision that floating-point viewport bounds are
interpreted at is given by this limit.
* [[limits-minMemoryMapAlignment]] pname:minMemoryMapAlignment is the
minimum required: alignment, in bytes, of host visible memory
allocations within the host address space.
When mapping a memory allocation with flink:vkMapMemory, subtracting
pname:offset bytes from the returned pointer will always produce an
integer multiple of this limit.
See <<memory-device-hostaccess>>.
* [[limits-minTexelBufferOffsetAlignment]]
pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
in bytes, for the pname:offset member of the
slink:VkBufferViewCreateInfo structure for texel buffers.
ifdef::VK_EXT_texel_buffer_alignment[]
If <<features-texelBufferAlignment,texelBufferAlignment>> is enabled,
this limit is equivalent to the maximum of the
<<limits-uniformTexelBufferOffsetAlignmentBytes,
pname:uniformTexelBufferOffsetAlignmentBytes>> and
<<limits-storageTexelBufferOffsetAlignmentBytes,
pname:storageTexelBufferOffsetAlignmentBytes>> members of
slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT, but smaller
alignment is optionally: allowed by
<<limits-storageTexelBufferOffsetSingleTexelAlignment,
pname:storageTexelBufferOffsetSingleTexelAlignment>> and
<<limits-uniformTexelBufferOffsetSingleTexelAlignment,
pname:uniformTexelBufferOffsetSingleTexelAlignment>>.
If <<features-texelBufferAlignment,texelBufferAlignment>> is not
enabled,
endif::VK_EXT_texel_buffer_alignment[]
slink:VkBufferViewCreateInfo::pname:offset must: be a multiple of this
value.
* [[limits-minUniformBufferOffsetAlignment]]
pname:minUniformBufferOffsetAlignment is the minimum required:
alignment, in bytes, for the pname:offset member of the
sname:VkDescriptorBufferInfo structure for uniform buffers.
When a descriptor of type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC is updated, the
pname:offset must: be an integer multiple of this limit.
Similarly, dynamic offsets for uniform buffers must: be multiples of
this limit.
* [[limits-minStorageBufferOffsetAlignment]]
pname:minStorageBufferOffsetAlignment is the minimum required:
alignment, in bytes, for the pname:offset member of the
sname:VkDescriptorBufferInfo structure for storage buffers.
When a descriptor of type ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC is updated, the
pname:offset must: be an integer multiple of this limit.
Similarly, dynamic offsets for storage buffers must: be multiples of
this limit.
* [[limits-minTexelOffset]] pname:minTexelOffset is the minimum offset
value for the code:ConstOffset image operand of any of the
code:OpImageSample* or code:OpImageFetch* image instructions.
* [[limits-maxTexelOffset]] pname:maxTexelOffset is the maximum offset
value for the code:ConstOffset image operand of any of the
code:OpImageSample* or code:OpImageFetch* image instructions.
* [[limits-minTexelGatherOffset]] pname:minTexelGatherOffset is the
minimum offset value for the code:Offset, code:ConstOffset, or
code:ConstOffsets image operands of any of the code:OpImage*Gather image
instructions.
* [[limits-maxTexelGatherOffset]] pname:maxTexelGatherOffset is the
maximum offset value for the code:Offset, code:ConstOffset, or
code:ConstOffsets image operands of any of the code:OpImage*Gather image
instructions.
* [[limits-minInterpolationOffset]] pname:minInterpolationOffset is the
base minimum (inclusive) negative offset value for the code:Offset
operand of the code:InterpolateAtOffset extended instruction.
* [[limits-maxInterpolationOffset]] pname:maxInterpolationOffset is the
base maximum (inclusive) positive offset value for the code:Offset
operand of the code:InterpolateAtOffset extended instruction.
* [[limits-subPixelInterpolationOffsetBits]]
pname:subPixelInterpolationOffsetBits is the number of fractional bits
that the code:x and code:y offsets to the code:InterpolateAtOffset
extended instruction may: be rounded to as fixed-point values.
* [[limits-maxFramebufferWidth]] pname:maxFramebufferWidth is the maximum
width for a framebuffer.
The pname:width member of the slink:VkFramebufferCreateInfo structure
must: be less than or equal to this limit.
* [[limits-maxFramebufferHeight]] pname:maxFramebufferHeight is the
maximum height for a framebuffer.
The pname:height member of the slink:VkFramebufferCreateInfo structure
must: be less than or equal to this limit.
* [[limits-maxFramebufferLayers]] pname:maxFramebufferLayers is the
maximum layer count for a layered framebuffer.
The pname:layers member of the slink:VkFramebufferCreateInfo structure
must: be less than or equal to this limit.
* [[limits-framebufferColorSampleCounts]]
pname:framebufferColorSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the color sample counts that are
supported for all framebuffer color attachments with floating- or
fixed-point formats.
ifndef::VK_VERSION_1_2[]
There is no limit that specifies the color sample counts that are
supported for all color attachments with integer formats.
endif::VK_VERSION_1_2[]
ifdef::VK_VERSION_1_2[]
For color attachments with integer formats, see
<<limits-framebufferIntegerColorSampleCounts,
pname:framebufferIntegerColorSampleCounts>>.
endif::VK_VERSION_1_2[]
* [[limits-framebufferDepthSampleCounts]]
pname:framebufferDepthSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the supported depth sample counts
for all framebuffer depth/stencil attachments, when the format includes
a depth component.
* [[limits-framebufferStencilSampleCounts]]
pname:framebufferStencilSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the supported stencil sample
counts for all framebuffer depth/stencil attachments, when the format
includes a stencil component.
* [[limits-framebufferNoAttachmentsSampleCounts]]
pname:framebufferNoAttachmentsSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the supported sample counts for a
<<renderpass-noattachments, subpass which uses no attachments>>.
* [[limits-maxColorAttachments]] pname:maxColorAttachments is the maximum
number of color attachments that can: be used by a subpass in a render
pass.
The pname:colorAttachmentCount member of the sname:VkSubpassDescription
ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
or sname:VkSubpassDescription2
endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
structure must: be less than or equal to this limit.
* [[limits-sampledImageColorSampleCounts]]
pname:sampledImageColorSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a non-integer color
format.
* [[limits-sampledImageIntegerSampleCounts]]
pname:sampledImageIntegerSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and an integer color
format.
* [[limits-sampledImageDepthSampleCounts]]
pname:sampledImageDepthSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a depth format.
* [[limits-sampledImageStencilSampleCounts]]
pname:sampledImageStencilSampleCounts is a bitmask^1^ of
elink:VkSampleCountFlagBits indicating the sample counts supported for
all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL, pname:usage
containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, and a stencil format.
* [[limits-storageImageSampleCounts]] pname:storageImageSampleCounts is a
bitmask^1^ of elink:VkSampleCountFlagBits indicating the sample counts
supported for all 2D images created with ename:VK_IMAGE_TILING_OPTIMAL,
and pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT.
* [[limits-maxSampleMaskWords]] pname:maxSampleMaskWords is the maximum
number of array elements of a variable decorated with the
code:SampleMask built-in decoration.
* [[limits-timestampComputeAndGraphics]] pname:timestampComputeAndGraphics
specifies support for timestamps on all graphics and compute queues.
If this limit is set to ename:VK_TRUE, all queues that advertise the
ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT in the
sname:VkQueueFamilyProperties::pname:queueFlags support
sname:VkQueueFamilyProperties::pname:timestampValidBits of at least 36.
See <<queries-timestamps, Timestamp Queries>>.
* [[limits-timestampPeriod]] pname:timestampPeriod is the number of
nanoseconds required: for a timestamp query to be incremented by 1.
See <<queries-timestamps, Timestamp Queries>>.
* [[limits-maxClipDistances]] pname:maxClipDistances is the maximum number
of clip distances that can: be used in a single shader stage.
The size of any array declared with the code:ClipDistance built-in
decoration in a shader module must: be less than or equal to this limit.
* [[limits-maxCullDistances]] pname:maxCullDistances is the maximum number
of cull distances that can: be used in a single shader stage.
The size of any array declared with the code:CullDistance built-in
decoration in a shader module must: be less than or equal to this limit.
* [[limits-maxCombinedClipAndCullDistances]]
pname:maxCombinedClipAndCullDistances is the maximum combined number of
clip and cull distances that can: be used in a single shader stage.
The sum of the sizes of any pair of arrays declared with the
code:ClipDistance and code:CullDistance built-in decoration used by a
single shader stage in a shader module must: be less than or equal to
this limit.
* [[limits-discreteQueuePriorities]] pname:discreteQueuePriorities is the
number of discrete priorities that can: be assigned to a queue based on
the value of each member of
slink:VkDeviceQueueCreateInfo::pname:pQueuePriorities.
This must: be at least 2, and levels must: be spread evenly over the
range, with at least one level at 1.0, and another at 0.0.
See <<devsandqueues-priority>>.
* [[limits-pointSizeRange]] pname:pointSizeRange[2] is the range
[eq]#[pname:minimum,pname:maximum]# of supported sizes for points.
Values written to variables decorated with the code:PointSize built-in
decoration are clamped to this range.
* [[limits-lineWidthRange]] pname:lineWidthRange[2] is the range
[eq]#[pname:minimum,pname:maximum]# of supported widths for lines.
Values specified by the pname:lineWidth member of the
slink:VkPipelineRasterizationStateCreateInfo or the pname:lineWidth
parameter to fname:vkCmdSetLineWidth are clamped to this range.
* [[limits-pointSizeGranularity]] pname:pointSizeGranularity is the
granularity of supported point sizes.
Not all point sizes in the range defined by pname:pointSizeRange are
supported.
This limit specifies the granularity (or increment) between successive
supported point sizes.
* [[limits-lineWidthGranularity]] pname:lineWidthGranularity is the
granularity of supported line widths.
Not all line widths in the range defined by pname:lineWidthRange are
supported.
This limit specifies the granularity (or increment) between successive
supported line widths.
* [[limits-strictLines]] pname:strictLines specifies whether lines are
rasterized according to the preferred method of rasterization.
If set to ename:VK_FALSE, lines may: be rasterized under a relaxed set
of rules.
If set to ename:VK_TRUE, lines are rasterized as per the strict
definition.
See <<primsrast-lines-basic,Basic Line Segment Rasterization>>.
* [[limits-standardSampleLocations]] pname:standardSampleLocations
specifies whether rasterization uses the standard sample locations as
documented in <<primsrast-multisampling,Multisampling>>.
If set to ename:VK_TRUE, the implementation uses the documented sample
locations.
If set to ename:VK_FALSE, the implementation may: use different sample
locations.
* [[limits-optimalBufferCopyOffsetAlignment]]
pname:optimalBufferCopyOffsetAlignment is the optimal buffer offset
alignment in bytes for
ifndef::VK_KHR_copy_commands2[]
flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
endif::VK_KHR_copy_commands2[]
ifdef::VK_KHR_copy_commands2[]
flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
endif::VK_KHR_copy_commands2[]
The per texel alignment requirements are enforced, but applications
should: use the optimal alignment for optimal performance and power use.
* [[limits-optimalBufferCopyRowPitchAlignment]]
pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
alignment in bytes for
ifndef::VK_KHR_copy_commands2[]
flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
endif::VK_KHR_copy_commands2[]
ifdef::VK_KHR_copy_commands2[]
flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
endif::VK_KHR_copy_commands2[]
Row pitch is the number of bytes between texels with the same X
coordinate in adjacent rows (Y coordinates differ by one).
The per texel alignment requirements are enforced, but applications
should: use the optimal alignment for optimal performance and power use.
* [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and
alignment in bytes that bounds concurrent access to
<<memory-device-hostaccess, host-mapped device memory>>.
1::
For all bitmasks of elink:VkSampleCountFlagBits, the sample count limits
defined above represent the minimum supported sample counts for each
image type.
Individual images may: support additional sample counts, which are
queried using flink:vkGetPhysicalDeviceImageFormatProperties as
described in <<features-supported-sample-counts, Supported Sample
Counts>>.
include::{generated}/validity/structs/VkPhysicalDeviceLimits.txt[]
--
[open,refpage='VkSampleCountFlagBits',desc='Bitmask specifying sample counts supported for an image used for storage operations',type='enums']
--
Bits which may: be set in the sample count limits returned by
slink:VkPhysicalDeviceLimits, as well as in other queries and structures
representing image sample counts, are:
include::{generated}/api/enums/VkSampleCountFlagBits.txt[]
* ename:VK_SAMPLE_COUNT_1_BIT specifies an image with one sample per
pixel.
* ename:VK_SAMPLE_COUNT_2_BIT specifies an image with 2 samples per pixel.
* ename:VK_SAMPLE_COUNT_4_BIT specifies an image with 4 samples per pixel.
* ename:VK_SAMPLE_COUNT_8_BIT specifies an image with 8 samples per pixel.
* ename:VK_SAMPLE_COUNT_16_BIT specifies an image with 16 samples per
pixel.
* ename:VK_SAMPLE_COUNT_32_BIT specifies an image with 32 samples per
pixel.
* ename:VK_SAMPLE_COUNT_64_BIT specifies an image with 64 samples per
pixel.
--
[open,refpage='VkSampleCountFlags',desc='Bitmask of VkSampleCountFlagBits',type='flags']
--
include::{generated}/api/flags/VkSampleCountFlags.txt[]
tname:VkSampleCountFlags is a bitmask type for setting a mask of zero or
more elink:VkSampleCountFlagBits.
--
ifdef::VK_KHR_push_descriptor[]
[open,refpage='VkPhysicalDevicePushDescriptorPropertiesKHR',desc='Structure describing push descriptor limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDevicePushDescriptorPropertiesKHR structure is defined
as:
include::{generated}/api/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to a structure extending this
structure.
* [[limits-maxPushDescriptors]] pname:maxPushDescriptors is the maximum
number of descriptors that can: be used in a descriptor set created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR
include::{chapters}/limits.txt[tag=limits_desc]
include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
--
endif::VK_KHR_push_descriptor[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
[open,refpage='VkPhysicalDeviceMultiviewProperties',desc='Structure describing multiview limits that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceMultiviewProperties structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceMultiviewProperties.txt[]
ifdef::VK_KHR_multiview[]
or the equivalent
include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.txt[]
endif::VK_KHR_multiview[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to a structure extending this
structure.
// Must have preceding whitespace
ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
ifndef::VK_VERSION_1_2[:anchor-prefix:]
// tag::VK_KHR_multiview-properties[]
* [[{anchor-prefix}limits-maxMultiviewViewCount]]
pname:maxMultiviewViewCount is one greater than the maximum view index
that can: be used in a subpass.
* [[{anchor-prefix}limits-maxMultiviewInstanceIndex]]
pname:maxMultiviewInstanceIndex is the maximum valid value of instance
index allowed to be generated by a drawing command recorded within a
subpass of a multiview render pass instance.
// end::VK_KHR_multiview-properties[]
:refpage: VkPhysicalDeviceMultiviewProperties
include::{chapters}/limits.txt[tag=limits_desc]
include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
[open,refpage='VkPhysicalDeviceFloatControlsProperties',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs',alias='VkPhysicalDeviceFloatControlsPropertiesKHR']
--
The sname:VkPhysicalDeviceFloatControlsProperties structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceFloatControlsProperties.txt[]
ifdef::VK_KHR_shader_float_controls[]
or the equivalent
include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
endif::VK_KHR_shader_float_controls[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to a structure extending this
structure.
// Must have preceding whitespace
ifdef::VK_VERSION_1_2[:anchor-prefix: extension-]
ifndef::VK_VERSION_1_2[:anchor-prefix:]
// tag::VK_KHR_shader_float_controls-properties[]
* [[{anchor-prefix}features-denormBehaviorIndependence]]
pname:denormBehaviorIndependence is a
elink:VkShaderFloatControlsIndependence value indicating whether, and
how, denorm behavior can be set independently for different bit widths.
* [[{anchor-prefix}features-roundingModeIndependence]]
pname:roundingModeIndependence is a
elink:VkShaderFloatControlsIndependence value indicating whether, and
how, rounding modes can be set independently for different bit widths.
* [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat16]]
pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
latexmath:[\pm\infty] can: be preserved in 16-bit floating-point
computations.
It also indicates whether the code:SignedZeroInfNanPreserve execution
mode can: be used for 16-bit floating-point types.
* [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat32]]
pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
latexmath:[\pm\infty] can: be preserved in 32-bit floating-point
computations.
It also indicates whether the code:SignedZeroInfNanPreserve execution
mode can: be used for 32-bit floating-point types.
* [[{anchor-prefix}limits-shaderSignedZeroInfNanPreserveFloat64]]
pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
latexmath:[\pm\infty] can: be preserved in 64-bit floating-point
computations.
It also indicates whether the code:SignedZeroInfNanPreserve execution
mode can: be used for 64-bit floating-point types.
* [[{anchor-prefix}limits-shaderDenormPreserveFloat16]]
pname:shaderDenormPreserveFloat16 is a boolean value indicating whether
denormals can: be preserved in 16-bit floating-point computations.
It also indicates whether the code:DenormPreserve execution mode can: be
used for 16-bit floating-point types.
* [[{anchor-prefix}limits-shaderDenormPreserveFloat32]]
pname:shaderDenormPreserveFloat32 is a boolean value indicating whether
denormals can: be preserved in 32-bit floating-point computations.
It also indicates whether the code:DenormPreserve execution mode can: be
used for 32-bit floating-point types.
* [[{anchor-prefix}limits-shaderDenormPreserveFloat64]]
pname:shaderDenormPreserveFloat64 is a boolean value indicating whether
denormals can: be preserved in 64-bit floating-point computations.
It also indicates whether the code:DenormPreserve execution mode can: be
used for 64-bit floating-point types.
* [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat16]]
pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating
whether denormals can: be flushed to zero in 16-bit floating-point
computations.
It also indicates whether the code:DenormFlushToZero execution mode can:
be used for 16-bit floating-point types.
* [[{anchor-prefix}limits-shaderDenormFlushToZeroFloat32]]