390
get_features(const struct anv_physical_device *pdevice,
391
struct vk_features *features)
393
struct vk_app_info *app_info = &pdevice->instance->vk.app_info;
395
/* Just pick one; they're all the same */
396
const bool has_astc_ldr =
397
isl_format_supports_sampling(&pdevice->info,
398
ISL_FORMAT_ASTC_LDR_2D_4X4_FLT16);
400
const bool rt_enabled = ANV_SUPPORT_RT && pdevice->info.has_ray_tracing;
402
const bool mesh_shader =
403
pdevice->vk.supported_extensions.EXT_mesh_shader ||
404
pdevice->vk.supported_extensions.NV_mesh_shader;
406
*features = (struct vk_features) {
408
.robustBufferAccess = true,
409
.fullDrawIndexUint32 = true,
410
.imageCubeArray = true,
411
.independentBlend = true,
412
.geometryShader = true,
413
.tessellationShader = true,
414
.sampleRateShading = true,
415
.dualSrcBlend = true,
417
.multiDrawIndirect = true,
418
.drawIndirectFirstInstance = true,
420
.depthBiasClamp = true,
421
.fillModeNonSolid = true,
422
.depthBounds = pdevice->info.ver >= 12,
426
.multiViewport = true,
427
.samplerAnisotropy = true,
428
.textureCompressionETC2 = true,
429
.textureCompressionASTC_LDR = has_astc_ldr,
430
.textureCompressionBC = true,
431
.occlusionQueryPrecise = true,
432
.pipelineStatisticsQuery = true,
433
/* We can't do image stores in vec4 shaders */
434
.vertexPipelineStoresAndAtomics =
435
pdevice->compiler->scalar_stage[MESA_SHADER_VERTEX] &&
436
pdevice->compiler->scalar_stage[MESA_SHADER_GEOMETRY],
437
.fragmentStoresAndAtomics = true,
438
.shaderTessellationAndGeometryPointSize = true,
439
.shaderImageGatherExtended = true,
440
.shaderStorageImageExtendedFormats = true,
441
.shaderStorageImageMultisample = false,
442
/* Gfx12.5 has all the required format supported in HW for typed
445
.shaderStorageImageReadWithoutFormat = pdevice->info.verx10 >= 125,
446
.shaderStorageImageWriteWithoutFormat = true,
447
.shaderUniformBufferArrayDynamicIndexing = true,
448
.shaderSampledImageArrayDynamicIndexing = true,
449
.shaderStorageBufferArrayDynamicIndexing = true,
450
.shaderStorageImageArrayDynamicIndexing = true,
451
.shaderClipDistance = true,
452
.shaderCullDistance = true,
453
.shaderFloat64 = pdevice->info.has_64bit_float,
456
.shaderResourceMinLod = true,
457
.variableMultisampleRate = true,
458
.inheritedQueries = true,
461
.storageBuffer16BitAccess = !pdevice->instance->no_16bit,
462
.uniformAndStorageBuffer16BitAccess = !pdevice->instance->no_16bit,
463
.storagePushConstant16 = true,
464
.storageInputOutput16 = false,
466
.multiviewGeometryShader = true,
467
.multiviewTessellationShader = true,
468
.variablePointersStorageBuffer = true,
469
.variablePointers = true,
470
.protectedMemory = false,
471
.samplerYcbcrConversion = true,
472
.shaderDrawParameters = true,
475
.samplerMirrorClampToEdge = true,
476
.drawIndirectCount = true,
477
.storageBuffer8BitAccess = true,
478
.uniformAndStorageBuffer8BitAccess = true,
479
.storagePushConstant8 = true,
480
.shaderBufferInt64Atomics = true,
481
.shaderSharedInt64Atomics = false,
482
.shaderFloat16 = !pdevice->instance->no_16bit,
483
.shaderInt8 = !pdevice->instance->no_16bit,
485
.descriptorIndexing = true,
486
.shaderInputAttachmentArrayDynamicIndexing = false,
487
.shaderUniformTexelBufferArrayDynamicIndexing = true,
488
.shaderStorageTexelBufferArrayDynamicIndexing = true,
489
.shaderUniformBufferArrayNonUniformIndexing = true,
490
.shaderSampledImageArrayNonUniformIndexing = true,
491
.shaderStorageBufferArrayNonUniformIndexing = true,
492
.shaderStorageImageArrayNonUniformIndexing = true,
493
.shaderInputAttachmentArrayNonUniformIndexing = false,
494
.shaderUniformTexelBufferArrayNonUniformIndexing = true,
495
.shaderStorageTexelBufferArrayNonUniformIndexing = true,
496
.descriptorBindingUniformBufferUpdateAfterBind = true,
497
.descriptorBindingSampledImageUpdateAfterBind = true,
498
.descriptorBindingStorageImageUpdateAfterBind = true,
499
.descriptorBindingStorageBufferUpdateAfterBind = true,
500
.descriptorBindingUniformTexelBufferUpdateAfterBind = true,
501
.descriptorBindingStorageTexelBufferUpdateAfterBind = true,
502
.descriptorBindingUpdateUnusedWhilePending = true,
503
.descriptorBindingPartiallyBound = true,
504
.descriptorBindingVariableDescriptorCount = true,
505
.runtimeDescriptorArray = true,
507
.samplerFilterMinmax = true,
508
.scalarBlockLayout = true,
509
.imagelessFramebuffer = true,
510
.uniformBufferStandardLayout = true,
511
.shaderSubgroupExtendedTypes = true,
512
.separateDepthStencilLayouts = true,
513
.hostQueryReset = true,
514
.timelineSemaphore = true,
515
.bufferDeviceAddress = true,
516
.bufferDeviceAddressCaptureReplay = true,
517
.bufferDeviceAddressMultiDevice = false,
518
.vulkanMemoryModel = true,
519
.vulkanMemoryModelDeviceScope = true,
520
.vulkanMemoryModelAvailabilityVisibilityChains = true,
521
.shaderOutputViewportIndex = true,
522
.shaderOutputLayer = true,
523
.subgroupBroadcastDynamicId = true,
526
.robustImageAccess = true,
527
.inlineUniformBlock = true,
528
.descriptorBindingInlineUniformBlockUpdateAfterBind = true,
529
.pipelineCreationCacheControl = true,
531
.shaderDemoteToHelperInvocation = true,
532
.shaderTerminateInvocation = true,
533
.subgroupSizeControl = true,
534
.computeFullSubgroups = true,
535
.synchronization2 = true,
536
.textureCompressionASTC_HDR = false,
537
.shaderZeroInitializeWorkgroupMemory = true,
538
.dynamicRendering = true,
539
.shaderIntegerDotProduct = true,
540
.maintenance4 = true,
542
/* VK_EXT_4444_formats */
543
.formatA4R4G4B4 = true,
544
.formatA4B4G4R4 = false,
546
/* VK_KHR_acceleration_structure */
547
.accelerationStructure = rt_enabled,
548
.accelerationStructureCaptureReplay = false, /* TODO */
549
.accelerationStructureIndirectBuild = false, /* TODO */
550
.accelerationStructureHostCommands = false,
551
.descriptorBindingAccelerationStructureUpdateAfterBind = rt_enabled,
553
/* VK_EXT_border_color_swizzle */
554
.borderColorSwizzle = true,
555
.borderColorSwizzleFromImage = true,
557
/* VK_EXT_color_write_enable */
558
.colorWriteEnable = true,
560
/* VK_EXT_image_2d_view_of_3d */
561
.image2DViewOf3D = true,
562
.sampler2DViewOf3D = true,
564
/* VK_EXT_image_sliced_view_of_3d */
565
.imageSlicedViewOf3D = true,
567
/* VK_NV_compute_shader_derivatives */
568
.computeDerivativeGroupQuads = true,
569
.computeDerivativeGroupLinear = true,
571
/* VK_EXT_conditional_rendering */
572
.conditionalRendering = true,
573
.inheritedConditionalRendering = true,
575
/* VK_EXT_custom_border_color */
576
.customBorderColors = true,
577
.customBorderColorWithoutFormat = true,
579
/* VK_EXT_depth_clamp_zero_one */
580
.depthClampZeroOne = true,
582
/* VK_EXT_depth_clip_enable */
583
.depthClipEnable = true,
585
/* VK_EXT_fragment_shader_interlock */
586
.fragmentShaderSampleInterlock = true,
587
.fragmentShaderPixelInterlock = true,
588
.fragmentShaderShadingRateInterlock = false,
590
/* VK_EXT_global_priority_query */
591
.globalPriorityQuery = true,
593
/* VK_EXT_graphics_pipeline_library */
594
.graphicsPipelineLibrary =
595
pdevice->vk.supported_extensions.EXT_graphics_pipeline_library,
597
/* VK_KHR_fragment_shading_rate */
598
.pipelineFragmentShadingRate = true,
599
.primitiveFragmentShadingRate =
600
pdevice->info.has_coarse_pixel_primitive_and_cb,
601
.attachmentFragmentShadingRate =
602
pdevice->info.has_coarse_pixel_primitive_and_cb,
604
/* VK_EXT_image_view_min_lod */
607
/* VK_EXT_index_type_uint8 */
608
.indexTypeUint8 = true,
610
/* VK_EXT_line_rasterization */
611
/* Rectangular lines must use the strict algorithm, which is not
612
* supported for wide lines prior to ICL. See rasterization_mode for
613
* details and how the HW states are programmed.
615
.rectangularLines = pdevice->info.ver >= 10,
616
.bresenhamLines = true,
617
/* Support for Smooth lines with MSAA was removed on gfx11. From the
618
* BSpec section "Multisample ModesState" table for "AA Line Support
621
* GFX10:BUG:######## NUM_MULTISAMPLES == 1
623
* Fortunately, this isn't a case most people care about.
625
.smoothLines = pdevice->info.ver < 10,
626
.stippledRectangularLines = false,
627
.stippledBresenhamLines = true,
628
.stippledSmoothLines = false,
630
/* VK_NV_mesh_shader */
631
.taskShaderNV = mesh_shader,
632
.meshShaderNV = mesh_shader,
634
/* VK_EXT_mesh_shader */
635
.taskShader = mesh_shader,
636
.meshShader = mesh_shader,
637
.multiviewMeshShader = false,
638
.primitiveFragmentShadingRateMeshShader = mesh_shader,
639
.meshShaderQueries = false,
641
/* VK_EXT_mutable_descriptor_type */
642
.mutableDescriptorType = true,
644
/* VK_KHR_performance_query */
645
.performanceCounterQueryPools = true,
646
/* HW only supports a single configuration at a time. */
647
.performanceCounterMultipleQueryPools = false,
649
/* VK_KHR_pipeline_executable_properties */
650
.pipelineExecutableInfo = true,
652
/* VK_EXT_primitives_generated_query */
653
.primitivesGeneratedQuery = true,
654
.primitivesGeneratedQueryWithRasterizerDiscard = false,
655
.primitivesGeneratedQueryWithNonZeroStreams = false,
657
/* VK_EXT_pipeline_library_group_handles */
658
.pipelineLibraryGroupHandles = true,
660
/* VK_EXT_provoking_vertex */
661
.provokingVertexLast = true,
662
.transformFeedbackPreservesProvokingVertex = true,
664
/* VK_KHR_ray_query */
665
.rayQuery = rt_enabled,
667
/* VK_KHR_ray_tracing_maintenance1 */
668
.rayTracingMaintenance1 = rt_enabled,
669
.rayTracingPipelineTraceRaysIndirect2 = rt_enabled,
671
/* VK_KHR_ray_tracing_pipeline */
672
.rayTracingPipeline = rt_enabled,
673
.rayTracingPipelineShaderGroupHandleCaptureReplay = false,
674
.rayTracingPipelineShaderGroupHandleCaptureReplayMixed = false,
675
.rayTracingPipelineTraceRaysIndirect = rt_enabled,
676
.rayTraversalPrimitiveCulling = rt_enabled,
678
/* VK_EXT_robustness2 */
679
.robustBufferAccess2 = true,
680
.robustImageAccess2 = true,
681
.nullDescriptor = true,
683
/* VK_EXT_shader_atomic_float */
684
.shaderBufferFloat32Atomics = true,
685
.shaderBufferFloat32AtomicAdd = pdevice->info.has_lsc,
686
.shaderBufferFloat64Atomics =
687
pdevice->info.has_64bit_float && pdevice->info.has_lsc,
688
.shaderBufferFloat64AtomicAdd = false,
689
.shaderSharedFloat32Atomics = true,
690
.shaderSharedFloat32AtomicAdd = false,
691
.shaderSharedFloat64Atomics = false,
692
.shaderSharedFloat64AtomicAdd = false,
693
.shaderImageFloat32Atomics = true,
694
.shaderImageFloat32AtomicAdd = false,
695
.sparseImageFloat32Atomics = false,
696
.sparseImageFloat32AtomicAdd = false,
698
/* VK_EXT_shader_atomic_float2 */
699
.shaderBufferFloat16Atomics = pdevice->info.has_lsc,
700
.shaderBufferFloat16AtomicAdd = false,
701
.shaderBufferFloat16AtomicMinMax = pdevice->info.has_lsc,
702
.shaderBufferFloat32AtomicMinMax = true,
703
.shaderBufferFloat64AtomicMinMax =
704
pdevice->info.has_64bit_float && pdevice->info.has_lsc,
705
.shaderSharedFloat16Atomics = pdevice->info.has_lsc,
706
.shaderSharedFloat16AtomicAdd = false,
707
.shaderSharedFloat16AtomicMinMax = pdevice->info.has_lsc,
708
.shaderSharedFloat32AtomicMinMax = true,
709
.shaderSharedFloat64AtomicMinMax = false,
710
.shaderImageFloat32AtomicMinMax = false,
711
.sparseImageFloat32AtomicMinMax = false,
713
/* VK_KHR_shader_clock */
714
.shaderSubgroupClock = true,
715
.shaderDeviceClock = false,
717
/* VK_INTEL_shader_integer_functions2 */
718
.shaderIntegerFunctions2 = true,
720
/* VK_EXT_shader_module_identifier */
721
.shaderModuleIdentifier = true,
723
/* VK_KHR_shader_subgroup_uniform_control_flow */
724
.shaderSubgroupUniformControlFlow = true,
726
/* VK_EXT_texel_buffer_alignment */
727
.texelBufferAlignment = true,
729
/* VK_EXT_transform_feedback */
730
.transformFeedback = true,
731
.geometryStreams = true,
733
/* VK_EXT_vertex_attribute_divisor */
734
.vertexAttributeInstanceRateDivisor = true,
735
.vertexAttributeInstanceRateZeroDivisor = true,
737
/* VK_KHR_workgroup_memory_explicit_layout */
738
.workgroupMemoryExplicitLayout = true,
739
.workgroupMemoryExplicitLayoutScalarBlockLayout = true,
740
.workgroupMemoryExplicitLayout8BitAccess = true,
741
.workgroupMemoryExplicitLayout16BitAccess = true,
743
/* VK_EXT_ycbcr_image_arrays */
744
.ycbcrImageArrays = true,
746
/* VK_EXT_extended_dynamic_state */
747
.extendedDynamicState = true,
749
/* VK_EXT_extended_dynamic_state2 */
750
.extendedDynamicState2 = true,
751
.extendedDynamicState2LogicOp = true,
752
.extendedDynamicState2PatchControlPoints = true,
754
/* VK_EXT_extended_dynamic_state3 */
755
.extendedDynamicState3PolygonMode = true,
756
.extendedDynamicState3TessellationDomainOrigin = true,
757
.extendedDynamicState3RasterizationStream = true,
758
.extendedDynamicState3LineStippleEnable = true,
759
.extendedDynamicState3LineRasterizationMode = true,
760
.extendedDynamicState3LogicOpEnable = true,
761
.extendedDynamicState3AlphaToOneEnable = true,
762
.extendedDynamicState3DepthClipEnable = true,
763
.extendedDynamicState3DepthClampEnable = true,
764
.extendedDynamicState3DepthClipNegativeOneToOne = true,
765
.extendedDynamicState3ProvokingVertexMode = true,
766
.extendedDynamicState3ColorBlendEnable = true,
767
.extendedDynamicState3ColorWriteMask = true,
768
.extendedDynamicState3ColorBlendEquation = true,
769
.extendedDynamicState3SampleLocationsEnable = true,
770
.extendedDynamicState3SampleMask = true,
772
.extendedDynamicState3RasterizationSamples = false,
773
.extendedDynamicState3AlphaToCoverageEnable = false,
774
.extendedDynamicState3ConservativeRasterizationMode = false,
775
.extendedDynamicState3ExtraPrimitiveOverestimationSize = false,
776
.extendedDynamicState3ViewportWScalingEnable = false,
777
.extendedDynamicState3ViewportSwizzle = false,
778
.extendedDynamicState3ShadingRateImageEnable = false,
779
.extendedDynamicState3CoverageToColorEnable = false,
780
.extendedDynamicState3CoverageToColorLocation = false,
781
.extendedDynamicState3CoverageModulationMode = false,
782
.extendedDynamicState3CoverageModulationTableEnable = false,
783
.extendedDynamicState3CoverageModulationTable = false,
784
.extendedDynamicState3CoverageReductionMode = false,
785
.extendedDynamicState3RepresentativeFragmentTestEnable = false,
786
.extendedDynamicState3ColorBlendAdvanced = false,
788
/* VK_EXT_multi_draw */
791
/* VK_EXT_non_seamless_cube_map */
792
.nonSeamlessCubeMap = true,
794
/* VK_EXT_primitive_topology_list_restart */
795
.primitiveTopologyListRestart = true,
796
.primitiveTopologyPatchListRestart = true,
798
/* VK_EXT_depth_clip_control */
799
.depthClipControl = true,
801
/* VK_KHR_present_id */
802
.presentId = pdevice->vk.supported_extensions.KHR_present_id,
804
/* VK_KHR_present_wait */
805
.presentWait = pdevice->vk.supported_extensions.KHR_present_wait,
807
/* VK_EXT_vertex_input_dynamic_state */
808
.vertexInputDynamicState = true,
810
/* VK_KHR_ray_tracing_position_fetch */
811
.rayTracingPositionFetch = rt_enabled,
813
/* VK_EXT_dynamic_rendering_unused_attachments */
814
.dynamicRenderingUnusedAttachments = true,
816
/* VK_EXT_depth_bias_control */
817
.depthBiasControl = true,
818
.floatRepresentation = true,
819
.leastRepresentableValueForceUnormRepresentation = false,
820
.depthBiasExact = true,
823
/* The new DOOM and Wolfenstein games require depthBounds without
824
* checking for it. They seem to run fine without it so just claim it's
825
* there and accept the consequences.
827
if (app_info->engine_name && strcmp(app_info->engine_name, "idTech") == 0)
828
features->depthBounds = true;
380
832
anv_compute_sys_heap_size(struct anv_physical_device *device,
381
833
uint64_t total_ram)
1182
1590
vk_free(&instance->vk.alloc, instance);
1185
void anv_GetPhysicalDeviceFeatures2(
1186
VkPhysicalDevice physicalDevice,
1187
VkPhysicalDeviceFeatures2* pFeatures)
1189
ANV_FROM_HANDLE(anv_physical_device, pdevice, physicalDevice);
1191
struct vk_app_info *app_info = &pdevice->instance->vk.app_info;
1193
/* Just pick one; they're all the same */
1194
const bool has_astc_ldr =
1195
isl_format_supports_sampling(&pdevice->info,
1196
ISL_FORMAT_ASTC_LDR_2D_4X4_FLT16);
1198
const bool rt_enabled = ANV_SUPPORT_RT && pdevice->info.has_ray_tracing;
1200
const bool mesh_shader =
1201
pdevice->vk.supported_extensions.EXT_mesh_shader ||
1202
pdevice->vk.supported_extensions.NV_mesh_shader;
1204
struct vk_features features = {
1206
.robustBufferAccess = true,
1207
.fullDrawIndexUint32 = true,
1208
.imageCubeArray = true,
1209
.independentBlend = true,
1210
.geometryShader = true,
1211
.tessellationShader = true,
1212
.sampleRateShading = true,
1213
.dualSrcBlend = true,
1215
.multiDrawIndirect = true,
1216
.drawIndirectFirstInstance = true,
1218
.depthBiasClamp = true,
1219
.fillModeNonSolid = true,
1220
.depthBounds = pdevice->info.ver >= 12,
1222
.largePoints = true,
1224
.multiViewport = true,
1225
.samplerAnisotropy = true,
1226
.textureCompressionETC2 = true,
1227
.textureCompressionASTC_LDR = has_astc_ldr,
1228
.textureCompressionBC = true,
1229
.occlusionQueryPrecise = true,
1230
.pipelineStatisticsQuery = true,
1231
/* We can't do image stores in vec4 shaders */
1232
.vertexPipelineStoresAndAtomics =
1233
pdevice->compiler->scalar_stage[MESA_SHADER_VERTEX] &&
1234
pdevice->compiler->scalar_stage[MESA_SHADER_GEOMETRY],
1235
.fragmentStoresAndAtomics = true,
1236
.shaderTessellationAndGeometryPointSize = true,
1237
.shaderImageGatherExtended = true,
1238
.shaderStorageImageExtendedFormats = true,
1239
.shaderStorageImageMultisample = false,
1240
.shaderStorageImageReadWithoutFormat = false,
1241
.shaderStorageImageWriteWithoutFormat = true,
1242
.shaderUniformBufferArrayDynamicIndexing = true,
1243
.shaderSampledImageArrayDynamicIndexing = true,
1244
.shaderStorageBufferArrayDynamicIndexing = true,
1245
.shaderStorageImageArrayDynamicIndexing = true,
1246
.shaderClipDistance = true,
1247
.shaderCullDistance = true,
1248
.shaderFloat64 = pdevice->info.has_64bit_float,
1249
.shaderInt64 = true,
1250
.shaderInt16 = true,
1251
.shaderResourceMinLod = true,
1252
.variableMultisampleRate = true,
1253
.inheritedQueries = true,
1256
.storageBuffer16BitAccess = !pdevice->instance->no_16bit,
1257
.uniformAndStorageBuffer16BitAccess = !pdevice->instance->no_16bit,
1258
.storagePushConstant16 = true,
1259
.storageInputOutput16 = false,
1261
.multiviewGeometryShader = true,
1262
.multiviewTessellationShader = true,
1263
.variablePointersStorageBuffer = true,
1264
.variablePointers = true,
1265
.protectedMemory = false,
1266
.samplerYcbcrConversion = true,
1267
.shaderDrawParameters = true,
1270
.samplerMirrorClampToEdge = true,
1271
.drawIndirectCount = true,
1272
.storageBuffer8BitAccess = true,
1273
.uniformAndStorageBuffer8BitAccess = true,
1274
.storagePushConstant8 = true,
1275
.shaderBufferInt64Atomics = true,
1276
.shaderSharedInt64Atomics = false,
1277
.shaderFloat16 = !pdevice->instance->no_16bit,
1278
.shaderInt8 = !pdevice->instance->no_16bit,
1280
.descriptorIndexing = true,
1281
.shaderInputAttachmentArrayDynamicIndexing = false,
1282
.shaderUniformTexelBufferArrayDynamicIndexing = true,
1283
.shaderStorageTexelBufferArrayDynamicIndexing = true,
1284
.shaderUniformBufferArrayNonUniformIndexing = false,
1285
.shaderSampledImageArrayNonUniformIndexing = true,
1286
.shaderStorageBufferArrayNonUniformIndexing = true,
1287
.shaderStorageImageArrayNonUniformIndexing = true,
1288
.shaderInputAttachmentArrayNonUniformIndexing = false,
1289
.shaderUniformTexelBufferArrayNonUniformIndexing = true,
1290
.shaderStorageTexelBufferArrayNonUniformIndexing = true,
1291
.descriptorBindingUniformBufferUpdateAfterBind = true,
1292
.descriptorBindingSampledImageUpdateAfterBind = true,
1293
.descriptorBindingStorageImageUpdateAfterBind = true,
1294
.descriptorBindingStorageBufferUpdateAfterBind = true,
1295
.descriptorBindingUniformTexelBufferUpdateAfterBind = true,
1296
.descriptorBindingStorageTexelBufferUpdateAfterBind = true,
1297
.descriptorBindingUpdateUnusedWhilePending = true,
1298
.descriptorBindingPartiallyBound = true,
1299
.descriptorBindingVariableDescriptorCount = true,
1300
.runtimeDescriptorArray = true,
1302
.samplerFilterMinmax = true,
1303
.scalarBlockLayout = true,
1304
.imagelessFramebuffer = true,
1305
.uniformBufferStandardLayout = true,
1306
.shaderSubgroupExtendedTypes = true,
1307
.separateDepthStencilLayouts = true,
1308
.hostQueryReset = true,
1309
.timelineSemaphore = true,
1310
.bufferDeviceAddress = true,
1311
.bufferDeviceAddressCaptureReplay = true,
1312
.bufferDeviceAddressMultiDevice = false,
1313
.vulkanMemoryModel = true,
1314
.vulkanMemoryModelDeviceScope = true,
1315
.vulkanMemoryModelAvailabilityVisibilityChains = true,
1316
.shaderOutputViewportIndex = true,
1317
.shaderOutputLayer = true,
1318
.subgroupBroadcastDynamicId = true,
1321
.robustImageAccess = true,
1322
.inlineUniformBlock = true,
1323
.descriptorBindingInlineUniformBlockUpdateAfterBind = true,
1324
.pipelineCreationCacheControl = true,
1325
.privateData = true,
1326
.shaderDemoteToHelperInvocation = true,
1327
.shaderTerminateInvocation = true,
1328
.subgroupSizeControl = true,
1329
.computeFullSubgroups = true,
1330
.synchronization2 = true,
1331
.textureCompressionASTC_HDR = false,
1332
.shaderZeroInitializeWorkgroupMemory = true,
1333
.dynamicRendering = true,
1334
.shaderIntegerDotProduct = true,
1335
.maintenance4 = true,
1337
/* VK_EXT_4444_formats */
1338
.formatA4R4G4B4 = true,
1339
.formatA4B4G4R4 = false,
1341
/* VK_KHR_acceleration_structure */
1342
.accelerationStructure = rt_enabled,
1343
.accelerationStructureCaptureReplay = false, /* TODO */
1344
.accelerationStructureIndirectBuild = false, /* TODO */
1345
.accelerationStructureHostCommands = false,
1346
.descriptorBindingAccelerationStructureUpdateAfterBind = rt_enabled,
1348
/* VK_EXT_border_color_swizzle */
1349
.borderColorSwizzle = true,
1350
.borderColorSwizzleFromImage = true,
1352
/* VK_EXT_color_write_enable */
1353
.colorWriteEnable = true,
1355
/* VK_EXT_image_2d_view_of_3d */
1356
.image2DViewOf3D = true,
1357
.sampler2DViewOf3D = true,
1359
/* VK_EXT_image_sliced_view_of_3d */
1360
.imageSlicedViewOf3D = true,
1362
/* VK_NV_compute_shader_derivatives */
1363
.computeDerivativeGroupQuads = true,
1364
.computeDerivativeGroupLinear = true,
1366
/* VK_EXT_conditional_rendering */
1367
.conditionalRendering = true,
1368
.inheritedConditionalRendering = true,
1370
/* VK_EXT_custom_border_color */
1371
.customBorderColors = true,
1372
.customBorderColorWithoutFormat = true,
1374
/* VK_EXT_depth_clamp_zero_one */
1375
.depthClampZeroOne = true,
1377
/* VK_EXT_depth_clip_enable */
1378
.depthClipEnable = true,
1380
/* VK_EXT_fragment_shader_interlock */
1381
.fragmentShaderSampleInterlock = true,
1382
.fragmentShaderPixelInterlock = true,
1383
.fragmentShaderShadingRateInterlock = false,
1385
/* VK_EXT_global_priority_query */
1386
.globalPriorityQuery = true,
1388
/* VK_KHR_fragment_shading_rate */
1389
.pipelineFragmentShadingRate = true,
1390
.primitiveFragmentShadingRate =
1391
pdevice->info.has_coarse_pixel_primitive_and_cb,
1392
.attachmentFragmentShadingRate =
1393
pdevice->info.has_coarse_pixel_primitive_and_cb,
1395
/* VK_EXT_image_view_min_lod */
1398
/* VK_EXT_index_type_uint8 */
1399
.indexTypeUint8 = true,
1401
/* VK_EXT_line_rasterization */
1402
/* Rectangular lines must use the strict algorithm, which is not
1403
* supported for wide lines prior to ICL. See rasterization_mode for
1404
* details and how the HW states are programmed.
1406
.rectangularLines = pdevice->info.ver >= 10,
1407
.bresenhamLines = true,
1408
/* Support for Smooth lines with MSAA was removed on gfx11. From the
1409
* BSpec section "Multisample ModesState" table for "AA Line Support
1412
* GFX10:BUG:######## NUM_MULTISAMPLES == 1
1414
* Fortunately, this isn't a case most people care about.
1416
.smoothLines = pdevice->info.ver < 10,
1417
.stippledRectangularLines = false,
1418
.stippledBresenhamLines = true,
1419
.stippledSmoothLines = false,
1421
/* VK_NV_mesh_shader */
1422
.taskShaderNV = mesh_shader,
1423
.meshShaderNV = mesh_shader,
1425
/* VK_EXT_mesh_shader */
1426
.taskShader = mesh_shader,
1427
.meshShader = mesh_shader,
1428
.multiviewMeshShader = false,
1429
.primitiveFragmentShadingRateMeshShader = mesh_shader,
1430
.meshShaderQueries = false,
1432
/* VK_EXT_mutable_descriptor_type */
1433
.mutableDescriptorType = true,
1435
/* VK_KHR_performance_query */
1436
.performanceCounterQueryPools = true,
1437
/* HW only supports a single configuration at a time. */
1438
.performanceCounterMultipleQueryPools = false,
1440
/* VK_KHR_pipeline_executable_properties */
1441
.pipelineExecutableInfo = true,
1443
/* VK_EXT_primitives_generated_query */
1444
.primitivesGeneratedQuery = true,
1445
.primitivesGeneratedQueryWithRasterizerDiscard = false,
1446
.primitivesGeneratedQueryWithNonZeroStreams = false,
1448
/* VK_EXT_pipeline_library_group_handles */
1449
.pipelineLibraryGroupHandles = true,
1451
/* VK_EXT_provoking_vertex */
1452
.provokingVertexLast = true,
1453
.transformFeedbackPreservesProvokingVertex = true,
1455
/* VK_KHR_ray_query */
1456
.rayQuery = rt_enabled,
1458
/* VK_KHR_ray_tracing_maintenance1 */
1459
.rayTracingMaintenance1 = rt_enabled,
1460
.rayTracingPipelineTraceRaysIndirect2 = rt_enabled,
1462
/* VK_KHR_ray_tracing_pipeline */
1463
.rayTracingPipeline = rt_enabled,
1464
.rayTracingPipelineShaderGroupHandleCaptureReplay = false,
1465
.rayTracingPipelineShaderGroupHandleCaptureReplayMixed = false,
1466
.rayTracingPipelineTraceRaysIndirect = rt_enabled,
1467
.rayTraversalPrimitiveCulling = rt_enabled,
1469
/* VK_EXT_robustness2 */
1470
.robustBufferAccess2 = true,
1471
.robustImageAccess2 = true,
1472
.nullDescriptor = true,
1474
/* VK_EXT_shader_atomic_float */
1475
.shaderBufferFloat32Atomics = true,
1476
.shaderBufferFloat32AtomicAdd = pdevice->info.has_lsc,
1477
.shaderBufferFloat64Atomics =
1478
pdevice->info.has_64bit_float && pdevice->info.has_lsc,
1479
.shaderBufferFloat64AtomicAdd = false,
1480
.shaderSharedFloat32Atomics = true,
1481
.shaderSharedFloat32AtomicAdd = false,
1482
.shaderSharedFloat64Atomics = false,
1483
.shaderSharedFloat64AtomicAdd = false,
1484
.shaderImageFloat32Atomics = true,
1485
.shaderImageFloat32AtomicAdd = false,
1486
.sparseImageFloat32Atomics = false,
1487
.sparseImageFloat32AtomicAdd = false,
1489
/* VK_EXT_shader_atomic_float2 */
1490
.shaderBufferFloat16Atomics = pdevice->info.has_lsc,
1491
.shaderBufferFloat16AtomicAdd = false,
1492
.shaderBufferFloat16AtomicMinMax = pdevice->info.has_lsc,
1493
.shaderBufferFloat32AtomicMinMax = true,
1494
.shaderBufferFloat64AtomicMinMax =
1495
pdevice->info.has_64bit_float && pdevice->info.has_lsc,
1496
.shaderSharedFloat16Atomics = pdevice->info.has_lsc,
1497
.shaderSharedFloat16AtomicAdd = false,
1498
.shaderSharedFloat16AtomicMinMax = pdevice->info.has_lsc,
1499
.shaderSharedFloat32AtomicMinMax = true,
1500
.shaderSharedFloat64AtomicMinMax = false,
1501
.shaderImageFloat32AtomicMinMax = false,
1502
.sparseImageFloat32AtomicMinMax = false,
1504
/* VK_KHR_shader_clock */
1505
.shaderSubgroupClock = true,
1506
.shaderDeviceClock = false,
1508
/* VK_INTEL_shader_integer_functions2 */
1509
.shaderIntegerFunctions2 = true,
1511
/* VK_EXT_shader_module_identifier */
1512
.shaderModuleIdentifier = true,
1514
/* VK_KHR_shader_subgroup_uniform_control_flow */
1515
.shaderSubgroupUniformControlFlow = true,
1517
/* VK_EXT_texel_buffer_alignment */
1518
.texelBufferAlignment = true,
1520
/* VK_EXT_transform_feedback */
1521
.transformFeedback = true,
1522
.geometryStreams = true,
1524
/* VK_EXT_vertex_attribute_divisor */
1525
.vertexAttributeInstanceRateDivisor = true,
1526
.vertexAttributeInstanceRateZeroDivisor = true,
1528
/* VK_KHR_workgroup_memory_explicit_layout */
1529
.workgroupMemoryExplicitLayout = true,
1530
.workgroupMemoryExplicitLayoutScalarBlockLayout = true,
1531
.workgroupMemoryExplicitLayout8BitAccess = true,
1532
.workgroupMemoryExplicitLayout16BitAccess = true,
1534
/* VK_EXT_ycbcr_image_arrays */
1535
.ycbcrImageArrays = true,
1537
/* VK_EXT_extended_dynamic_state */
1538
.extendedDynamicState = true,
1540
/* VK_EXT_extended_dynamic_state2 */
1541
.extendedDynamicState2 = true,
1542
.extendedDynamicState2LogicOp = true,
1543
.extendedDynamicState2PatchControlPoints = false,
1545
/* VK_EXT_extended_dynamic_state3 */
1546
.extendedDynamicState3PolygonMode = true,
1547
.extendedDynamicState3TessellationDomainOrigin = true,
1548
.extendedDynamicState3RasterizationStream = true,
1549
.extendedDynamicState3LineStippleEnable = true,
1550
.extendedDynamicState3LineRasterizationMode = true,
1551
.extendedDynamicState3LogicOpEnable = true,
1552
.extendedDynamicState3AlphaToOneEnable = true,
1553
.extendedDynamicState3DepthClipEnable = true,
1554
.extendedDynamicState3DepthClampEnable = true,
1555
.extendedDynamicState3DepthClipNegativeOneToOne = true,
1556
.extendedDynamicState3ProvokingVertexMode = true,
1557
.extendedDynamicState3ColorBlendEnable = true,
1558
.extendedDynamicState3ColorWriteMask = true,
1559
.extendedDynamicState3ColorBlendEquation = true,
1560
.extendedDynamicState3SampleLocationsEnable = true,
1561
.extendedDynamicState3SampleMask = true,
1563
.extendedDynamicState3RasterizationSamples = false,
1564
.extendedDynamicState3AlphaToCoverageEnable = false,
1565
.extendedDynamicState3ConservativeRasterizationMode = false,
1566
.extendedDynamicState3ExtraPrimitiveOverestimationSize = false,
1567
.extendedDynamicState3ViewportWScalingEnable = false,
1568
.extendedDynamicState3ViewportSwizzle = false,
1569
.extendedDynamicState3ShadingRateImageEnable = false,
1570
.extendedDynamicState3CoverageToColorEnable = false,
1571
.extendedDynamicState3CoverageToColorLocation = false,
1572
.extendedDynamicState3CoverageModulationMode = false,
1573
.extendedDynamicState3CoverageModulationTableEnable = false,
1574
.extendedDynamicState3CoverageModulationTable = false,
1575
.extendedDynamicState3CoverageReductionMode = false,
1576
.extendedDynamicState3RepresentativeFragmentTestEnable = false,
1577
.extendedDynamicState3ColorBlendAdvanced = false,
1579
/* VK_EXT_multi_draw */
1582
/* VK_EXT_non_seamless_cube_map */
1583
.nonSeamlessCubeMap = true,
1585
/* VK_EXT_primitive_topology_list_restart */
1586
.primitiveTopologyListRestart = true,
1587
.primitiveTopologyPatchListRestart = true,
1589
/* VK_EXT_depth_clip_control */
1590
.depthClipControl = true,
1592
/* VK_KHR_present_id */
1593
.presentId = pdevice->vk.supported_extensions.KHR_present_id,
1595
/* VK_KHR_present_wait */
1596
.presentWait = pdevice->vk.supported_extensions.KHR_present_wait,
1598
/* VK_EXT_vertex_input_dynamic_state */
1599
.vertexInputDynamicState = true,
1602
/* The new DOOM and Wolfenstein games require depthBounds without
1603
* checking for it. They seem to run fine without it so just claim it's
1604
* there and accept the consequences.
1606
if (app_info->engine_name && strcmp(app_info->engine_name, "idTech") == 0)
1607
features.depthBounds = true;
1609
vk_get_physical_device_features(pFeatures, &features);
1612
1593
#define MAX_PER_STAGE_DESCRIPTOR_UNIFORM_BUFFERS 64
1614
1595
#define MAX_PER_STAGE_DESCRIPTOR_INPUT_ATTACHMENTS 64