Check all Feature we need meet.
Create the feature chain.
Get all Features that supported.
@Fetch all features.
Just return true for we do not need a specific feature supported now.
Create the feature chain.
Get all Features that supported.
@Fetch all features.
Just return true for we do not need a specific feature supported now.
410 {
412
416 VkPhysicalDeviceRobustness2FeaturesEXT robustness2{};
417 robustness2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
418 robustness2.pNext = nullptr;
419
420 VkPhysicalDeviceHostImageCopyFeaturesEXT hostImageCopyFeature{};
421 hostImageCopyFeature.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT;
422 hostImageCopyFeature.pNext = &robustness2;
423
424 VkPhysicalDeviceTimelineSemaphoreFeatures timelineSemaphore{};
425 timelineSemaphore.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES;
426 timelineSemaphore.pNext = &hostImageCopyFeature;
427
428 VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR fragShaderBarycentric{};
429 fragShaderBarycentric.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR;
430 fragShaderBarycentric.pNext = &timelineSemaphore;
431
432 VkPhysicalDeviceDiagnosticsConfigFeaturesNV diagnosticsConfig{};
433 diagnosticsConfig.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV;
434 diagnosticsConfig.pNext = &fragShaderBarycentric;
435
436 VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV dgcFeatures{};
437 dgcFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV;
438 dgcFeatures.pNext = &diagnosticsConfig;
439
440 VkPhysicalDeviceVulkan13Features vk13Frature{};
441 vk13Frature.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
442 vk13Frature.pNext = &dgcFeatures;
443
444 VkPhysicalDeviceFragmentShadingRateFeaturesKHR fragShadingRateFeature {};
445 fragShadingRateFeature.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR;
446 fragShadingRateFeature.pNext = &vk13Frature;
447
448 VkPhysicalDeviceMultiviewFeatures multiviewFeatures {};
449 multiviewFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
450 multiviewFeatures.pNext = &fragShadingRateFeature;
451
452 VkPhysicalDeviceMeshShaderFeaturesEXT meshShaderFeatures {};
453 meshShaderFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT;
454 meshShaderFeatures.pNext = &multiviewFeatures;
455
456 VkPhysicalDeviceShaderClockFeaturesKHR shaderClockFeatures{};
457 shaderClockFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR;
458 shaderClockFeatures.pNext = &meshShaderFeatures;
459
460 VkPhysicalDeviceScalarBlockLayoutFeatures layoutFeatures {};
461 layoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES;
462 layoutFeatures.pNext = &shaderClockFeatures;
463
464 VkPhysicalDeviceHostQueryResetFeatures hostQueryResetFeatures {};
465 hostQueryResetFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES;
466 hostQueryResetFeatures.pNext = &layoutFeatures;
467
468 VkPhysicalDeviceRayQueryFeaturesKHR rayQueryFeatures {};
469 rayQueryFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR;
470 rayQueryFeatures.pNext = &hostQueryResetFeatures;
471
472 VkPhysicalDeviceRayTracingPipelineFeaturesKHR rayTracingFeatures {};
473 rayTracingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR;
474 rayTracingFeatures.pNext = &rayQueryFeatures;
475
476 VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures {};
477 accelerationStructureFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR;
478 accelerationStructureFeatures.pNext = &rayTracingFeatures;
479
480 VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexingFeatures {};
481 descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
482 descriptorIndexingFeatures.pNext = &accelerationStructureFeatures;
483
484 VkPhysicalDeviceBufferDeviceAddressFeatures bufferDeviceAddressFeatures {};
485 bufferDeviceAddressFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES;
486 bufferDeviceAddressFeatures.pNext = &descriptorIndexingFeatures;
487
491 VkPhysicalDeviceFeatures2 deviceFeatures {};
492 deviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
493 deviceFeatures.pNext = &bufferDeviceAddressFeatures;
494
498 vkGetPhysicalDeviceFeatures2(device, &deviceFeatures);
500
505 ASSERT(deviceFeatures.features.samplerAnisotropy)
506 ASSERT(deviceFeatures.features.sampleRateShading)
507 ASSERT(deviceFeatures.features.independentBlend)
508 ASSERT(deviceFeatures.features.geometryShader)
509 ASSERT(bufferDeviceAddressFeatures.bufferDeviceAddress)
510 ASSERT(bufferDeviceAddressFeatures.bufferDeviceAddressCaptureReplay)
511 ASSERT(accelerationStructureFeatures.accelerationStructure)
512 ASSERT(rayTracingFeatures.rayTracingPipeline)
513 ASSERT(rayQueryFeatures.rayQuery)
514 ASSERT(hostQueryResetFeatures.hostQueryReset)
515 ASSERT(layoutFeatures.scalarBlockLayout)
516
517 ASSERT(descriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing)
518 ASSERT(descriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind)
519 ASSERT(descriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing)
520 ASSERT(descriptorIndexingFeatures.descriptorBindingUniformBufferUpdateAfterBind)
521 ASSERT(descriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing)
522 ASSERT(descriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind)
523 ASSERT(descriptorIndexingFeatures.descriptorBindingPartiallyBound)
524 ASSERT(descriptorIndexingFeatures.runtimeDescriptorArray)
525
526 ASSERT(shaderClockFeatures.shaderSubgroupClock)
527
528 ASSERT(meshShaderFeatures.meshShader)
529 ASSERT(meshShaderFeatures.taskShader)
530
531 ASSERT(multiviewFeatures.multiview)
532 ASSERT(fragShadingRateFeature.pipelineFragmentShadingRate)
533 ASSERT(vk13Frature.maintenance4)
534
535 ASSERT(dgcFeatures.deviceGeneratedCommands)
536
537 ASSERT(diagnosticsConfig.diagnosticsConfig)
538
539 ASSERT(fragShaderBarycentric.fragmentShaderBarycentric)
540
541 ASSERT(timelineSemaphore.timelineSemaphore)
542
543 ASSERT(hostImageCopyFeature.hostImageCopy)
544
545 ASSERT(robustness2.nullDescriptor)
546
547 return true;
548 }
#define ASSERT(expr)
Assert macro.
#define SPICES_PROFILE_ZONE
static VkPhysicalDeviceFeatures m_DeviceFeatures
Selected Physical Device Features.