/* WARNING: This is auto-generated file. Do not modify, since changes will * be lost! Modify the generating script instead. */ if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, uniformAndStorageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storagePushConstant16), FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageInputOutput16), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiview), FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewGeometryShader), FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewTessellationShader), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointersStorageBuffer), FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointers), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceProtectedMemoryFeatures, protectedMemory), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSamplerYcbcrConversionFeatures, samplerYcbcrConversion), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderDrawParametersFeatures, shaderDrawParameters), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, uniformAndStorageBuffer16BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storagePushConstant16), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageInputOutput16), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiview), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewGeometryShader), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewTessellationShader), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointersStorageBuffer), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointers), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, protectedMemory), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, samplerYcbcrConversion), FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, shaderDrawParameters), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerMirrorClampToEdge), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, drawIndirectCount), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformAndStorageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storagePushConstant8), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderBufferInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSharedInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderFloat16), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInt8), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSampledImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingSampledImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUpdateUnusedWhilePending), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingPartiallyBound), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingVariableDescriptorCount), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, runtimeDescriptorArray), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerFilterMinmax), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, scalarBlockLayout), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, imagelessFramebuffer), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformBufferStandardLayout), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSubgroupExtendedTypes), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, separateDepthStencilLayouts), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, hostQueryReset), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, timelineSemaphore), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddress), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressMultiDevice), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModel), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelDeviceScope), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelAvailabilityVisibilityChains), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputViewportIndex), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputLayer), FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, subgroupBroadcastDynamicId), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 47, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, uniformAndStorageBuffer8BitAccess), FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storagePushConstant8), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderBufferInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderSharedInt64Atomics), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderFloat16), FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderInt8), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayDynamicIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderSampledImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageImageArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayNonUniformIndexing), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingSampledImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageImageUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageTexelBufferUpdateAfterBind), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUpdateUnusedWhilePending), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingPartiallyBound), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingVariableDescriptorCount), FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, runtimeDescriptorArray), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 20, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceScalarBlockLayoutFeatures, scalarBlockLayout), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModel), FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelDeviceScope), FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelAvailabilityVisibilityChains), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceImagelessFramebufferFeatures, imagelessFramebuffer), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceUniformBufferStandardLayoutFeatures, uniformBufferStandardLayout), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, shaderSubgroupExtendedTypes), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, separateDepthStencilLayouts), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceHostQueryResetFeatures, hostQueryReset), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTimelineSemaphoreFeatures, timelineSemaphore), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddress), FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressMultiDevice), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDynamicRenderingFeaturesKHR, dynamicRendering), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterQueryPools), FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterMultipleQueryPools), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderSubgroupClock), FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderDeviceClock), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR, shaderTerminateInvocation), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, pipelineFragmentShadingRate), FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, primitiveFragmentShadingRate), FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, attachmentFragmentShadingRate), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePresentWaitFeaturesKHR, presentWait), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR, pipelineExecutableInfo), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR, shaderIntegerDotProduct), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePresentIdFeaturesKHR, presentId), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSynchronization2FeaturesKHR, synchronization2), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR, shaderSubgroupUniformControlFlow), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR, shaderZeroInitializeWorkgroupMemory), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayout), FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayoutScalarBlockLayout), FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayout8BitAccess), FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayout16BitAccess), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMaintenance4FeaturesKHR, maintenance4), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTransformFeedbackFeaturesEXT, transformFeedback), FEATURE_ITEM (VkPhysicalDeviceTransformFeedbackFeaturesEXT, geometryStreams), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceCornerSampledImageFeaturesNV, cornerSampledImage), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT, textureCompressionASTC_HDR), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceASTCDecodeFeaturesEXT, decodeModeSharedExponent), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceConditionalRenderingFeaturesEXT, conditionalRendering), FEATURE_ITEM (VkPhysicalDeviceConditionalRenderingFeaturesEXT, inheritedConditionalRendering), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDepthClipEnableFeaturesEXT, depthClipEnable), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceInlineUniformBlockFeaturesEXT, inlineUniformBlock), FEATURE_ITEM (VkPhysicalDeviceInlineUniformBlockFeaturesEXT, descriptorBindingInlineUniformBlockUpdateAfterBind), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderSMBuiltinsFeaturesNV, shaderSMBuiltins), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShadingRateImageFeaturesNV, shadingRateImage), FEATURE_ITEM (VkPhysicalDeviceShadingRateImageFeaturesNV, shadingRateCoarseSampleOrder), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV, representativeFragmentTest), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateDivisor), FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateZeroDivisor), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceComputeShaderDerivativesFeaturesNV, computeDerivativeGroupQuads), FEATURE_ITEM (VkPhysicalDeviceComputeShaderDerivativesFeaturesNV, computeDerivativeGroupLinear), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesNV, taskShader), FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesNV, meshShader), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV, fragmentShaderBarycentric), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderImageFootprintFeaturesNV, imageFootprint), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExclusiveScissorFeaturesNV, exclusiveScissor), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL, shaderIntegerFunctions2), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapFeaturesEXT, fragmentDensityMap), FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapFeaturesEXT, fragmentDensityMapDynamic), FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapFeaturesEXT, fragmentDensityMapNonSubsampledImages), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeaturesEXT, subgroupSizeControl), FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeaturesEXT, computeFullSubgroups), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceCoherentMemoryFeaturesAMD, deviceCoherentMemory), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, shaderImageInt64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, sparseImageInt64Atomics), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMemoryPriorityFeaturesEXT, memoryPriority), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV, dedicatedAllocationImageAliasing), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, bufferDeviceAddress), FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, bufferDeviceAddressCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, bufferDeviceAddressMultiDevice), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceCooperativeMatrixFeaturesNV, cooperativeMatrix), FEATURE_ITEM (VkPhysicalDeviceCooperativeMatrixFeaturesNV, cooperativeMatrixRobustBufferAccess), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceCoverageReductionModeFeaturesNV, coverageReductionMode), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderSampleInterlock), FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderPixelInterlock), FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderShadingRateInterlock), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceYcbcrImageArraysFeaturesEXT, ycbcrImageArrays), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceProvokingVertexFeaturesEXT, provokingVertexLast), FEATURE_ITEM (VkPhysicalDeviceProvokingVertexFeaturesEXT, transformFeedbackPreservesProvokingVertex), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, rectangularLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, bresenhamLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, smoothLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledRectangularLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledBresenhamLines), FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledSmoothLines), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 6, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32AtomicAdd), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceIndexTypeUint8FeaturesEXT, indexTypeUint8), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, extendedDynamicState), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat16Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat16AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat16AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat32AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat64AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat16Atomics), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat16AtomicAdd), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat16AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat32AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat64AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderImageFloat32AtomicMinMax), FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, sparseImageFloat32AtomicMinMax), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, shaderDemoteToHelperInvocation), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV, deviceGeneratedCommands), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceInheritedViewportScissorFeaturesNV, inheritedViewportScissor2D), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT, texelBufferAlignment), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDeviceMemoryReportFeaturesEXT, deviceMemoryReport), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustBufferAccess2), FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustImageAccess2), FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, nullDescriptor), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColors), FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColorWithoutFormat), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePrivateDataFeaturesEXT, privateData), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT, pipelineCreationCacheControl), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDiagnosticsConfigFeaturesNV, diagnosticsConfig), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, fragmentShadingRateEnums), FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, supersampleFragmentShadingRates), FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, noInvocationFragmentShadingRates), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, rayTracingMotionBlur), FEATURE_ITEM (VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, rayTracingMotionBlurPipelineTraceRaysIndirect), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT, ycbcr2plane444Formats), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMap2FeaturesEXT, fragmentDensityMapDeferred), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceImageRobustnessFeaturesEXT, robustImageAccess), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4R4G4B4), FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4B4G4R4), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM, rasterizationOrderColorAttachmentAccess), FEATURE_ITEM (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM, rasterizationOrderDepthAttachmentAccess), FEATURE_ITEM (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM, rasterizationOrderStencilAttachmentAccess), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT, formatRgba10x6WithoutYCbCrSampler), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE, mutableDescriptorType), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT, vertexInputDynamicState), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceDepthClipControlFeaturesEXT, depthClipControl), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, primitiveTopologyListRestart), FEATURE_ITEM (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, primitiveTopologyPatchListRestart), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceSubpassShadingFeaturesHUAWEI, subpassShading), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceInvocationMaskFeaturesHUAWEI, invocationMask), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExternalMemoryRDMAFeaturesNV, externalMemoryRDMA), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2), FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2LogicOp), FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2PatchControlPoints), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceColorWriteEnableFeaturesEXT, colorWriteEnable), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT, globalPriorityQuery), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceImageViewMinLodFeaturesEXT, minLod), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceMultiDrawFeaturesEXT, multiDraw), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, borderColorSwizzle), FEATURE_ITEM (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, borderColorSwizzleFromImage), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT, pageableDeviceLocalMemory), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructure), FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructureCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructureIndirectBuild), FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructureHostCommands), FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, descriptorBindingAccelerationStructureUpdateAfterBind), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 5, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipeline), FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipelineShaderGroupHandleCaptureReplay), FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipelineShaderGroupHandleCaptureReplayMixed), FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipelineTraceRaysIndirect), FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTraversalPrimitiveCulling), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 5, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDeviceRayQueryFeaturesKHR, rayQuery), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); } if (const void* featuresStruct = findStructureInChain(const_cast(deviceFeatures2.pNext), getStructureType())) { static const Feature features[] = { FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, constantAlphaColorBlendFactors), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, events), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, imageViewFormatReinterpretation), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, imageViewFormatSwizzle), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, imageView2DOn3DImage), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, multisampleArrayImage), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, mutableComparisonSamplers), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, pointPolygons), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, samplerMipLodBias), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, separateStencilMaskRef), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, shaderSampleRateInterpolationFunctions), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, tessellationIsolines), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, tessellationPointMode), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, triangleFans), FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, vertexAttributeAccessBeyondStride), }; auto* supportedFeatures = reinterpret_cast(featuresStruct); checkFeatures(vkp, instance, instanceDriver, physicalDevice, 15, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures); }