-
Notifications
You must be signed in to change notification settings - Fork 453
/
features.txt
3892 lines (3310 loc) · 185 KB
/
features.txt
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 (c) 2015-2020 Khronos Group.
//
// SPDX-License-Identifier: CC-BY-4.0
[[features]]
= Features
_Features_ describe functionality which is not supported on all
implementations.
Features are properties of the physical device.
Features are optional:, and must: be explicitly enabled before use.
Support for features is reported and enabled on a per-feature basis.
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[NOTE]
.Note
====
Features are reported via the basic slink:VkPhysicalDeviceFeatures
structure, as well as the extensible structure
sname:VkPhysicalDeviceFeatures2, which was added in the
`<<VK_KHR_get_physical_device_properties2>>` extension and included in
Vulkan 1.1.
When new features are added in future Vulkan versions or extensions, each
extension should: introduce one new feature structure, if needed.
This structure can: be added to the pname:pNext chain of the
sname:VkPhysicalDeviceFeatures2 structure.
====
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
For convenience, new core versions of Vulkan may: introduce new unified
features structures for features promoted from extensions.
At the same time, the extension's original features structure (if any) is
also promoted to the core API, and is an alias of the extension's structure.
This results in multiple names for the same feature: in the original
extension's feature structure and the promoted structure alias, in the
unified feature structure.
When a feature was implicitly supported and enabled in the extension, but an
explicit name was added during promotion, then the extension itself acts as
an alias for the feature as listed in the table below.
All aliases of the same feature in the core API must: be reported
consistently: either all must: be reported as supported, or none of them.
When a promoted extension is available, any corresponding feature aliases
must: be supported.
[[features-extension-aliases]]
.Extension Feature Aliases
[width="100%",options="header"]
|====
| Extension | Feature(s)
ifdef::VK_VERSION_1_2[]
ifdef::VK_KHR_draw_indirect_count[]
| `<<VK_KHR_draw_indirect_count>>` | <<features-drawIndirectCount,drawIndirectCount>>
endif::VK_KHR_draw_indirect_count[]
ifdef::VK_KHR_sampler_mirror_clamp_to_edge[]
| `<<VK_KHR_sampler_mirror_clamp_to_edge>>` | <<features-samplerMirrorClampToEdge,samplerMirrorClampToEdge>>
endif::VK_KHR_sampler_mirror_clamp_to_edge[]
ifdef::VK_EXT_descriptor_indexing[]
| `<<VK_EXT_descriptor_indexing>>` | <<features-descriptorIndexing,descriptorIndexing>>
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_EXT_sampler_filter_minmax[]
| `<<VK_EXT_sampler_filter_minmax>>` | <<features-samplerFilterMinmax,samplerFilterMinmax>>
endif::VK_EXT_sampler_filter_minmax[]
ifdef::VK_EXT_shader_viewport_index_layer[]
| `<<VK_EXT_shader_viewport_index_layer>>` | <<features-shaderOutputViewportIndex,shaderOutputViewportIndex>>, <<features-shaderOutputLayer,shaderOutputLayer>>
endif::VK_EXT_shader_viewport_index_layer[]
endif::VK_VERSION_1_2[]
|====
[open,refpage='vkGetPhysicalDeviceFeatures',desc='Reports capabilities of a physical device',type='protos']
--
To query supported features, call:
include::{generated}/api/protos/vkGetPhysicalDeviceFeatures.txt[]
* pname:physicalDevice is the physical device from which to query the
supported features.
* pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures
structure in which the physical device features are returned.
For each feature, a value of ename:VK_TRUE specifies that the feature is
supported on this physical device, and ename:VK_FALSE specifies that the
feature is not supported.
include::{generated}/validity/protos/vkGetPhysicalDeviceFeatures.txt[]
--
Fine-grained features used by a logical device must: be enabled at
sname:VkDevice creation time.
If a feature is enabled that the physical device does not support,
sname:VkDevice creation will fail and return
ename:VK_ERROR_FEATURE_NOT_PRESENT.
The fine-grained features are enabled by passing a pointer to the
sname:VkPhysicalDeviceFeatures structure via the pname:pEnabledFeatures
member of the slink:VkDeviceCreateInfo structure that is passed into the
fname:vkCreateDevice call.
If a member of pname:pEnabledFeatures is set to ename:VK_TRUE or
ename:VK_FALSE, then the device will be created with the indicated feature
enabled or disabled, respectively.
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
Features can: also be enabled by using the slink:VkPhysicalDeviceFeatures2
structure.
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
If an application wishes to enable all features supported by a device, it
can: simply pass in the sname:VkPhysicalDeviceFeatures structure that was
previously returned by fname:vkGetPhysicalDeviceFeatures.
To disable an individual feature, the application can: set the desired
member to ename:VK_FALSE in the same structure.
Setting pname:pEnabledFeatures to `NULL`
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
and not including a slink:VkPhysicalDeviceFeatures2 in the pname:pNext chain
of slink:VkDeviceCreateInfo
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
is equivalent to setting all members of the structure to ename:VK_FALSE.
[NOTE]
.Note
====
Some features, such as pname:robustBufferAccess, may: incur a runtime
performance cost.
Application writers should: carefully consider the implications of enabling
all supported features.
====
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='vkGetPhysicalDeviceFeatures2',desc='Reports capabilities of a physical device',type='protos']
--
To query supported features defined by the core or extensions, call:
ifdef::VK_VERSION_1_1[]
include::{generated}/api/protos/vkGetPhysicalDeviceFeatures2.txt[]
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command]
ifdef::VK_KHR_get_physical_device_properties2[]
include::{generated}/api/protos/vkGetPhysicalDeviceFeatures2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
* pname:physicalDevice is the physical device from which to query the
supported features.
* pname:pFeatures is a pointer to a slink:VkPhysicalDeviceFeatures2
structure in which the physical device features are returned.
Each structure in pname:pFeatures and its pname:pNext chain contains members
corresponding to fine-grained features.
fname:vkGetPhysicalDeviceFeatures2 writes each member to a boolean value
indicating whether that feature is supported.
include::{generated}/validity/protos/vkGetPhysicalDeviceFeatures2.txt[]
--
[open,refpage='VkPhysicalDeviceFeatures2',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceFeatures2 structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceFeatures2.txt[]
ifdef::VK_KHR_get_physical_device_properties2[]
or the equivalent
include::{generated}/api/structs/VkPhysicalDeviceFeatures2KHR.txt[]
endif::VK_KHR_get_physical_device_properties2[]
The sname:VkPhysicalDeviceFeatures2 structure is defined as:
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to a structure extending this
structure.
* pname:features is a slink:VkPhysicalDeviceFeatures structure describing
the fine-grained features of the Vulkan 1.0 API.
The pname:pNext chain of this structure is used to extend the structure with
features defined by extensions.
This structure can: be used in flink:vkGetPhysicalDeviceFeatures2 or can: be
included in the pname:pNext chain of a slink:VkDeviceCreateInfo structure,
in which case it controls which features are enabled in the device in lieu
of pname:pEnabledFeatures.
include::{generated}/validity/structs/VkPhysicalDeviceFeatures2.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
[open,refpage='VkPhysicalDeviceFeatures',desc='Structure describing the fine-grained features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceFeatures structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceFeatures.txt[]
The members of the sname:VkPhysicalDeviceFeatures structure describe the
following features:
* [[features-robustBufferAccess]] pname:robustBufferAccess specifies that
accesses to buffers are bounds-checked against the range of the buffer
descriptor (as determined by sname:VkDescriptorBufferInfo::pname:range,
slink:VkBufferViewCreateInfo::pname:range, or the size of the buffer).
Out of bounds accesses must: not cause application termination, and the
effects of shader loads, stores, and atomics must: conform to an
implementation-dependent behavior as described below.
** A buffer access is considered to be out of bounds if any of the
following are true:
*** The pointer was formed by code:OpImageTexelPointer and the coordinate
is less than zero or greater than or equal to the number of whole
elements in the bound range.
*** The pointer was not formed by code:OpImageTexelPointer and the object
pointed to is not wholly contained within the bound range.
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
This includes accesses performed via _variable pointers_ where the
buffer descriptor being accessed cannot be statically determined.
Uninitialized pointers and pointers equal to code:OpConstantNull are
treated as pointing to a zero-sized object, so all accesses through
such pointers are considered to be out of bounds.
endif::VK_VERSION_1_1,VK_KHR_variable_pointers[]
ifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
Buffer accesses through buffer device addresses are not
bounds-checked.
endif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
ifdef::VK_NV_cooperative_matrix[]
If the
<<features-cooperativeMatrixRobustBufferAccess,pname:cooperativeMatrixRobustBufferAccess>>
feature is not enabled, then accesses using
code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
may: not be bounds-checked.
endif::VK_NV_cooperative_matrix[]
+
[NOTE]
.Note
====
If a SPIR-V code:OpLoad instruction loads a structure and the tail end of
the structure is out of bounds, then all members of the structure are
considered out of bounds even if the members at the end are not statically
used.
====
*** If
ifdef::VK_EXT_robustness2[]
<<features-robustBufferAccess2,pname:robustBufferAccess2>> is not
enabled and
endif::VK_EXT_robustness2[]
any buffer access is determined to be out of bounds, then any other
access of the same type (load, store, or atomic) to the same buffer
that accesses an address less than 16 bytes away from the out of
bounds address may: also be considered out of bounds.
*** If the access is a load that reads from the same memory locations as a
prior store in the same shader invocation, with no other intervening
accesses to the same memory locations in that shader invocation, then
the result of the load may: be the value stored by the store
instruction, even if the access is out of bounds.
If the load is code:Volatile, then an out of bounds load must: return
the appropriate out of bounds value.
ifdef::VK_EXT_robustness2[]
** Accesses to descriptors written with a dlink:VK_NULL_HANDLE resource or
view are not considered to be out of bounds.
Instead, each type of descriptor access defines a specific behavior for
accesses to a null descriptor.
endif::VK_EXT_robustness2[]
** Out-of-bounds buffer loads will return any of the following values:
ifdef::VK_EXT_robustness2[]
*** If the access is to a uniform buffer and
<<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
loads of offsets between the end of the descriptor range and the end
of the descriptor range rounded up to a multiple of
<<limits-robustUniformBufferAccessSizeAlignment,robustUniformBufferAccessSizeAlignment>>
bytes must: return either zero values or the contents of the memory at
the offset being loaded.
Loads of offsets past the descriptor range rounded up to a multiple of
<<limits-robustUniformBufferAccessSizeAlignment,robustUniformBufferAccessSizeAlignment>>
bytes must: return zero values.
*** If the access is to a storage buffer and
<<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
loads of offsets between the end of the descriptor range and the end
of the descriptor range rounded up to a multiple of
<<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>
bytes must: return either zero values or the contents of the memory at
the offset being loaded.
Loads of offsets past the descriptor range rounded up to a multiple of
<<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>
bytes must: return zero values.
Similarly, stores to addresses between the end of the descriptor range
and the end of the descriptor range rounded up to a multiple of
<<limits-robustStorageBufferAccessSizeAlignment,robustStorageBufferAccessSizeAlignment>>
bytes may: be discarded.
*** Non-atomic accesses to storage buffers that are a multiple of 32 bits
may: be decomposed into 32-bit accesses that are individually
bounds-checked.
*** If the access is to an index buffer and
<<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
zero values must: be returned.
*** If the access is to a uniform texel buffer or storage texel buffer and
<<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled,
zero values must: be returned, and then
<<textures-conversion-to-rgba,Conversion to RGBA>> is applied based on
the buffer view's format.
endif::VK_EXT_robustness2[]
*** Values from anywhere within the memory range(s) bound to the buffer
(possibly including bytes of memory past the end of the buffer, up to
the end of the bound range).
*** Zero values, or [eq]#(0,0,0,x)# vectors for vector reads where x is a
valid value represented in the type of the vector components and may:
be any of:
**** 0, 1, or the maximum representable positive integer value, for signed
or unsigned integer components
**** 0.0 or 1.0, for floating-point components
** Out-of-bounds writes may: modify values within the memory range(s)
bound to the buffer, but must: not modify any other memory.
ifdef::VK_EXT_robustness2[]
*** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
enabled, out of bounds writes must: not modify any memory.
endif::VK_EXT_robustness2[]
** Out-of-bounds atomics may: modify values within the memory range(s)
bound to the buffer, but must: not modify any other memory, and return
an undefined: value.
ifdef::VK_EXT_robustness2[]
*** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
enabled, out of bounds atomics must: not modify any memory, and return
an undefined: value.
** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
disabled, vertex
endif::VK_EXT_robustness2[]
ifndef::VK_EXT_robustness2[]
** Vertex
endif::VK_EXT_robustness2[]
input attributes are considered out of bounds if the offset of the
attribute in the bound vertex buffer range plus the size of the
attribute is greater than either:
+
*** code:vertexBufferRangeSize, if [eq]#code:bindingStride == 0#; or
*** [eq]#(code:vertexBufferRangeSize - (code:vertexBufferRangeSize %
code:bindingStride))#
+
where code:vertexBufferRangeSize is the byte size of the memory range bound
to the vertex buffer binding and code:bindingStride is the byte stride of
the corresponding vertex input binding.
Further, if any vertex input attribute using a specific vertex input binding
is out of bounds, then all vertex input attributes using that vertex input
binding for that vertex shader invocation are considered out of bounds.
*** If a vertex input attribute is out of bounds, it will be assigned one
of the following values:
**** Values from anywhere within the memory range(s) bound to the buffer,
converted according to the format of the attribute.
**** Zero values, format converted according to the format of the
attribute.
**** Zero values, or [eq]#(0,0,0,x)# vectors, as described above.
ifdef::VK_EXT_robustness2[]
** If <<features-robustBufferAccess2,pname:robustBufferAccess2>> is
enabled, vertex input attributes are considered out of bounds if the
offset of the attribute in the bound vertex buffer range plus the size
of the attribute is greater than the byte size of the memory range
bound to the vertex buffer binding.
*** If a vertex input attribute is out of bounds, the
<<fxvertex-input-extraction,raw data>> extracted are zero values, and
missing G, B, or A components are <<fxvertex-input-extraction,filled
with [eq]#(0,0,1)#>>.
endif::VK_EXT_robustness2[]
** If pname:robustBufferAccess is not enabled, applications must: not
perform out of bounds accesses.
* [[features-fullDrawIndexUint32]] pname:fullDrawIndexUint32 specifies the
full 32-bit range of indices is supported for indexed draw calls when
using a elink:VkIndexType of ename:VK_INDEX_TYPE_UINT32.
pname:maxDrawIndexedIndexValue is the maximum index value that may: be
used (aside from the primitive restart index, which is always 2^32^-1
when the elink:VkIndexType is ename:VK_INDEX_TYPE_UINT32).
If this feature is supported, pname:maxDrawIndexedIndexValue must: be
2^32^-1; otherwise it must: be no smaller than 2^24^-1.
See <<limits-maxDrawIndexedIndexValue,maxDrawIndexedIndexValue>>.
* [[features-imageCubeArray]] pname:imageCubeArray specifies whether image
views with a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY can: be created, and that the
corresponding code:SampledCubeArray and code:ImageCubeArray SPIR-V
capabilities can: be used in shader code.
* [[features-independentBlend]] pname:independentBlend specifies whether
the sname:VkPipelineColorBlendAttachmentState settings are controlled
independently per-attachment.
If this feature is not enabled, the
sname:VkPipelineColorBlendAttachmentState settings for all color
attachments must: be identical.
Otherwise, a different sname:VkPipelineColorBlendAttachmentState can: be
provided for each bound color attachment.
* [[features-geometryShader]] pname:geometryShader specifies whether
geometry shaders are supported.
If this feature is not enabled, the ename:VK_SHADER_STAGE_GEOMETRY_BIT
and ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT enum values must: not be
used.
This also specifies whether shader modules can: declare the
code:Geometry capability.
* [[features-tessellationShader]] pname:tessellationShader specifies
whether tessellation control and evaluation shaders are supported.
If this feature is not enabled, the
ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, and
ename:VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO enum
values must: not be used.
This also specifies whether shader modules can: declare the
code:Tessellation capability.
* [[features-sampleRateShading]] pname:sampleRateShading specifies whether
<<primsrast-sampleshading,Sample Shading>> and multisample interpolation
are supported.
If this feature is not enabled, the pname:sampleShadingEnable member of
the slink:VkPipelineMultisampleStateCreateInfo structure must: be set to
ename:VK_FALSE and the pname:minSampleShading member is ignored.
This also specifies whether shader modules can: declare the
code:SampleRateShading capability.
* [[features-dualSrcBlend]] pname:dualSrcBlend specifies whether blend
operations which take two sources are supported.
If this feature is not enabled, the ename:VK_BLEND_FACTOR_SRC1_COLOR,
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
ename:VK_BLEND_FACTOR_SRC1_ALPHA, and
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA enum values must: not be used
as source or destination blending factors.
See <<framebuffer-dsb>>.
* [[features-logicOp]] pname:logicOp specifies whether logic operations
are supported.
If this feature is not enabled, the pname:logicOpEnable member of the
slink:VkPipelineColorBlendStateCreateInfo structure must: be set to
ename:VK_FALSE, and the pname:logicOp member is ignored.
* [[features-multiDrawIndirect]] pname:multiDrawIndirect specifies whether
multiple draw indirect is supported.
If this feature is not enabled, the pname:drawCount parameter to the
fname:vkCmdDrawIndirect and fname:vkCmdDrawIndexedIndirect commands
must: be 0 or 1.
The pname:maxDrawIndirectCount member of the
sname:VkPhysicalDeviceLimits structure must: also be 1 if this feature
is not supported.
See <<limits-maxDrawIndirectCount,maxDrawIndirectCount>>.
* [[features-drawIndirectFirstInstance]] pname:drawIndirectFirstInstance
specifies whether indirect draw calls support the pname:firstInstance
parameter.
If this feature is not enabled, the pname:firstInstance member of all
sname:VkDrawIndirectCommand and sname:VkDrawIndexedIndirectCommand
structures that are provided to the fname:vkCmdDrawIndirect and
fname:vkCmdDrawIndexedIndirect commands must: be 0.
* [[features-depthClamp]] pname:depthClamp specifies whether depth
clamping is supported.
If this feature is not enabled, the pname:depthClampEnable member of the
slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
ename:VK_FALSE.
Otherwise, setting pname:depthClampEnable to ename:VK_TRUE will enable
depth clamping.
* [[features-depthBiasClamp]] pname:depthBiasClamp specifies whether depth
bias clamping is supported.
If this feature is not enabled, the pname:depthBiasClamp member of the
slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
0.0 unless the ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state is
enabled, and the pname:depthBiasClamp parameter to
fname:vkCmdSetDepthBias must: be set to 0.0.
* [[features-fillModeNonSolid]] pname:fillModeNonSolid specifies whether
point and wireframe fill modes are supported.
If this feature is not enabled, the ename:VK_POLYGON_MODE_POINT and
ename:VK_POLYGON_MODE_LINE enum values must: not be used.
* [[features-depthBounds]] pname:depthBounds specifies whether depth
bounds tests are supported.
If this feature is not enabled, the pname:depthBoundsTestEnable member
of the slink:VkPipelineDepthStencilStateCreateInfo structure must: be
set to ename:VK_FALSE.
When pname:depthBoundsTestEnable is set to ename:VK_FALSE, the
pname:minDepthBounds and pname:maxDepthBounds members of the
slink:VkPipelineDepthStencilStateCreateInfo structure are ignored.
* [[features-wideLines]] pname:wideLines specifies whether lines with
width other than 1.0 are supported.
If this feature is not enabled, the pname:lineWidth member of the
slink:VkPipelineRasterizationStateCreateInfo structure must: be set to
1.0 unless the ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state is
enabled, and the pname:lineWidth parameter to fname:vkCmdSetLineWidth
must: be set to 1.0.
When this feature is supported, the range and granularity of supported
line widths are indicated by the pname:lineWidthRange and
pname:lineWidthGranularity members of the sname:VkPhysicalDeviceLimits
structure, respectively.
* [[features-largePoints]] pname:largePoints specifies whether points with
size greater than 1.0 are supported.
If this feature is not enabled, only a point size of 1.0 written by a
shader is supported.
The range and granularity of supported point sizes are indicated by the
pname:pointSizeRange and pname:pointSizeGranularity members of the
sname:VkPhysicalDeviceLimits structure, respectively.
* [[features-alphaToOne]] pname:alphaToOne specifies whether the
implementation is able to replace the alpha value of the color fragment
output from the fragment shader with the maximum representable alpha
value for fixed-point colors or 1.0 for floating-point colors.
If this feature is not enabled, then the pname:alphaToOneEnable member
of the slink:VkPipelineMultisampleStateCreateInfo structure must: be set
to ename:VK_FALSE.
Otherwise setting pname:alphaToOneEnable to ename:VK_TRUE will enable
alpha-to-one behavior.
* [[features-multiViewport]] pname:multiViewport specifies whether more
than one viewport is supported.
If this feature is not enabled:
** The pname:viewportCount and pname:scissorCount members of the
slink:VkPipelineViewportStateCreateInfo structure must: be set to 1.
** The pname:firstViewport and pname:viewportCount parameters to the
fname:vkCmdSetViewport command must: be set to 0 and 1, respectively.
** The pname:firstScissor and pname:scissorCount parameters to the
fname:vkCmdSetScissor command must: be set to 0 and 1, respectively.
ifdef::VK_NV_scissor_exclusive[]
** The pname:exclusiveScissorCount member of the
slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
must: be set to 0 or 1.
** The pname:firstExclusiveScissor and pname:exclusiveScissorCount
parameters to the fname:vkCmdSetExclusiveScissorNV command must: be set
to 0 and 1, respectively.
endif::VK_NV_scissor_exclusive[]
* [[features-samplerAnisotropy]] pname:samplerAnisotropy specifies whether
anisotropic filtering is supported.
If this feature is not enabled, the pname:anisotropyEnable member of the
slink:VkSamplerCreateInfo structure must: be ename:VK_FALSE.
* [[features-textureCompressionETC2]] pname:textureCompressionETC2
specifies whether all of the ETC2 and EAC compressed texture formats are
supported.
If this feature is enabled, then the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
** ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
** ename:VK_FORMAT_EAC_R11_UNORM_BLOCK
** ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
** ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK
** ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
+
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-textureCompressionASTC_LDR]] pname:textureCompressionASTC_LDR
specifies whether all of the ASTC LDR compressed texture formats are
supported.
If this feature is enabled, then the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
** ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK
** ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
+
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-textureCompressionBC]] pname:textureCompressionBC specifies
whether all of the BC compressed texture formats are supported.
If this feature is enabled, then the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK
** ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
** ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK
** ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
** ename:VK_FORMAT_BC2_UNORM_BLOCK
** ename:VK_FORMAT_BC2_SRGB_BLOCK
** ename:VK_FORMAT_BC3_UNORM_BLOCK
** ename:VK_FORMAT_BC3_SRGB_BLOCK
** ename:VK_FORMAT_BC4_UNORM_BLOCK
** ename:VK_FORMAT_BC4_SNORM_BLOCK
** ename:VK_FORMAT_BC5_UNORM_BLOCK
** ename:VK_FORMAT_BC5_SNORM_BLOCK
** ename:VK_FORMAT_BC6H_UFLOAT_BLOCK
** ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
** ename:VK_FORMAT_BC7_UNORM_BLOCK
** ename:VK_FORMAT_BC7_SRGB_BLOCK
+
To query for additional properties, or if the feature is not enabled,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats as normal.
* [[features-occlusionQueryPrecise]] pname:occlusionQueryPrecise specifies
whether occlusion queries returning actual sample counts are supported.
Occlusion queries are created in a sname:VkQueryPool by specifying the
pname:queryType of ename:VK_QUERY_TYPE_OCCLUSION in the
slink:VkQueryPoolCreateInfo structure which is passed to
fname:vkCreateQueryPool.
If this feature is enabled, queries of this type can: enable
ename:VK_QUERY_CONTROL_PRECISE_BIT in the pname:flags parameter to
fname:vkCmdBeginQuery.
If this feature is not supported, the implementation supports only
boolean occlusion queries.
When any samples are passed, boolean queries will return a non-zero
result value, otherwise a result value of zero is returned.
When this feature is enabled and ename:VK_QUERY_CONTROL_PRECISE_BIT is
set, occlusion queries will report the actual number of samples passed.
* [[features-pipelineStatisticsQuery]] pname:pipelineStatisticsQuery
specifies whether the pipeline statistics queries are supported.
If this feature is not enabled, queries of type
ename:VK_QUERY_TYPE_PIPELINE_STATISTICS cannot: be created, and none of
the elink:VkQueryPipelineStatisticFlagBits bits can: be set in the
pname:pipelineStatistics member of the slink:VkQueryPoolCreateInfo
structure.
* [[features-vertexPipelineStoresAndAtomics]]
pname:vertexPipelineStoresAndAtomics specifies whether storage buffers
and images support stores and atomic operations in the vertex,
tessellation, and geometry shader stages.
If this feature is not enabled, all storage image, storage texel
buffers, and storage buffer variables used by these stages in shader
modules must: be decorated with the code:NonWritable decoration (or the
code:readonly memory qualifier in GLSL).
* [[features-fragmentStoresAndAtomics]] pname:fragmentStoresAndAtomics
specifies whether storage buffers and images support stores and atomic
operations in the fragment shader stage.
If this feature is not enabled, all storage image, storage texel
buffers, and storage buffer variables used by the fragment stage in
shader modules must: be decorated with the code:NonWritable decoration
(or the code:readonly memory qualifier in GLSL).
* [[features-shaderTessellationAndGeometryPointSize]]
pname:shaderTessellationAndGeometryPointSize specifies whether the
code:PointSize built-in decoration is available in the tessellation
control, tessellation evaluation, and geometry shader stages.
If this feature is not enabled, members decorated with the
code:PointSize built-in decoration must: not be read from or written to
and all points written from a tessellation or geometry shader will have
a size of 1.0.
This also specifies whether shader modules can: declare the
code:TessellationPointSize capability for tessellation control and
evaluation shaders, or if the shader modules can: declare the
code:GeometryPointSize capability for geometry shaders.
An implementation supporting this feature must: also support one or both
of the <<features-tessellationShader,pname:tessellationShader>> or
<<features-geometryShader,pname:geometryShader>> features.
* [[features-shaderImageGatherExtended]] pname:shaderImageGatherExtended
specifies whether the extended set of image gather instructions are
available in shader code.
If this feature is not enabled, the code:OpImage*code:Gather
instructions do not support the code:Offset and code:ConstOffsets
operands.
This also specifies whether shader modules can: declare the
code:ImageGatherExtended capability.
* [[features-shaderStorageImageExtendedFormats]]
pname:shaderStorageImageExtendedFormats specifies whether all the
"`storage image extended formats`" below are supported; if this feature
is supported, then the ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT must:
be supported in pname:optimalTilingFeatures for the following formats:
+
** ename:VK_FORMAT_R16G16_SFLOAT
** ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
** ename:VK_FORMAT_R16_SFLOAT
** ename:VK_FORMAT_R16G16B16A16_UNORM
** ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
** ename:VK_FORMAT_R16G16_UNORM
** ename:VK_FORMAT_R8G8_UNORM
** ename:VK_FORMAT_R16_UNORM
** ename:VK_FORMAT_R8_UNORM
** ename:VK_FORMAT_R16G16B16A16_SNORM
** ename:VK_FORMAT_R16G16_SNORM
** ename:VK_FORMAT_R8G8_SNORM
** ename:VK_FORMAT_R16_SNORM
** ename:VK_FORMAT_R8_SNORM
** ename:VK_FORMAT_R16G16_SINT
** ename:VK_FORMAT_R8G8_SINT
** ename:VK_FORMAT_R16_SINT
** ename:VK_FORMAT_R8_SINT
** ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
** ename:VK_FORMAT_R16G16_UINT
** ename:VK_FORMAT_R8G8_UINT
** ename:VK_FORMAT_R16_UINT
** ename:VK_FORMAT_R8_UINT
+
[NOTE]
.Note
====
pname:shaderStorageImageExtendedFormats feature only adds a guarantee of
format support, which is specified for the whole physical device.
Therefore enabling or disabling the feature via flink:vkCreateDevice has no
practical effect.
To query for additional properties, or if the feature is not supported,
flink:vkGetPhysicalDeviceFormatProperties and
flink:vkGetPhysicalDeviceImageFormatProperties can: be used to check for
supported properties of individual formats, as usual rules allow.
ename:VK_FORMAT_R32G32_UINT, ename:VK_FORMAT_R32G32_SINT, and
ename:VK_FORMAT_R32G32_SFLOAT from code:StorageImageExtendedFormats SPIR-V
capability, are already covered by core Vulkan
<<formats-mandatory-features-32bit,mandatory format support>>.
====
* [[features-shaderStorageImageMultisample]]
pname:shaderStorageImageMultisample specifies whether multisampled
storage images are supported.
If this feature is not enabled, images that are created with a
pname:usage that includes ename:VK_IMAGE_USAGE_STORAGE_BIT must: be
created with pname:samples equal to ename:VK_SAMPLE_COUNT_1_BIT.
This also specifies whether shader modules can: declare the
code:StorageImageMultisample and code:ImageMSArray capabilities.
* [[features-shaderStorageImageReadWithoutFormat]]
pname:shaderStorageImageReadWithoutFormat specifies whether storage
images require a format qualifier to be specified when reading from
storage images.
If this feature is not enabled, the code:OpImageRead instruction must:
not have an code:OpTypeImage of code:Unknown.
This also specifies whether shader modules can: declare the
code:StorageImageReadWithoutFormat capability.
* [[features-shaderStorageImageWriteWithoutFormat]]
pname:shaderStorageImageWriteWithoutFormat specifies whether storage
images require a format qualifier to be specified when writing to
storage images.
If this feature is not enabled, the code:OpImageWrite instruction must:
not have an code:OpTypeImage of code:Unknown.
This also specifies whether shader modules can: declare the
code:StorageImageWriteWithoutFormat capability.
* [[features-shaderUniformBufferArrayDynamicIndexing]]
pname:shaderUniformBufferArrayDynamicIndexing specifies whether arrays
of uniform buffers can: be indexed by _dynamically uniform_ integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also specifies whether shader modules can: declare the
code:UniformBufferArrayDynamicIndexing capability.
* [[features-shaderSampledImageArrayDynamicIndexing]]
pname:shaderSampledImageArrayDynamicIndexing specifies whether arrays of
samplers or sampled images can: be indexed by dynamically uniform
integer expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must: be indexed only by constant
integral expressions when aggregated into arrays in shader code.
This also specifies whether shader modules can: declare the
code:SampledImageArrayDynamicIndexing capability.
* [[features-shaderStorageBufferArrayDynamicIndexing]]
pname:shaderStorageBufferArrayDynamicIndexing specifies whether arrays
of storage buffers can: be indexed by dynamically uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must: be indexed only by
constant integral expressions when aggregated into arrays in shader
code.
This also specifies whether shader modules can: declare the
code:StorageBufferArrayDynamicIndexing capability.
* [[features-shaderStorageImageArrayDynamicIndexing]]
pname:shaderStorageImageArrayDynamicIndexing specifies whether arrays of
storage images can: be indexed by dynamically uniform integer
expressions in shader code.
If this feature is not enabled, resources with a descriptor type of
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must: be indexed only by constant
integral expressions when aggregated into arrays in shader code.
This also specifies whether shader modules can: declare the
code:StorageImageArrayDynamicIndexing capability.
* [[features-shaderClipDistance]] pname:shaderClipDistance specifies
whether clip distances are supported in shader code.
If this feature is not enabled, any members decorated with the
code:ClipDistance built-in decoration must: not be read from or written
to in shader modules.
This also specifies whether shader modules can: declare the
code:ClipDistance capability.
* [[features-shaderCullDistance]] pname:shaderCullDistance specifies
whether cull distances are supported in shader code.
If this feature is not enabled, any members decorated with the
code:CullDistance built-in decoration must: not be read from or written
to in shader modules.
This also specifies whether shader modules can: declare the
code:CullDistance capability.
* [[features-shaderFloat64]] pname:shaderFloat64 specifies whether 64-bit
floats (doubles) are supported in shader code.
If this feature is not enabled, 64-bit floating-point types must: not be
used in shader code.
This also specifies whether shader modules can: declare the code:Float64
capability.
Declaring and using 64-bit floats is enabled for all storage classes
that SPIR-V allows with the code:Float64 capability.
* [[features-shaderInt64]] pname:shaderInt64 specifies whether 64-bit
integers (signed and unsigned) are supported in shader code.
If this feature is not enabled, 64-bit integer types must: not be used
in shader code.
This also specifies whether shader modules can: declare the code:Int64
capability.
Declaring and using 64-bit integers is enabled for all storage classes
that SPIR-V allows with the code:Int64 capability.
* [[features-shaderInt16]] pname:shaderInt16 specifies whether 16-bit
integers (signed and unsigned) are supported in shader code.
If this feature is not enabled, 16-bit integer types must: not be used
in shader code.
This also specifies whether shader modules can: declare the code:Int16
capability.
However, this only enables a subset of the storage classes that SPIR-V
allows for the code:Int16 SPIR-V capability: Declaring and using 16-bit
integers in the code:Private, code:Workgroup, and code:Function storage
classes is enabled, while declaring them in the interface storage
classes (e.g., code:UniformConstant, code:Uniform, code:StorageBuffer,
code:Input, code:Output, and code:PushConstant) is not enabled.
* [[features-shaderResourceResidency]] pname:shaderResourceResidency
specifies whether image operations that return resource residency
information are supported in shader code.
If this feature is not enabled, the code:OpImageSparse* instructions
must: not be used in shader code.
This also specifies whether shader modules can: declare the
code:SparseResidency capability.
The feature requires at least one of the ptext:sparseResidency* features
to be supported.
* [[features-shaderResourceMinLod]] pname:shaderResourceMinLod specifies
whether image operations specifying the minimum resource LOD are
supported in shader code.
If this feature is not enabled, the code:MinLod image operand must: not
be used in shader code.
This also specifies whether shader modules can: declare the code:MinLod
capability.
* [[features-sparseBinding]] pname:sparseBinding specifies whether
resource memory can: be managed at opaque sparse block level instead of
at the object level.
If this feature is not enabled, resource memory must: be bound only on a
per-object basis using the fname:vkBindBufferMemory and
fname:vkBindImageMemory commands.
In this case, buffers and images must: not be created with
ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT and
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in the pname:flags member
of the slink:VkBufferCreateInfo and slink:VkImageCreateInfo structures,
respectively.
Otherwise resource memory can: be managed as described in
<<sparsememory-sparseresourcefeatures,Sparse Resource Features>>.
* [[features-sparseResidencyBuffer]] pname:sparseResidencyBuffer specifies
whether the device can: access partially resident buffers.
If this feature is not enabled, buffers must: not be created with
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags
member of the slink:VkBufferCreateInfo structure.
* [[features-sparseResidencyImage2D]] pname:sparseResidencyImage2D
specifies whether the device can: access partially resident 2D images
with 1 sample per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_1_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the slink:VkImageCreateInfo structure.
* [[features-sparseResidencyImage3D]] pname:sparseResidencyImage3D
specifies whether the device can: access partially resident 3D images.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_3D must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the slink:VkImageCreateInfo structure.
* [[features-sparseResidency2Samples]] pname:sparseResidency2Samples
specifies whether the physical device can: access partially resident 2D
images with 2 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_2_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the slink:VkImageCreateInfo structure.
* [[features-sparseResidency4Samples]] pname:sparseResidency4Samples
specifies whether the physical device can: access partially resident 2D
images with 4 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_4_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the slink:VkImageCreateInfo structure.
* [[features-sparseResidency8Samples]] pname:sparseResidency8Samples
specifies whether the physical device can: access partially resident 2D
images with 8 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_8_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the slink:VkImageCreateInfo structure.
* [[features-sparseResidency16Samples]] pname:sparseResidency16Samples
specifies whether the physical device can: access partially resident 2D
images with 16 samples per pixel.
If this feature is not enabled, images with an pname:imageType of
ename:VK_IMAGE_TYPE_2D and pname:samples set to
ename:VK_SAMPLE_COUNT_16_BIT must: not be created with
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set in the pname:flags member
of the slink:VkImageCreateInfo structure.
* [[features-sparseResidencyAliased]] pname:sparseResidencyAliased
specifies whether the physical device can: correctly access data aliased
into multiple locations.
If this feature is not enabled, the
ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT and
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT enum values must: not be used
in pname:flags members of the slink:VkBufferCreateInfo and
slink:VkImageCreateInfo structures, respectively.
* [[features-variableMultisampleRate]] pname:variableMultisampleRate
specifies whether all pipelines that will be bound to a command buffer
during a <<renderpass-noattachments, subpass which uses no attachments>>
must: have the same value for
slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
If set to ename:VK_TRUE, the implementation supports variable
multisample rates in a subpass which uses no attachments.
If set to ename:VK_FALSE, then all pipelines bound in such a subpass
must: have the same multisample rate.
This has no effect in situations where a subpass uses any attachments.
* [[features-inheritedQueries]] pname:inheritedQueries specifies whether a
secondary command buffer may: be executed while a query is active.
include::{generated}/validity/structs/VkPhysicalDeviceFeatures.txt[]
--
ifdef::VK_VERSION_1_2[]
[open,refpage='VkPhysicalDeviceVulkan11Features',desc='Structure describing the Vulkan 1.1 features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceVulkan11Features structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceVulkan11Features.txt[]
The members of the sname:VkPhysicalDeviceVulkan11Features structure describe
the following features:
:anchor-prefix:
include::{chapters}/features.txt[tag=VK_KHR_16bit_storage-features]
include::{chapters}/features.txt[tag=VK_KHR_multiview-features]
include::{chapters}/features.txt[tag=VK_KHR_variable_pointers-features]
include::{chapters}/features.txt[tag=VK_KHR_protected_memory-features]
include::{chapters}/features.txt[tag=VK_KHR_sampler_ycbcr_conversion-features]
include::{chapters}/features.txt[tag=VK_KHR_shader_draw_parameters-features]
If the sname:VkPhysicalDeviceVulkan11Features structure is included in the
pname:pNext chain of slink:VkPhysicalDeviceFeatures2, it is filled with
values indicating whether each feature is supported.
sname:VkPhysicalDeviceVulkan11Features can: also be used in the pname:pNext
chain of slink:VkDeviceCreateInfo to enable the features.
include::{generated}/validity/structs/VkPhysicalDeviceVulkan11Features.txt[]
--
[open,refpage='VkPhysicalDeviceVulkan12Features',desc='Structure describing the Vulkan 1.2 features that can be supported by an implementation',type='structs']
--
The sname:VkPhysicalDeviceVulkan12Features structure is defined as:
include::{generated}/api/structs/VkPhysicalDeviceVulkan12Features.txt[]
The members of the sname:VkPhysicalDeviceVulkan12Features structure describe
the following features:
:anchor-prefix:
* [[features-samplerMirrorClampToEdge]] pname:samplerMirrorClampToEdge
indicates whether the implementation supports the
ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode.
If this feature is not enabled, the
ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode
must: not be used.
* [[features-drawIndirectCount]] pname:drawIndirectCount indicates whether
the implementation supports the flink:vkCmdDrawIndirectCount and
flink:vkCmdDrawIndexedIndirectCount functions.
If this feature is not enabled, these functions must: not be used.
include::{chapters}/features.txt[tag=VK_KHR_8bit_storage-features]
include::{chapters}/features.txt[tag=VK_KHR_shader_atomic_int64-features]
include::{chapters}/features.txt[tag=VK_KHR_shader_float16_int8-features]
* [[features-descriptorIndexing]] pname:descriptorIndexing indicates
whether the implementation supports the minimum set of descriptor
indexing features as described in the <<features-requirements,Feature
Requirements>> section.
Enabling the pname:descriptorIndexing member when flink:vkCreateDevice
is called does not imply the other minimum descriptor indexing features
are also enabled.
Those other descriptor indexing features must: be enabled individually
as needed by the application.
include::{chapters}/features.txt[tag=VK_EXT_descriptor_indexing-features]
* [[features-samplerFilterMinmax]] pname:samplerFilterMinmax indicates
whether the implementation supports a minimum set of required formats
supporting min/max filtering as defined by the
<<limits-filterMinmaxSingleComponentFormats-minimum-requirements,pname:filterMinmaxSingleComponentFormats>>
property minimum requirements.
If this feature is not enabled, then no slink:VkSamplerCreateInfo
pname:pNext chain can include a slink:VkSamplerReductionModeCreateInfo
structure.