blob: 337ed6a29c54ca9b19efd07c8005f9840d5718c1 [file] [log] [blame]
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
// See feature_not_present.py for modifications
/***************************************************************************
*
* Copyright (c) 2025-2026 Valve Corporation
* Copyright (c) 2025-2026 LunarG, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
****************************************************************************/
#include "chassis/dispatch_object.h"
#include "generated/dispatch_functions.h"
#include "error_message/error_location.h"
namespace vvl {
namespace dispatch {
void Instance::ReportErrorFeatureNotPresent(VkPhysicalDevice gpu, const VkDeviceCreateInfo &create_info) {
std::ostringstream ss;
ss << "returned VK_ERROR_FEATURE_NOT_PRESENT because the following features were not supported on this physical device:\n";
// First do 1.0 VkPhysicalDeviceFeatures
const auto *features2_in = vku::FindStructInPNextChain<VkPhysicalDeviceFeatures2>(create_info.pNext);
if (create_info.pEnabledFeatures || features2_in) {
const VkPhysicalDeviceFeatures &enabling =
create_info.pEnabledFeatures ? *create_info.pEnabledFeatures : features2_in->features;
VkPhysicalDeviceFeatures supported = {};
DispatchGetPhysicalDeviceFeatures(gpu, &supported);
if (enabling.robustBufferAccess && !supported.robustBufferAccess) {
ss << "VkPhysicalDeviceFeatures::robustBufferAccess is not supported\n";
}
if (enabling.fullDrawIndexUint32 && !supported.fullDrawIndexUint32) {
ss << "VkPhysicalDeviceFeatures::fullDrawIndexUint32 is not supported\n";
}
if (enabling.imageCubeArray && !supported.imageCubeArray) {
ss << "VkPhysicalDeviceFeatures::imageCubeArray is not supported\n";
}
if (enabling.independentBlend && !supported.independentBlend) {
ss << "VkPhysicalDeviceFeatures::independentBlend is not supported\n";
}
if (enabling.geometryShader && !supported.geometryShader) {
ss << "VkPhysicalDeviceFeatures::geometryShader is not supported\n";
}
if (enabling.tessellationShader && !supported.tessellationShader) {
ss << "VkPhysicalDeviceFeatures::tessellationShader is not supported\n";
}
if (enabling.sampleRateShading && !supported.sampleRateShading) {
ss << "VkPhysicalDeviceFeatures::sampleRateShading is not supported\n";
}
if (enabling.dualSrcBlend && !supported.dualSrcBlend) {
ss << "VkPhysicalDeviceFeatures::dualSrcBlend is not supported\n";
}
if (enabling.logicOp && !supported.logicOp) {
ss << "VkPhysicalDeviceFeatures::logicOp is not supported\n";
}
if (enabling.multiDrawIndirect && !supported.multiDrawIndirect) {
ss << "VkPhysicalDeviceFeatures::multiDrawIndirect is not supported\n";
}
if (enabling.drawIndirectFirstInstance && !supported.drawIndirectFirstInstance) {
ss << "VkPhysicalDeviceFeatures::drawIndirectFirstInstance is not supported\n";
}
if (enabling.depthClamp && !supported.depthClamp) {
ss << "VkPhysicalDeviceFeatures::depthClamp is not supported\n";
}
if (enabling.depthBiasClamp && !supported.depthBiasClamp) {
ss << "VkPhysicalDeviceFeatures::depthBiasClamp is not supported\n";
}
if (enabling.fillModeNonSolid && !supported.fillModeNonSolid) {
ss << "VkPhysicalDeviceFeatures::fillModeNonSolid is not supported\n";
}
if (enabling.depthBounds && !supported.depthBounds) {
ss << "VkPhysicalDeviceFeatures::depthBounds is not supported\n";
}
if (enabling.wideLines && !supported.wideLines) {
ss << "VkPhysicalDeviceFeatures::wideLines is not supported\n";
}
if (enabling.largePoints && !supported.largePoints) {
ss << "VkPhysicalDeviceFeatures::largePoints is not supported\n";
}
if (enabling.alphaToOne && !supported.alphaToOne) {
ss << "VkPhysicalDeviceFeatures::alphaToOne is not supported\n";
}
if (enabling.multiViewport && !supported.multiViewport) {
ss << "VkPhysicalDeviceFeatures::multiViewport is not supported\n";
}
if (enabling.samplerAnisotropy && !supported.samplerAnisotropy) {
ss << "VkPhysicalDeviceFeatures::samplerAnisotropy is not supported\n";
}
if (enabling.textureCompressionETC2 && !supported.textureCompressionETC2) {
ss << "VkPhysicalDeviceFeatures::textureCompressionETC2 is not supported\n";
}
if (enabling.textureCompressionASTC_LDR && !supported.textureCompressionASTC_LDR) {
ss << "VkPhysicalDeviceFeatures::textureCompressionASTC_LDR is not supported\n";
}
if (enabling.textureCompressionBC && !supported.textureCompressionBC) {
ss << "VkPhysicalDeviceFeatures::textureCompressionBC is not supported\n";
}
if (enabling.occlusionQueryPrecise && !supported.occlusionQueryPrecise) {
ss << "VkPhysicalDeviceFeatures::occlusionQueryPrecise is not supported\n";
}
if (enabling.pipelineStatisticsQuery && !supported.pipelineStatisticsQuery) {
ss << "VkPhysicalDeviceFeatures::pipelineStatisticsQuery is not supported\n";
}
if (enabling.vertexPipelineStoresAndAtomics && !supported.vertexPipelineStoresAndAtomics) {
ss << "VkPhysicalDeviceFeatures::vertexPipelineStoresAndAtomics is not supported\n";
}
if (enabling.fragmentStoresAndAtomics && !supported.fragmentStoresAndAtomics) {
ss << "VkPhysicalDeviceFeatures::fragmentStoresAndAtomics is not supported\n";
}
if (enabling.shaderTessellationAndGeometryPointSize && !supported.shaderTessellationAndGeometryPointSize) {
ss << "VkPhysicalDeviceFeatures::shaderTessellationAndGeometryPointSize is not supported\n";
}
if (enabling.shaderImageGatherExtended && !supported.shaderImageGatherExtended) {
ss << "VkPhysicalDeviceFeatures::shaderImageGatherExtended is not supported\n";
}
if (enabling.shaderStorageImageExtendedFormats && !supported.shaderStorageImageExtendedFormats) {
ss << "VkPhysicalDeviceFeatures::shaderStorageImageExtendedFormats is not supported\n";
}
if (enabling.shaderStorageImageMultisample && !supported.shaderStorageImageMultisample) {
ss << "VkPhysicalDeviceFeatures::shaderStorageImageMultisample is not supported\n";
}
if (enabling.shaderStorageImageReadWithoutFormat && !supported.shaderStorageImageReadWithoutFormat) {
ss << "VkPhysicalDeviceFeatures::shaderStorageImageReadWithoutFormat is not supported\n";
}
if (enabling.shaderStorageImageWriteWithoutFormat && !supported.shaderStorageImageWriteWithoutFormat) {
ss << "VkPhysicalDeviceFeatures::shaderStorageImageWriteWithoutFormat is not supported\n";
}
if (enabling.shaderUniformBufferArrayDynamicIndexing && !supported.shaderUniformBufferArrayDynamicIndexing) {
ss << "VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing is not supported\n";
}
if (enabling.shaderSampledImageArrayDynamicIndexing && !supported.shaderSampledImageArrayDynamicIndexing) {
ss << "VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing is not supported\n";
}
if (enabling.shaderStorageBufferArrayDynamicIndexing && !supported.shaderStorageBufferArrayDynamicIndexing) {
ss << "VkPhysicalDeviceFeatures::shaderStorageBufferArrayDynamicIndexing is not supported\n";
}
if (enabling.shaderStorageImageArrayDynamicIndexing && !supported.shaderStorageImageArrayDynamicIndexing) {
ss << "VkPhysicalDeviceFeatures::shaderStorageImageArrayDynamicIndexing is not supported\n";
}
if (enabling.shaderClipDistance && !supported.shaderClipDistance) {
ss << "VkPhysicalDeviceFeatures::shaderClipDistance is not supported\n";
}
if (enabling.shaderCullDistance && !supported.shaderCullDistance) {
ss << "VkPhysicalDeviceFeatures::shaderCullDistance is not supported\n";
}
if (enabling.shaderFloat64 && !supported.shaderFloat64) {
ss << "VkPhysicalDeviceFeatures::shaderFloat64 is not supported\n";
}
if (enabling.shaderInt64 && !supported.shaderInt64) {
ss << "VkPhysicalDeviceFeatures::shaderInt64 is not supported\n";
}
if (enabling.shaderInt16 && !supported.shaderInt16) {
ss << "VkPhysicalDeviceFeatures::shaderInt16 is not supported\n";
}
if (enabling.shaderResourceResidency && !supported.shaderResourceResidency) {
ss << "VkPhysicalDeviceFeatures::shaderResourceResidency is not supported\n";
}
if (enabling.shaderResourceMinLod && !supported.shaderResourceMinLod) {
ss << "VkPhysicalDeviceFeatures::shaderResourceMinLod is not supported\n";
}
if (enabling.sparseBinding && !supported.sparseBinding) {
ss << "VkPhysicalDeviceFeatures::sparseBinding is not supported\n";
}
if (enabling.sparseResidencyBuffer && !supported.sparseResidencyBuffer) {
ss << "VkPhysicalDeviceFeatures::sparseResidencyBuffer is not supported\n";
}
if (enabling.sparseResidencyImage2D && !supported.sparseResidencyImage2D) {
ss << "VkPhysicalDeviceFeatures::sparseResidencyImage2D is not supported\n";
}
if (enabling.sparseResidencyImage3D && !supported.sparseResidencyImage3D) {
ss << "VkPhysicalDeviceFeatures::sparseResidencyImage3D is not supported\n";
}
if (enabling.sparseResidency2Samples && !supported.sparseResidency2Samples) {
ss << "VkPhysicalDeviceFeatures::sparseResidency2Samples is not supported\n";
}
if (enabling.sparseResidency4Samples && !supported.sparseResidency4Samples) {
ss << "VkPhysicalDeviceFeatures::sparseResidency4Samples is not supported\n";
}
if (enabling.sparseResidency8Samples && !supported.sparseResidency8Samples) {
ss << "VkPhysicalDeviceFeatures::sparseResidency8Samples is not supported\n";
}
if (enabling.sparseResidency16Samples && !supported.sparseResidency16Samples) {
ss << "VkPhysicalDeviceFeatures::sparseResidency16Samples is not supported\n";
}
if (enabling.sparseResidencyAliased && !supported.sparseResidencyAliased) {
ss << "VkPhysicalDeviceFeatures::sparseResidencyAliased is not supported\n";
}
if (enabling.variableMultisampleRate && !supported.variableMultisampleRate) {
ss << "VkPhysicalDeviceFeatures::variableMultisampleRate is not supported\n";
}
if (enabling.inheritedQueries && !supported.inheritedQueries) {
ss << "VkPhysicalDeviceFeatures::inheritedQueries is not supported\n";
}
}
VkPhysicalDeviceFeatures2 features_2 = vku::InitStructHelper();
for (const VkBaseInStructure *current = static_cast<const VkBaseInStructure *>(create_info.pNext); current != nullptr;
current = current->pNext) {
switch (current->sType) {
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
VkPhysicalDevice16BitStorageFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevice16BitStorageFeatures *enabling =
reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures *>(current);
if (enabling->storageBuffer16BitAccess && !supported.storageBuffer16BitAccess) {
ss << "VkPhysicalDevice16BitStorageFeatures::storageBuffer16BitAccess is not supported\n";
}
if (enabling->uniformAndStorageBuffer16BitAccess && !supported.uniformAndStorageBuffer16BitAccess) {
ss << "VkPhysicalDevice16BitStorageFeatures::uniformAndStorageBuffer16BitAccess is not supported\n";
}
if (enabling->storagePushConstant16 && !supported.storagePushConstant16) {
ss << "VkPhysicalDevice16BitStorageFeatures::storagePushConstant16 is not supported\n";
}
if (enabling->storageInputOutput16 && !supported.storageInputOutput16) {
ss << "VkPhysicalDevice16BitStorageFeatures::storageInputOutput16 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: {
VkPhysicalDevice4444FormatsFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevice4444FormatsFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT *>(current);
if (enabling->formatA4R4G4B4 && !supported.formatA4R4G4B4) {
ss << "VkPhysicalDevice4444FormatsFeaturesEXT::formatA4R4G4B4 is not supported\n";
}
if (enabling->formatA4B4G4R4 && !supported.formatA4B4G4R4) {
ss << "VkPhysicalDevice4444FormatsFeaturesEXT::formatA4B4G4R4 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: {
VkPhysicalDevice8BitStorageFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevice8BitStorageFeatures *enabling =
reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures *>(current);
if (enabling->storageBuffer8BitAccess && !supported.storageBuffer8BitAccess) {
ss << "VkPhysicalDevice8BitStorageFeatures::storageBuffer8BitAccess is not supported\n";
}
if (enabling->uniformAndStorageBuffer8BitAccess && !supported.uniformAndStorageBuffer8BitAccess) {
ss << "VkPhysicalDevice8BitStorageFeatures::uniformAndStorageBuffer8BitAccess is not supported\n";
}
if (enabling->storagePushConstant8 && !supported.storagePushConstant8) {
ss << "VkPhysicalDevice8BitStorageFeatures::storagePushConstant8 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: {
VkPhysicalDeviceASTCDecodeFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceASTCDecodeFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT *>(current);
if (enabling->decodeModeSharedExponent && !supported.decodeModeSharedExponent) {
ss << "VkPhysicalDeviceASTCDecodeFeaturesEXT::decodeModeSharedExponent is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: {
VkPhysicalDeviceAccelerationStructureFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceAccelerationStructureFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR *>(current);
if (enabling->accelerationStructure && !supported.accelerationStructure) {
ss << "VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure is not supported\n";
}
if (enabling->accelerationStructureCaptureReplay && !supported.accelerationStructureCaptureReplay) {
ss << "VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureCaptureReplay is not supported\n";
}
if (enabling->accelerationStructureIndirectBuild && !supported.accelerationStructureIndirectBuild) {
ss << "VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureIndirectBuild is not supported\n";
}
if (enabling->accelerationStructureHostCommands && !supported.accelerationStructureHostCommands) {
ss << "VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands is not supported\n";
}
if (enabling->descriptorBindingAccelerationStructureUpdateAfterBind &&
!supported.descriptorBindingAccelerationStructureUpdateAfterBind) {
ss << "VkPhysicalDeviceAccelerationStructureFeaturesKHR::descriptorBindingAccelerationStructureUpdateAfterBind "
"is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT: {
VkPhysicalDeviceAddressBindingReportFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceAddressBindingReportFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceAddressBindingReportFeaturesEXT *>(current);
if (enabling->reportAddressBinding && !supported.reportAddressBinding) {
ss << "VkPhysicalDeviceAddressBindingReportFeaturesEXT::reportAddressBinding is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC: {
VkPhysicalDeviceAmigoProfilingFeaturesSEC supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceAmigoProfilingFeaturesSEC *enabling =
reinterpret_cast<const VkPhysicalDeviceAmigoProfilingFeaturesSEC *>(current);
if (enabling->amigoProfiling && !supported.amigoProfiling) {
ss << "VkPhysicalDeviceAmigoProfilingFeaturesSEC::amigoProfiling is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD: {
VkPhysicalDeviceAntiLagFeaturesAMD supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceAntiLagFeaturesAMD *enabling =
reinterpret_cast<const VkPhysicalDeviceAntiLagFeaturesAMD *>(current);
if (enabling->antiLag && !supported.antiLag) {
ss << "VkPhysicalDeviceAntiLagFeaturesAMD::antiLag is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT: {
VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *>(current);
if (enabling->attachmentFeedbackLoopDynamicState && !supported.attachmentFeedbackLoopDynamicState) {
ss << "VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT::attachmentFeedbackLoopDynamicState is "
"not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: {
VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *>(current);
if (enabling->attachmentFeedbackLoopLayout && !supported.attachmentFeedbackLoopLayout) {
ss << "VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT::attachmentFeedbackLoopLayout is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: {
VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *>(current);
if (enabling->advancedBlendCoherentOperations && !supported.advancedBlendCoherentOperations) {
ss << "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT::advancedBlendCoherentOperations is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: {
VkPhysicalDeviceBorderColorSwizzleFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *>(current);
if (enabling->borderColorSwizzle && !supported.borderColorSwizzle) {
ss << "VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::borderColorSwizzle is not supported\n";
}
if (enabling->borderColorSwizzleFromImage && !supported.borderColorSwizzleFromImage) {
ss << "VkPhysicalDeviceBorderColorSwizzleFeaturesEXT::borderColorSwizzleFromImage is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: {
VkPhysicalDeviceBufferDeviceAddressFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceBufferDeviceAddressFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures *>(current);
if (enabling->bufferDeviceAddress && !supported.bufferDeviceAddress) {
ss << "VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress is not supported\n";
}
if (enabling->bufferDeviceAddressCaptureReplay && !supported.bufferDeviceAddressCaptureReplay) {
ss << "VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddressCaptureReplay is not supported\n";
}
if (enabling->bufferDeviceAddressMultiDevice && !supported.bufferDeviceAddressMultiDevice) {
ss << "VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddressMultiDevice is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: {
VkPhysicalDeviceBufferDeviceAddressFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *>(current);
if (enabling->bufferDeviceAddress && !supported.bufferDeviceAddress) {
ss << "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddress is not supported\n";
}
if (enabling->bufferDeviceAddressCaptureReplay && !supported.bufferDeviceAddressCaptureReplay) {
ss << "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddressCaptureReplay is not supported\n";
}
if (enabling->bufferDeviceAddressMultiDevice && !supported.bufferDeviceAddressMultiDevice) {
ss << "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddressMultiDevice is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV: {
VkPhysicalDeviceClusterAccelerationStructureFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceClusterAccelerationStructureFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceClusterAccelerationStructureFeaturesNV *>(current);
if (enabling->clusterAccelerationStructure && !supported.clusterAccelerationStructure) {
ss << "VkPhysicalDeviceClusterAccelerationStructureFeaturesNV::clusterAccelerationStructure is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI: {
VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI *enabling =
reinterpret_cast<const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI *>(current);
if (enabling->clustercullingShader && !supported.clustercullingShader) {
ss << "VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI::clustercullingShader is not supported\n";
}
if (enabling->multiviewClusterCullingShader && !supported.multiviewClusterCullingShader) {
ss << "VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI::multiviewClusterCullingShader is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD: {
VkPhysicalDeviceCoherentMemoryFeaturesAMD supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCoherentMemoryFeaturesAMD *enabling =
reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD *>(current);
if (enabling->deviceCoherentMemory && !supported.deviceCoherentMemory) {
ss << "VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
VkPhysicalDeviceColorWriteEnableFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceColorWriteEnableFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceColorWriteEnableFeaturesEXT *>(current);
if (enabling->colorWriteEnable && !supported.colorWriteEnable) {
ss << "VkPhysicalDeviceColorWriteEnableFeaturesEXT::colorWriteEnable is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV: {
VkPhysicalDeviceCommandBufferInheritanceFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCommandBufferInheritanceFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCommandBufferInheritanceFeaturesNV *>(current);
if (enabling->commandBufferInheritance && !supported.commandBufferInheritance) {
ss << "VkPhysicalDeviceCommandBufferInheritanceFeaturesNV::commandBufferInheritance is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV: {
VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV *>(current);
if (enabling->computeOccupancyPriority && !supported.computeOccupancyPriority) {
ss << "VkPhysicalDeviceComputeOccupancyPriorityFeaturesNV::computeOccupancyPriority is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR: {
VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *>(current);
if (enabling->computeDerivativeGroupQuads && !supported.computeDerivativeGroupQuads) {
ss << "VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR::computeDerivativeGroupQuads is not supported\n";
}
if (enabling->computeDerivativeGroupLinear && !supported.computeDerivativeGroupLinear) {
ss << "VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR::computeDerivativeGroupLinear is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: {
VkPhysicalDeviceConditionalRenderingFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceConditionalRenderingFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT *>(current);
if (enabling->conditionalRendering && !supported.conditionalRendering) {
ss << "VkPhysicalDeviceConditionalRenderingFeaturesEXT::conditionalRendering is not supported\n";
}
if (enabling->inheritedConditionalRendering && !supported.inheritedConditionalRendering) {
ss << "VkPhysicalDeviceConditionalRenderingFeaturesEXT::inheritedConditionalRendering is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV: {
VkPhysicalDeviceCooperativeMatrix2FeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCooperativeMatrix2FeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCooperativeMatrix2FeaturesNV *>(current);
if (enabling->cooperativeMatrixWorkgroupScope && !supported.cooperativeMatrixWorkgroupScope) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixWorkgroupScope is not supported\n";
}
if (enabling->cooperativeMatrixFlexibleDimensions && !supported.cooperativeMatrixFlexibleDimensions) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixFlexibleDimensions is not supported\n";
}
if (enabling->cooperativeMatrixReductions && !supported.cooperativeMatrixReductions) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixReductions is not supported\n";
}
if (enabling->cooperativeMatrixConversions && !supported.cooperativeMatrixConversions) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixConversions is not supported\n";
}
if (enabling->cooperativeMatrixPerElementOperations && !supported.cooperativeMatrixPerElementOperations) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixPerElementOperations is not supported\n";
}
if (enabling->cooperativeMatrixTensorAddressing && !supported.cooperativeMatrixTensorAddressing) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixTensorAddressing is not supported\n";
}
if (enabling->cooperativeMatrixBlockLoads && !supported.cooperativeMatrixBlockLoads) {
ss << "VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixBlockLoads is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_CONVERSION_FEATURES_QCOM: {
VkPhysicalDeviceCooperativeMatrixConversionFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCooperativeMatrixConversionFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixConversionFeaturesQCOM *>(current);
if (enabling->cooperativeMatrixConversion && !supported.cooperativeMatrixConversion) {
ss << "VkPhysicalDeviceCooperativeMatrixConversionFeaturesQCOM::cooperativeMatrixConversion is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR: {
VkPhysicalDeviceCooperativeMatrixFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *>(current);
if (enabling->cooperativeMatrix && !supported.cooperativeMatrix) {
ss << "VkPhysicalDeviceCooperativeMatrixFeaturesKHR::cooperativeMatrix is not supported\n";
}
if (enabling->cooperativeMatrixRobustBufferAccess && !supported.cooperativeMatrixRobustBufferAccess) {
ss << "VkPhysicalDeviceCooperativeMatrixFeaturesKHR::cooperativeMatrixRobustBufferAccess is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV: {
VkPhysicalDeviceCooperativeMatrixFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCooperativeMatrixFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV *>(current);
if (enabling->cooperativeMatrix && !supported.cooperativeMatrix) {
ss << "VkPhysicalDeviceCooperativeMatrixFeaturesNV::cooperativeMatrix is not supported\n";
}
if (enabling->cooperativeMatrixRobustBufferAccess && !supported.cooperativeMatrixRobustBufferAccess) {
ss << "VkPhysicalDeviceCooperativeMatrixFeaturesNV::cooperativeMatrixRobustBufferAccess is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV: {
VkPhysicalDeviceCooperativeVectorFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCooperativeVectorFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCooperativeVectorFeaturesNV *>(current);
if (enabling->cooperativeVector && !supported.cooperativeVector) {
ss << "VkPhysicalDeviceCooperativeVectorFeaturesNV::cooperativeVector is not supported\n";
}
if (enabling->cooperativeVectorTraining && !supported.cooperativeVectorTraining) {
ss << "VkPhysicalDeviceCooperativeVectorFeaturesNV::cooperativeVectorTraining is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR: {
VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR *>(current);
if (enabling->indirectMemoryCopy && !supported.indirectMemoryCopy) {
ss << "VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR::indirectMemoryCopy is not supported\n";
}
if (enabling->indirectMemoryToImageCopy && !supported.indirectMemoryToImageCopy) {
ss << "VkPhysicalDeviceCopyMemoryIndirectFeaturesKHR::indirectMemoryToImageCopy is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV: {
VkPhysicalDeviceCopyMemoryIndirectFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCopyMemoryIndirectFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCopyMemoryIndirectFeaturesNV *>(current);
if (enabling->indirectCopy && !supported.indirectCopy) {
ss << "VkPhysicalDeviceCopyMemoryIndirectFeaturesNV::indirectCopy is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: {
VkPhysicalDeviceCornerSampledImageFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCornerSampledImageFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV *>(current);
if (enabling->cornerSampledImage && !supported.cornerSampledImage) {
ss << "VkPhysicalDeviceCornerSampledImageFeaturesNV::cornerSampledImage is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV: {
VkPhysicalDeviceCoverageReductionModeFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCoverageReductionModeFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV *>(current);
if (enabling->coverageReductionMode && !supported.coverageReductionMode) {
ss << "VkPhysicalDeviceCoverageReductionModeFeaturesNV::coverageReductionMode is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM: {
VkPhysicalDeviceCubicClampFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCubicClampFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceCubicClampFeaturesQCOM *>(current);
if (enabling->cubicRangeClamp && !supported.cubicRangeClamp) {
ss << "VkPhysicalDeviceCubicClampFeaturesQCOM::cubicRangeClamp is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM: {
VkPhysicalDeviceCubicWeightsFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCubicWeightsFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceCubicWeightsFeaturesQCOM *>(current);
if (enabling->selectableCubicWeights && !supported.selectableCubicWeights) {
ss << "VkPhysicalDeviceCubicWeightsFeaturesQCOM::selectableCubicWeights is not supported\n";
}
break;
}
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV: {
VkPhysicalDeviceCudaKernelLaunchFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCudaKernelLaunchFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceCudaKernelLaunchFeaturesNV *>(current);
if (enabling->cudaKernelLaunchFeatures && !supported.cudaKernelLaunchFeatures) {
ss << "VkPhysicalDeviceCudaKernelLaunchFeaturesNV::cudaKernelLaunchFeatures is not supported\n";
}
break;
}
#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: {
VkPhysicalDeviceCustomBorderColorFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCustomBorderColorFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT *>(current);
if (enabling->customBorderColors && !supported.customBorderColors) {
ss << "VkPhysicalDeviceCustomBorderColorFeaturesEXT::customBorderColors is not supported\n";
}
if (enabling->customBorderColorWithoutFormat && !supported.customBorderColorWithoutFormat) {
ss << "VkPhysicalDeviceCustomBorderColorFeaturesEXT::customBorderColorWithoutFormat is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT: {
VkPhysicalDeviceCustomResolveFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceCustomResolveFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceCustomResolveFeaturesEXT *>(current);
if (enabling->customResolve && !supported.customResolve) {
ss << "VkPhysicalDeviceCustomResolveFeaturesEXT::customResolve is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM: {
VkPhysicalDeviceDataGraphFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDataGraphFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceDataGraphFeaturesARM *>(current);
if (enabling->dataGraph && !supported.dataGraph) {
ss << "VkPhysicalDeviceDataGraphFeaturesARM::dataGraph is not supported\n";
}
if (enabling->dataGraphUpdateAfterBind && !supported.dataGraphUpdateAfterBind) {
ss << "VkPhysicalDeviceDataGraphFeaturesARM::dataGraphUpdateAfterBind is not supported\n";
}
if (enabling->dataGraphSpecializationConstants && !supported.dataGraphSpecializationConstants) {
ss << "VkPhysicalDeviceDataGraphFeaturesARM::dataGraphSpecializationConstants is not supported\n";
}
if (enabling->dataGraphDescriptorBuffer && !supported.dataGraphDescriptorBuffer) {
ss << "VkPhysicalDeviceDataGraphFeaturesARM::dataGraphDescriptorBuffer is not supported\n";
}
if (enabling->dataGraphShaderModule && !supported.dataGraphShaderModule) {
ss << "VkPhysicalDeviceDataGraphFeaturesARM::dataGraphShaderModule is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM: {
VkPhysicalDeviceDataGraphModelFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDataGraphModelFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceDataGraphModelFeaturesQCOM *>(current);
if (enabling->dataGraphModel && !supported.dataGraphModel) {
ss << "VkPhysicalDeviceDataGraphModelFeaturesQCOM::dataGraphModel is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: {
VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *>(current);
if (enabling->dedicatedAllocationImageAliasing && !supported.dedicatedAllocationImageAliasing) {
ss << "VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV::dedicatedAllocationImageAliasing is not "
"supported\n";
}
break;
}
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX: {
VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX *enabling =
reinterpret_cast<const VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX *>(current);
if (enabling->denseGeometryFormat && !supported.denseGeometryFormat) {
ss << "VkPhysicalDeviceDenseGeometryFormatFeaturesAMDX::denseGeometryFormat is not supported\n";
}
break;
}
#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT: {
VkPhysicalDeviceDepthBiasControlFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDepthBiasControlFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDepthBiasControlFeaturesEXT *>(current);
if (enabling->depthBiasControl && !supported.depthBiasControl) {
ss << "VkPhysicalDeviceDepthBiasControlFeaturesEXT::depthBiasControl is not supported\n";
}
if (enabling->leastRepresentableValueForceUnormRepresentation &&
!supported.leastRepresentableValueForceUnormRepresentation) {
ss << "VkPhysicalDeviceDepthBiasControlFeaturesEXT::leastRepresentableValueForceUnormRepresentation is not "
"supported\n";
}
if (enabling->floatRepresentation && !supported.floatRepresentation) {
ss << "VkPhysicalDeviceDepthBiasControlFeaturesEXT::floatRepresentation is not supported\n";
}
if (enabling->depthBiasExact && !supported.depthBiasExact) {
ss << "VkPhysicalDeviceDepthBiasControlFeaturesEXT::depthBiasExact is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT: {
VkPhysicalDeviceDepthClampControlFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDepthClampControlFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDepthClampControlFeaturesEXT *>(current);
if (enabling->depthClampControl && !supported.depthClampControl) {
ss << "VkPhysicalDeviceDepthClampControlFeaturesEXT::depthClampControl is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR: {
VkPhysicalDeviceDepthClampZeroOneFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *>(current);
if (enabling->depthClampZeroOne && !supported.depthClampZeroOne) {
ss << "VkPhysicalDeviceDepthClampZeroOneFeaturesKHR::depthClampZeroOne is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: {
VkPhysicalDeviceDepthClipControlFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDepthClipControlFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDepthClipControlFeaturesEXT *>(current);
if (enabling->depthClipControl && !supported.depthClipControl) {
ss << "VkPhysicalDeviceDepthClipControlFeaturesEXT::depthClipControl is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: {
VkPhysicalDeviceDepthClipEnableFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDepthClipEnableFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT *>(current);
if (enabling->depthClipEnable && !supported.depthClipEnable) {
ss << "VkPhysicalDeviceDepthClipEnableFeaturesEXT::depthClipEnable is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: {
VkPhysicalDeviceDescriptorBufferFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDescriptorBufferFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDescriptorBufferFeaturesEXT *>(current);
if (enabling->descriptorBuffer && !supported.descriptorBuffer) {
ss << "VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBuffer is not supported\n";
}
if (enabling->descriptorBufferCaptureReplay && !supported.descriptorBufferCaptureReplay) {
ss << "VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferCaptureReplay is not supported\n";
}
if (enabling->descriptorBufferImageLayoutIgnored && !supported.descriptorBufferImageLayoutIgnored) {
ss << "VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferImageLayoutIgnored is not supported\n";
}
if (enabling->descriptorBufferPushDescriptors && !supported.descriptorBufferPushDescriptors) {
ss << "VkPhysicalDeviceDescriptorBufferFeaturesEXT::descriptorBufferPushDescriptors is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM: {
VkPhysicalDeviceDescriptorBufferTensorFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDescriptorBufferTensorFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceDescriptorBufferTensorFeaturesARM *>(current);
if (enabling->descriptorBufferTensorDescriptors && !supported.descriptorBufferTensorDescriptors) {
ss << "VkPhysicalDeviceDescriptorBufferTensorFeaturesARM::descriptorBufferTensorDescriptors is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT: {
VkPhysicalDeviceDescriptorHeapFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDescriptorHeapFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDescriptorHeapFeaturesEXT *>(current);
if (enabling->descriptorHeap && !supported.descriptorHeap) {
ss << "VkPhysicalDeviceDescriptorHeapFeaturesEXT::descriptorHeap is not supported\n";
}
if (enabling->descriptorHeapCaptureReplay && !supported.descriptorHeapCaptureReplay) {
ss << "VkPhysicalDeviceDescriptorHeapFeaturesEXT::descriptorHeapCaptureReplay is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: {
VkPhysicalDeviceDescriptorIndexingFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDescriptorIndexingFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures *>(current);
if (enabling->shaderInputAttachmentArrayDynamicIndexing && !supported.shaderInputAttachmentArrayDynamicIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderInputAttachmentArrayDynamicIndexing is not "
"supported\n";
}
if (enabling->shaderUniformTexelBufferArrayDynamicIndexing &&
!supported.shaderUniformTexelBufferArrayDynamicIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderUniformTexelBufferArrayDynamicIndexing is not "
"supported\n";
}
if (enabling->shaderStorageTexelBufferArrayDynamicIndexing &&
!supported.shaderStorageTexelBufferArrayDynamicIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderStorageTexelBufferArrayDynamicIndexing is not "
"supported\n";
}
if (enabling->shaderUniformBufferArrayNonUniformIndexing && !supported.shaderUniformBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderUniformBufferArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->shaderSampledImageArrayNonUniformIndexing && !supported.shaderSampledImageArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderSampledImageArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->shaderStorageBufferArrayNonUniformIndexing && !supported.shaderStorageBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderStorageBufferArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->shaderStorageImageArrayNonUniformIndexing && !supported.shaderStorageImageArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderStorageImageArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->shaderInputAttachmentArrayNonUniformIndexing &&
!supported.shaderInputAttachmentArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderInputAttachmentArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->shaderUniformTexelBufferArrayNonUniformIndexing &&
!supported.shaderUniformTexelBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderUniformTexelBufferArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->shaderStorageTexelBufferArrayNonUniformIndexing &&
!supported.shaderStorageTexelBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::shaderStorageTexelBufferArrayNonUniformIndexing is not "
"supported\n";
}
if (enabling->descriptorBindingUniformBufferUpdateAfterBind &&
!supported.descriptorBindingUniformBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingUniformBufferUpdateAfterBind is not "
"supported\n";
}
if (enabling->descriptorBindingSampledImageUpdateAfterBind &&
!supported.descriptorBindingSampledImageUpdateAfterBind) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingSampledImageUpdateAfterBind is not "
"supported\n";
}
if (enabling->descriptorBindingStorageImageUpdateAfterBind &&
!supported.descriptorBindingStorageImageUpdateAfterBind) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingStorageImageUpdateAfterBind is not "
"supported\n";
}
if (enabling->descriptorBindingStorageBufferUpdateAfterBind &&
!supported.descriptorBindingStorageBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingStorageBufferUpdateAfterBind is not "
"supported\n";
}
if (enabling->descriptorBindingUniformTexelBufferUpdateAfterBind &&
!supported.descriptorBindingUniformTexelBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingUniformTexelBufferUpdateAfterBind is not "
"supported\n";
}
if (enabling->descriptorBindingStorageTexelBufferUpdateAfterBind &&
!supported.descriptorBindingStorageTexelBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingStorageTexelBufferUpdateAfterBind is not "
"supported\n";
}
if (enabling->descriptorBindingUpdateUnusedWhilePending && !supported.descriptorBindingUpdateUnusedWhilePending) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingUpdateUnusedWhilePending is not "
"supported\n";
}
if (enabling->descriptorBindingPartiallyBound && !supported.descriptorBindingPartiallyBound) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingPartiallyBound is not supported\n";
}
if (enabling->descriptorBindingVariableDescriptorCount && !supported.descriptorBindingVariableDescriptorCount) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingVariableDescriptorCount is not supported\n";
}
if (enabling->runtimeDescriptorArray && !supported.runtimeDescriptorArray) {
ss << "VkPhysicalDeviceDescriptorIndexingFeatures::runtimeDescriptorArray is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV: {
VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV *>(current);
if (enabling->descriptorPoolOverallocation && !supported.descriptorPoolOverallocation) {
ss << "VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV::descriptorPoolOverallocation is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE: {
VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE *enabling =
reinterpret_cast<const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE *>(current);
if (enabling->descriptorSetHostMapping && !supported.descriptorSetHostMapping) {
ss << "VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE::descriptorSetHostMapping is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: {
VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *>(current);
if (enabling->deviceGeneratedCompute && !supported.deviceGeneratedCompute) {
ss << "VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedCompute is not supported\n";
}
if (enabling->deviceGeneratedComputePipelines && !supported.deviceGeneratedComputePipelines) {
ss << "VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines is not "
"supported\n";
}
if (enabling->deviceGeneratedComputeCaptureReplay && !supported.deviceGeneratedComputeCaptureReplay) {
ss << "VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputeCaptureReplay is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT: {
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT *>(current);
if (enabling->deviceGeneratedCommands && !supported.deviceGeneratedCommands) {
ss << "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands is not supported\n";
}
if (enabling->dynamicGeneratedPipelineLayout && !supported.dynamicGeneratedPipelineLayout) {
ss << "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::dynamicGeneratedPipelineLayout is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV: {
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *>(current);
if (enabling->deviceGeneratedCommands && !supported.deviceGeneratedCommands) {
ss << "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: {
VkPhysicalDeviceDeviceMemoryReportFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *>(current);
if (enabling->deviceMemoryReport && !supported.deviceMemoryReport) {
ss << "VkPhysicalDeviceDeviceMemoryReportFeaturesEXT::deviceMemoryReport is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV: {
VkPhysicalDeviceDiagnosticsConfigFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDiagnosticsConfigFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV *>(current);
if (enabling->diagnosticsConfig && !supported.diagnosticsConfig) {
ss << "VkPhysicalDeviceDiagnosticsConfigFeaturesNV::diagnosticsConfig is not supported\n";
}
break;
}
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV: {
VkPhysicalDeviceDisplacementMicromapFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDisplacementMicromapFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceDisplacementMicromapFeaturesNV *>(current);
if (enabling->displacementMicromap && !supported.displacementMicromap) {
ss << "VkPhysicalDeviceDisplacementMicromapFeaturesNV::displacementMicromap is not supported\n";
}
break;
}
#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: {
VkPhysicalDeviceDynamicRenderingFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDynamicRenderingFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceDynamicRenderingFeatures *>(current);
if (enabling->dynamicRendering && !supported.dynamicRendering) {
ss << "VkPhysicalDeviceDynamicRenderingFeatures::dynamicRendering is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES: {
VkPhysicalDeviceDynamicRenderingLocalReadFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceDynamicRenderingLocalReadFeatures *>(current);
if (enabling->dynamicRenderingLocalRead && !supported.dynamicRenderingLocalRead) {
ss << "VkPhysicalDeviceDynamicRenderingLocalReadFeatures::dynamicRenderingLocalRead is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT: {
VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *>(current);
if (enabling->dynamicRenderingUnusedAttachments && !supported.dynamicRenderingUnusedAttachments) {
ss << "VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT::dynamicRenderingUnusedAttachments is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: {
VkPhysicalDeviceExclusiveScissorFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExclusiveScissorFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV *>(current);
if (enabling->exclusiveScissor && !supported.exclusiveScissor) {
ss << "VkPhysicalDeviceExclusiveScissorFeaturesNV::exclusiveScissor is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: {
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *>(current);
if (enabling->extendedDynamicState2 && !supported.extendedDynamicState2) {
ss << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT::extendedDynamicState2 is not supported\n";
}
if (enabling->extendedDynamicState2LogicOp && !supported.extendedDynamicState2LogicOp) {
ss << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT::extendedDynamicState2LogicOp is not supported\n";
}
if (enabling->extendedDynamicState2PatchControlPoints && !supported.extendedDynamicState2PatchControlPoints) {
ss << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT::extendedDynamicState2PatchControlPoints is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: {
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *>(current);
if (enabling->extendedDynamicState3TessellationDomainOrigin &&
!supported.extendedDynamicState3TessellationDomainOrigin) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3TessellationDomainOrigin is not "
"supported\n";
}
if (enabling->extendedDynamicState3DepthClampEnable && !supported.extendedDynamicState3DepthClampEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3DepthClampEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3PolygonMode && !supported.extendedDynamicState3PolygonMode) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3PolygonMode is not supported\n";
}
if (enabling->extendedDynamicState3RasterizationSamples && !supported.extendedDynamicState3RasterizationSamples) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3RasterizationSamples is not "
"supported\n";
}
if (enabling->extendedDynamicState3SampleMask && !supported.extendedDynamicState3SampleMask) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3SampleMask is not supported\n";
}
if (enabling->extendedDynamicState3AlphaToCoverageEnable && !supported.extendedDynamicState3AlphaToCoverageEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3AlphaToCoverageEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3AlphaToOneEnable && !supported.extendedDynamicState3AlphaToOneEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3AlphaToOneEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3LogicOpEnable && !supported.extendedDynamicState3LogicOpEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3LogicOpEnable is not supported\n";
}
if (enabling->extendedDynamicState3ColorBlendEnable && !supported.extendedDynamicState3ColorBlendEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ColorBlendEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3ColorBlendEquation && !supported.extendedDynamicState3ColorBlendEquation) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ColorBlendEquation is not "
"supported\n";
}
if (enabling->extendedDynamicState3ColorWriteMask && !supported.extendedDynamicState3ColorWriteMask) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ColorWriteMask is not "
"supported\n";
}
if (enabling->extendedDynamicState3RasterizationStream && !supported.extendedDynamicState3RasterizationStream) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3RasterizationStream is not "
"supported\n";
}
if (enabling->extendedDynamicState3ConservativeRasterizationMode &&
!supported.extendedDynamicState3ConservativeRasterizationMode) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ConservativeRasterizationMode is "
"not supported\n";
}
if (enabling->extendedDynamicState3ExtraPrimitiveOverestimationSize &&
!supported.extendedDynamicState3ExtraPrimitiveOverestimationSize) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ExtraPrimitiveOverestimationSize "
"is not supported\n";
}
if (enabling->extendedDynamicState3DepthClipEnable && !supported.extendedDynamicState3DepthClipEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3DepthClipEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3SampleLocationsEnable && !supported.extendedDynamicState3SampleLocationsEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3SampleLocationsEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3ColorBlendAdvanced && !supported.extendedDynamicState3ColorBlendAdvanced) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ColorBlendAdvanced is not "
"supported\n";
}
if (enabling->extendedDynamicState3ProvokingVertexMode && !supported.extendedDynamicState3ProvokingVertexMode) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ProvokingVertexMode is not "
"supported\n";
}
if (enabling->extendedDynamicState3LineRasterizationMode && !supported.extendedDynamicState3LineRasterizationMode) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3LineRasterizationMode is not "
"supported\n";
}
if (enabling->extendedDynamicState3LineStippleEnable && !supported.extendedDynamicState3LineStippleEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3LineStippleEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3DepthClipNegativeOneToOne &&
!supported.extendedDynamicState3DepthClipNegativeOneToOne) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3DepthClipNegativeOneToOne is not "
"supported\n";
}
if (enabling->extendedDynamicState3ViewportWScalingEnable &&
!supported.extendedDynamicState3ViewportWScalingEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ViewportWScalingEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3ViewportSwizzle && !supported.extendedDynamicState3ViewportSwizzle) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ViewportSwizzle is not "
"supported\n";
}
if (enabling->extendedDynamicState3CoverageToColorEnable && !supported.extendedDynamicState3CoverageToColorEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3CoverageToColorEnable is not "
"supported\n";
}
if (enabling->extendedDynamicState3CoverageToColorLocation &&
!supported.extendedDynamicState3CoverageToColorLocation) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3CoverageToColorLocation is not "
"supported\n";
}
if (enabling->extendedDynamicState3CoverageModulationMode &&
!supported.extendedDynamicState3CoverageModulationMode) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3CoverageModulationMode is not "
"supported\n";
}
if (enabling->extendedDynamicState3CoverageModulationTableEnable &&
!supported.extendedDynamicState3CoverageModulationTableEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3CoverageModulationTableEnable is "
"not supported\n";
}
if (enabling->extendedDynamicState3CoverageModulationTable &&
!supported.extendedDynamicState3CoverageModulationTable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3CoverageModulationTable is not "
"supported\n";
}
if (enabling->extendedDynamicState3CoverageReductionMode && !supported.extendedDynamicState3CoverageReductionMode) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3CoverageReductionMode is not "
"supported\n";
}
if (enabling->extendedDynamicState3RepresentativeFragmentTestEnable &&
!supported.extendedDynamicState3RepresentativeFragmentTestEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3RepresentativeFragmentTestEnable "
"is not supported\n";
}
if (enabling->extendedDynamicState3ShadingRateImageEnable &&
!supported.extendedDynamicState3ShadingRateImageEnable) {
ss << "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT::extendedDynamicState3ShadingRateImageEnable is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: {
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *>(current);
if (enabling->extendedDynamicState && !supported.extendedDynamicState) {
ss << "VkPhysicalDeviceExtendedDynamicStateFeaturesEXT::extendedDynamicState is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV: {
VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV *>(current);
if (enabling->extendedSparseAddressSpace && !supported.extendedSparseAddressSpace) {
ss << "VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV::extendedSparseAddressSpace is not supported\n";
}
break;
}
#ifdef VK_USE_PLATFORM_ANDROID_KHR
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID: {
VkPhysicalDeviceExternalFormatResolveFeaturesANDROID supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID *enabling =
reinterpret_cast<const VkPhysicalDeviceExternalFormatResolveFeaturesANDROID *>(current);
if (enabling->externalFormatResolve && !supported.externalFormatResolve) {
ss << "VkPhysicalDeviceExternalFormatResolveFeaturesANDROID::externalFormatResolve is not supported\n";
}
break;
}
#endif // VK_USE_PLATFORM_ANDROID_KHR
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV: {
VkPhysicalDeviceExternalMemoryRDMAFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *>(current);
if (enabling->externalMemoryRDMA && !supported.externalMemoryRDMA) {
ss << "VkPhysicalDeviceExternalMemoryRDMAFeaturesNV::externalMemoryRDMA is not supported\n";
}
break;
}
#ifdef VK_USE_PLATFORM_SCREEN_QNX
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX: {
VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX *enabling =
reinterpret_cast<const VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX *>(current);
if (enabling->screenBufferImport && !supported.screenBufferImport) {
ss << "VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX::screenBufferImport is not supported\n";
}
break;
}
#endif // VK_USE_PLATFORM_SCREEN_QNX
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT: {
VkPhysicalDeviceFaultFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFaultFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceFaultFeaturesEXT *>(current);
if (enabling->deviceFault && !supported.deviceFault) {
ss << "VkPhysicalDeviceFaultFeaturesEXT::deviceFault is not supported\n";
}
if (enabling->deviceFaultVendorBinary && !supported.deviceFaultVendorBinary) {
ss << "VkPhysicalDeviceFaultFeaturesEXT::deviceFaultVendorBinary is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM: {
VkPhysicalDeviceFormatPackFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFormatPackFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceFormatPackFeaturesARM *>(current);
if (enabling->formatPack && !supported.formatPack) {
ss << "VkPhysicalDeviceFormatPackFeaturesARM::formatPack is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: {
VkPhysicalDeviceFragmentDensityMap2FeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *>(current);
if (enabling->fragmentDensityMapDeferred && !supported.fragmentDensityMapDeferred) {
ss << "VkPhysicalDeviceFragmentDensityMap2FeaturesEXT::fragmentDensityMapDeferred is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: {
VkPhysicalDeviceFragmentDensityMapFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *>(current);
if (enabling->fragmentDensityMap && !supported.fragmentDensityMap) {
ss << "VkPhysicalDeviceFragmentDensityMapFeaturesEXT::fragmentDensityMap is not supported\n";
}
if (enabling->fragmentDensityMapDynamic && !supported.fragmentDensityMapDynamic) {
ss << "VkPhysicalDeviceFragmentDensityMapFeaturesEXT::fragmentDensityMapDynamic is not supported\n";
}
if (enabling->fragmentDensityMapNonSubsampledImages && !supported.fragmentDensityMapNonSubsampledImages) {
ss << "VkPhysicalDeviceFragmentDensityMapFeaturesEXT::fragmentDensityMapNonSubsampledImages is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE: {
VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *>(current);
if (enabling->fragmentDensityMapLayered && !supported.fragmentDensityMapLayered) {
ss << "VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE::fragmentDensityMapLayered is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT: {
VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT *>(current);
if (enabling->fragmentDensityMapOffset && !supported.fragmentDensityMapOffset) {
ss << "VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT::fragmentDensityMapOffset is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR: {
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *>(current);
if (enabling->fragmentShaderBarycentric && !supported.fragmentShaderBarycentric) {
ss << "VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR::fragmentShaderBarycentric is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: {
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *>(current);
if (enabling->fragmentShaderSampleInterlock && !supported.fragmentShaderSampleInterlock) {
ss << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT::fragmentShaderSampleInterlock is not supported\n";
}
if (enabling->fragmentShaderPixelInterlock && !supported.fragmentShaderPixelInterlock) {
ss << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT::fragmentShaderPixelInterlock is not supported\n";
}
if (enabling->fragmentShaderShadingRateInterlock && !supported.fragmentShaderShadingRateInterlock) {
ss << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT::fragmentShaderShadingRateInterlock is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV: {
VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *>(current);
if (enabling->fragmentShadingRateEnums && !supported.fragmentShadingRateEnums) {
ss << "VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV::fragmentShadingRateEnums is not supported\n";
}
if (enabling->supersampleFragmentShadingRates && !supported.supersampleFragmentShadingRates) {
ss << "VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV::supersampleFragmentShadingRates is not supported\n";
}
if (enabling->noInvocationFragmentShadingRates && !supported.noInvocationFragmentShadingRates) {
ss << "VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV::noInvocationFragmentShadingRates is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: {
VkPhysicalDeviceFragmentShadingRateFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *>(current);
if (enabling->pipelineFragmentShadingRate && !supported.pipelineFragmentShadingRate) {
ss << "VkPhysicalDeviceFragmentShadingRateFeaturesKHR::pipelineFragmentShadingRate is not supported\n";
}
if (enabling->primitiveFragmentShadingRate && !supported.primitiveFragmentShadingRate) {
ss << "VkPhysicalDeviceFragmentShadingRateFeaturesKHR::primitiveFragmentShadingRate is not supported\n";
}
if (enabling->attachmentFragmentShadingRate && !supported.attachmentFragmentShadingRate) {
ss << "VkPhysicalDeviceFragmentShadingRateFeaturesKHR::attachmentFragmentShadingRate is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT: {
VkPhysicalDeviceFrameBoundaryFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceFrameBoundaryFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceFrameBoundaryFeaturesEXT *>(current);
if (enabling->frameBoundary && !supported.frameBoundary) {
ss << "VkPhysicalDeviceFrameBoundaryFeaturesEXT::frameBoundary is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES: {
VkPhysicalDeviceGlobalPriorityQueryFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceGlobalPriorityQueryFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceGlobalPriorityQueryFeatures *>(current);
if (enabling->globalPriorityQuery && !supported.globalPriorityQuery) {
ss << "VkPhysicalDeviceGlobalPriorityQueryFeatures::globalPriorityQuery is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: {
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *>(current);
if (enabling->graphicsPipelineLibrary && !supported.graphicsPipelineLibrary) {
ss << "VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT::graphicsPipelineLibrary is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI: {
VkPhysicalDeviceHdrVividFeaturesHUAWEI supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceHdrVividFeaturesHUAWEI *enabling =
reinterpret_cast<const VkPhysicalDeviceHdrVividFeaturesHUAWEI *>(current);
if (enabling->hdrVivid && !supported.hdrVivid) {
ss << "VkPhysicalDeviceHdrVividFeaturesHUAWEI::hdrVivid is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES: {
VkPhysicalDeviceHostImageCopyFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceHostImageCopyFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceHostImageCopyFeatures *>(current);
if (enabling->hostImageCopy && !supported.hostImageCopy) {
ss << "VkPhysicalDeviceHostImageCopyFeatures::hostImageCopy is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: {
VkPhysicalDeviceHostQueryResetFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceHostQueryResetFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures *>(current);
if (enabling->hostQueryReset && !supported.hostQueryReset) {
ss << "VkPhysicalDeviceHostQueryResetFeatures::hostQueryReset is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: {
VkPhysicalDeviceImage2DViewOf3DFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *>(current);
if (enabling->image2DViewOf3D && !supported.image2DViewOf3D) {
ss << "VkPhysicalDeviceImage2DViewOf3DFeaturesEXT::image2DViewOf3D is not supported\n";
}
if (enabling->sampler2DViewOf3D && !supported.sampler2DViewOf3D) {
ss << "VkPhysicalDeviceImage2DViewOf3DFeaturesEXT::sampler2DViewOf3D is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: {
VkPhysicalDeviceImageAlignmentControlFeaturesMESA supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *enabling =
reinterpret_cast<const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *>(current);
if (enabling->imageAlignmentControl && !supported.imageAlignmentControl) {
ss << "VkPhysicalDeviceImageAlignmentControlFeaturesMESA::imageAlignmentControl is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT: {
VkPhysicalDeviceImageCompressionControlFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageCompressionControlFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceImageCompressionControlFeaturesEXT *>(current);
if (enabling->imageCompressionControl && !supported.imageCompressionControl) {
ss << "VkPhysicalDeviceImageCompressionControlFeaturesEXT::imageCompressionControl is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT: {
VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT *>(current);
if (enabling->imageCompressionControlSwapchain && !supported.imageCompressionControlSwapchain) {
ss << "VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT::imageCompressionControlSwapchain is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM: {
VkPhysicalDeviceImageProcessing2FeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageProcessing2FeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceImageProcessing2FeaturesQCOM *>(current);
if (enabling->textureBlockMatch2 && !supported.textureBlockMatch2) {
ss << "VkPhysicalDeviceImageProcessing2FeaturesQCOM::textureBlockMatch2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM: {
VkPhysicalDeviceImageProcessingFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageProcessingFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceImageProcessingFeaturesQCOM *>(current);
if (enabling->textureSampleWeighted && !supported.textureSampleWeighted) {
ss << "VkPhysicalDeviceImageProcessingFeaturesQCOM::textureSampleWeighted is not supported\n";
}
if (enabling->textureBoxFilter && !supported.textureBoxFilter) {
ss << "VkPhysicalDeviceImageProcessingFeaturesQCOM::textureBoxFilter is not supported\n";
}
if (enabling->textureBlockMatch && !supported.textureBlockMatch) {
ss << "VkPhysicalDeviceImageProcessingFeaturesQCOM::textureBlockMatch is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: {
VkPhysicalDeviceImageRobustnessFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageRobustnessFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeatures *>(current);
if (enabling->robustImageAccess && !supported.robustImageAccess) {
ss << "VkPhysicalDeviceImageRobustnessFeatures::robustImageAccess is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT: {
VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *>(current);
if (enabling->imageSlicedViewOf3D && !supported.imageSlicedViewOf3D) {
ss << "VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT::imageSlicedViewOf3D is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: {
VkPhysicalDeviceImageViewMinLodFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImageViewMinLodFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceImageViewMinLodFeaturesEXT *>(current);
if (enabling->minLod && !supported.minLod) {
ss << "VkPhysicalDeviceImageViewMinLodFeaturesEXT::minLod is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: {
VkPhysicalDeviceImagelessFramebufferFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceImagelessFramebufferFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures *>(current);
if (enabling->imagelessFramebuffer && !supported.imagelessFramebuffer) {
ss << "VkPhysicalDeviceImagelessFramebufferFeatures::imagelessFramebuffer is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES: {
VkPhysicalDeviceIndexTypeUint8Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceIndexTypeUint8Features *enabling =
reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8Features *>(current);
if (enabling->indexTypeUint8 && !supported.indexTypeUint8) {
ss << "VkPhysicalDeviceIndexTypeUint8Features::indexTypeUint8 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV: {
VkPhysicalDeviceInheritedViewportScissorFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceInheritedViewportScissorFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceInheritedViewportScissorFeaturesNV *>(current);
if (enabling->inheritedViewportScissor2D && !supported.inheritedViewportScissor2D) {
ss << "VkPhysicalDeviceInheritedViewportScissorFeaturesNV::inheritedViewportScissor2D is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: {
VkPhysicalDeviceInlineUniformBlockFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceInlineUniformBlockFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeatures *>(current);
if (enabling->inlineUniformBlock && !supported.inlineUniformBlock) {
ss << "VkPhysicalDeviceInlineUniformBlockFeatures::inlineUniformBlock is not supported\n";
}
if (enabling->descriptorBindingInlineUniformBlockUpdateAfterBind &&
!supported.descriptorBindingInlineUniformBlockUpdateAfterBind) {
ss << "VkPhysicalDeviceInlineUniformBlockFeatures::descriptorBindingInlineUniformBlockUpdateAfterBind is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR: {
VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR *>(current);
if (enabling->internallySynchronizedQueues && !supported.internallySynchronizedQueues) {
ss << "VkPhysicalDeviceInternallySynchronizedQueuesFeaturesKHR::internallySynchronizedQueues is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI: {
VkPhysicalDeviceInvocationMaskFeaturesHUAWEI supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *enabling =
reinterpret_cast<const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *>(current);
if (enabling->invocationMask && !supported.invocationMask) {
ss << "VkPhysicalDeviceInvocationMaskFeaturesHUAWEI::invocationMask is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT: {
VkPhysicalDeviceLegacyDitheringFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceLegacyDitheringFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceLegacyDitheringFeaturesEXT *>(current);
if (enabling->legacyDithering && !supported.legacyDithering) {
ss << "VkPhysicalDeviceLegacyDitheringFeaturesEXT::legacyDithering is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT: {
VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *>(current);
if (enabling->legacyVertexAttributes && !supported.legacyVertexAttributes) {
ss << "VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT::legacyVertexAttributes is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES: {
VkPhysicalDeviceLineRasterizationFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceLineRasterizationFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeatures *>(current);
if (enabling->rectangularLines && !supported.rectangularLines) {
ss << "VkPhysicalDeviceLineRasterizationFeatures::rectangularLines is not supported\n";
}
if (enabling->bresenhamLines && !supported.bresenhamLines) {
ss << "VkPhysicalDeviceLineRasterizationFeatures::bresenhamLines is not supported\n";
}
if (enabling->smoothLines && !supported.smoothLines) {
ss << "VkPhysicalDeviceLineRasterizationFeatures::smoothLines is not supported\n";
}
if (enabling->stippledRectangularLines && !supported.stippledRectangularLines) {
ss << "VkPhysicalDeviceLineRasterizationFeatures::stippledRectangularLines is not supported\n";
}
if (enabling->stippledBresenhamLines && !supported.stippledBresenhamLines) {
ss << "VkPhysicalDeviceLineRasterizationFeatures::stippledBresenhamLines is not supported\n";
}
if (enabling->stippledSmoothLines && !supported.stippledSmoothLines) {
ss << "VkPhysicalDeviceLineRasterizationFeatures::stippledSmoothLines is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV: {
VkPhysicalDeviceLinearColorAttachmentFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceLinearColorAttachmentFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceLinearColorAttachmentFeaturesNV *>(current);
if (enabling->linearColorAttachment && !supported.linearColorAttachment) {
ss << "VkPhysicalDeviceLinearColorAttachmentFeaturesNV::linearColorAttachment is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR: {
VkPhysicalDeviceMaintenance10FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance10FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance10FeaturesKHR *>(current);
if (enabling->maintenance10 && !supported.maintenance10) {
ss << "VkPhysicalDeviceMaintenance10FeaturesKHR::maintenance10 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: {
VkPhysicalDeviceMaintenance4Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance4Features *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance4Features *>(current);
if (enabling->maintenance4 && !supported.maintenance4) {
ss << "VkPhysicalDeviceMaintenance4Features::maintenance4 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES: {
VkPhysicalDeviceMaintenance5Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance5Features *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance5Features *>(current);
if (enabling->maintenance5 && !supported.maintenance5) {
ss << "VkPhysicalDeviceMaintenance5Features::maintenance5 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES: {
VkPhysicalDeviceMaintenance6Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance6Features *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance6Features *>(current);
if (enabling->maintenance6 && !supported.maintenance6) {
ss << "VkPhysicalDeviceMaintenance6Features::maintenance6 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR: {
VkPhysicalDeviceMaintenance7FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance7FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance7FeaturesKHR *>(current);
if (enabling->maintenance7 && !supported.maintenance7) {
ss << "VkPhysicalDeviceMaintenance7FeaturesKHR::maintenance7 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR: {
VkPhysicalDeviceMaintenance8FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance8FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance8FeaturesKHR *>(current);
if (enabling->maintenance8 && !supported.maintenance8) {
ss << "VkPhysicalDeviceMaintenance8FeaturesKHR::maintenance8 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: {
VkPhysicalDeviceMaintenance9FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMaintenance9FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceMaintenance9FeaturesKHR *>(current);
if (enabling->maintenance9 && !supported.maintenance9) {
ss << "VkPhysicalDeviceMaintenance9FeaturesKHR::maintenance9 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT: {
VkPhysicalDeviceMapMemoryPlacedFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *>(current);
if (enabling->memoryMapPlaced && !supported.memoryMapPlaced) {
ss << "VkPhysicalDeviceMapMemoryPlacedFeaturesEXT::memoryMapPlaced is not supported\n";
}
if (enabling->memoryMapRangePlaced && !supported.memoryMapRangePlaced) {
ss << "VkPhysicalDeviceMapMemoryPlacedFeaturesEXT::memoryMapRangePlaced is not supported\n";
}
if (enabling->memoryUnmapReserve && !supported.memoryUnmapReserve) {
ss << "VkPhysicalDeviceMapMemoryPlacedFeaturesEXT::memoryUnmapReserve is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT: {
VkPhysicalDeviceMemoryDecompressionFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMemoryDecompressionFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMemoryDecompressionFeaturesEXT *>(current);
if (enabling->memoryDecompression && !supported.memoryDecompression) {
ss << "VkPhysicalDeviceMemoryDecompressionFeaturesEXT::memoryDecompression is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: {
VkPhysicalDeviceMemoryPriorityFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMemoryPriorityFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT *>(current);
if (enabling->memoryPriority && !supported.memoryPriority) {
ss << "VkPhysicalDeviceMemoryPriorityFeaturesEXT::memoryPriority is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT: {
VkPhysicalDeviceMeshShaderFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMeshShaderFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesEXT *>(current);
if (enabling->taskShader && !supported.taskShader) {
ss << "VkPhysicalDeviceMeshShaderFeaturesEXT::taskShader is not supported\n";
}
if (enabling->meshShader && !supported.meshShader) {
ss << "VkPhysicalDeviceMeshShaderFeaturesEXT::meshShader is not supported\n";
}
if (enabling->multiviewMeshShader && !supported.multiviewMeshShader) {
ss << "VkPhysicalDeviceMeshShaderFeaturesEXT::multiviewMeshShader is not supported\n";
}
if (enabling->primitiveFragmentShadingRateMeshShader && !supported.primitiveFragmentShadingRateMeshShader) {
ss << "VkPhysicalDeviceMeshShaderFeaturesEXT::primitiveFragmentShadingRateMeshShader is not supported\n";
}
if (enabling->meshShaderQueries && !supported.meshShaderQueries) {
ss << "VkPhysicalDeviceMeshShaderFeaturesEXT::meshShaderQueries is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV: {
VkPhysicalDeviceMeshShaderFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMeshShaderFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV *>(current);
if (enabling->taskShader && !supported.taskShader) {
ss << "VkPhysicalDeviceMeshShaderFeaturesNV::taskShader is not supported\n";
}
if (enabling->meshShader && !supported.meshShader) {
ss << "VkPhysicalDeviceMeshShaderFeaturesNV::meshShader is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: {
VkPhysicalDeviceMultiDrawFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMultiDrawFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMultiDrawFeaturesEXT *>(current);
if (enabling->multiDraw && !supported.multiDraw) {
ss << "VkPhysicalDeviceMultiDrawFeaturesEXT::multiDraw is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: {
VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *>(current);
if (enabling->multisampledRenderToSingleSampled && !supported.multisampledRenderToSingleSampled) {
ss << "VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT::multisampledRenderToSingleSampled is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
VkPhysicalDeviceMultiviewFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMultiviewFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures *>(current);
if (enabling->multiview && !supported.multiview) {
ss << "VkPhysicalDeviceMultiviewFeatures::multiview is not supported\n";
}
if (enabling->multiviewGeometryShader && !supported.multiviewGeometryShader) {
ss << "VkPhysicalDeviceMultiviewFeatures::multiviewGeometryShader is not supported\n";
}
if (enabling->multiviewTessellationShader && !supported.multiviewTessellationShader) {
ss << "VkPhysicalDeviceMultiviewFeatures::multiviewTessellationShader is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM: {
VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM *>(current);
if (enabling->multiviewPerViewRenderAreas && !supported.multiviewPerViewRenderAreas) {
ss << "VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM::multiviewPerViewRenderAreas is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM: {
VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM *>(current);
if (enabling->multiviewPerViewViewports && !supported.multiviewPerViewViewports) {
ss << "VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM::multiviewPerViewViewports is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: {
VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *>(current);
if (enabling->mutableDescriptorType && !supported.mutableDescriptorType) {
ss << "VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT: {
VkPhysicalDeviceNestedCommandBufferFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *>(current);
if (enabling->nestedCommandBuffer && !supported.nestedCommandBuffer) {
ss << "VkPhysicalDeviceNestedCommandBufferFeaturesEXT::nestedCommandBuffer is not supported\n";
}
if (enabling->nestedCommandBufferRendering && !supported.nestedCommandBufferRendering) {
ss << "VkPhysicalDeviceNestedCommandBufferFeaturesEXT::nestedCommandBufferRendering is not supported\n";
}
if (enabling->nestedCommandBufferSimultaneousUse && !supported.nestedCommandBufferSimultaneousUse) {
ss << "VkPhysicalDeviceNestedCommandBufferFeaturesEXT::nestedCommandBufferSimultaneousUse is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: {
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *>(current);
if (enabling->nonSeamlessCubeMap && !supported.nonSeamlessCubeMap) {
ss << "VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT::nonSeamlessCubeMap is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT: {
VkPhysicalDeviceOpacityMicromapFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceOpacityMicromapFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceOpacityMicromapFeaturesEXT *>(current);
if (enabling->micromap && !supported.micromap) {
ss << "VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromap is not supported\n";
}
if (enabling->micromapCaptureReplay && !supported.micromapCaptureReplay) {
ss << "VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapCaptureReplay is not supported\n";
}
if (enabling->micromapHostCommands && !supported.micromapHostCommands) {
ss << "VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapHostCommands is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV: {
VkPhysicalDeviceOpticalFlowFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceOpticalFlowFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceOpticalFlowFeaturesNV *>(current);
if (enabling->opticalFlow && !supported.opticalFlow) {
ss << "VkPhysicalDeviceOpticalFlowFeaturesNV::opticalFlow is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: {
VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *>(current);
if (enabling->pageableDeviceLocalMemory && !supported.pageableDeviceLocalMemory) {
ss << "VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT::pageableDeviceLocalMemory is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV: {
VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV *>(current);
if (enabling->partitionedAccelerationStructure && !supported.partitionedAccelerationStructure) {
ss << "VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV::partitionedAccelerationStructure is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV: {
VkPhysicalDevicePerStageDescriptorSetFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePerStageDescriptorSetFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDevicePerStageDescriptorSetFeaturesNV *>(current);
if (enabling->perStageDescriptorSet && !supported.perStageDescriptorSet) {
ss << "VkPhysicalDevicePerStageDescriptorSetFeaturesNV::perStageDescriptorSet is not supported\n";
}
if (enabling->dynamicPipelineLayout && !supported.dynamicPipelineLayout) {
ss << "VkPhysicalDevicePerStageDescriptorSetFeaturesNV::dynamicPipelineLayout is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM: {
VkPhysicalDevicePerformanceCountersByRegionFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDevicePerformanceCountersByRegionFeaturesARM *>(current);
if (enabling->performanceCountersByRegion && !supported.performanceCountersByRegion) {
ss << "VkPhysicalDevicePerformanceCountersByRegionFeaturesARM::performanceCountersByRegion is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: {
VkPhysicalDevicePerformanceQueryFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePerformanceQueryFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR *>(current);
if (enabling->performanceCounterQueryPools && !supported.performanceCounterQueryPools) {
ss << "VkPhysicalDevicePerformanceQueryFeaturesKHR::performanceCounterQueryPools is not supported\n";
}
if (enabling->performanceCounterMultipleQueryPools && !supported.performanceCounterMultipleQueryPools) {
ss << "VkPhysicalDevicePerformanceQueryFeaturesKHR::performanceCounterMultipleQueryPools is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR: {
VkPhysicalDevicePipelineBinaryFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineBinaryFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineBinaryFeaturesKHR *>(current);
if (enabling->pipelineBinaries && !supported.pipelineBinaries) {
ss << "VkPhysicalDevicePipelineBinaryFeaturesKHR::pipelineBinaries is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC: {
VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC *>(current);
if (enabling->pipelineCacheIncrementalMode && !supported.pipelineCacheIncrementalMode) {
ss << "VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC::pipelineCacheIncrementalMode is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: {
VkPhysicalDevicePipelineCreationCacheControlFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineCreationCacheControlFeatures *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeatures *>(current);
if (enabling->pipelineCreationCacheControl && !supported.pipelineCreationCacheControl) {
ss << "VkPhysicalDevicePipelineCreationCacheControlFeatures::pipelineCreationCacheControl is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR: {
VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *>(current);
if (enabling->pipelineExecutableInfo && !supported.pipelineExecutableInfo) {
ss << "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR::pipelineExecutableInfo is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT: {
VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT *>(current);
if (enabling->pipelineLibraryGroupHandles && !supported.pipelineLibraryGroupHandles) {
ss << "VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT::pipelineLibraryGroupHandles is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM: {
VkPhysicalDevicePipelineOpacityMicromapFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineOpacityMicromapFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineOpacityMicromapFeaturesARM *>(current);
if (enabling->pipelineOpacityMicromap && !supported.pipelineOpacityMicromap) {
ss << "VkPhysicalDevicePipelineOpacityMicromapFeaturesARM::pipelineOpacityMicromap is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT: {
VkPhysicalDevicePipelinePropertiesFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelinePropertiesFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevicePipelinePropertiesFeaturesEXT *>(current);
if (enabling->pipelinePropertiesIdentifier && !supported.pipelinePropertiesIdentifier) {
ss << "VkPhysicalDevicePipelinePropertiesFeaturesEXT::pipelinePropertiesIdentifier is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: {
VkPhysicalDevicePipelineProtectedAccessFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineProtectedAccessFeatures *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineProtectedAccessFeatures *>(current);
if (enabling->pipelineProtectedAccess && !supported.pipelineProtectedAccess) {
ss << "VkPhysicalDevicePipelineProtectedAccessFeatures::pipelineProtectedAccess is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: {
VkPhysicalDevicePipelineRobustnessFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePipelineRobustnessFeatures *enabling =
reinterpret_cast<const VkPhysicalDevicePipelineRobustnessFeatures *>(current);
if (enabling->pipelineRobustness && !supported.pipelineRobustness) {
ss << "VkPhysicalDevicePipelineRobustnessFeatures::pipelineRobustness is not supported\n";
}
break;
}
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: {
VkPhysicalDevicePortabilitySubsetFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePortabilitySubsetFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR *>(current);
if (enabling->constantAlphaColorBlendFactors && !supported.constantAlphaColorBlendFactors) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::constantAlphaColorBlendFactors is not supported\n";
}
if (enabling->events && !supported.events) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::events is not supported\n";
}
if (enabling->imageViewFormatReinterpretation && !supported.imageViewFormatReinterpretation) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::imageViewFormatReinterpretation is not supported\n";
}
if (enabling->imageViewFormatSwizzle && !supported.imageViewFormatSwizzle) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::imageViewFormatSwizzle is not supported\n";
}
if (enabling->imageView2DOn3DImage && !supported.imageView2DOn3DImage) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::imageView2DOn3DImage is not supported\n";
}
if (enabling->multisampleArrayImage && !supported.multisampleArrayImage) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::multisampleArrayImage is not supported\n";
}
if (enabling->mutableComparisonSamplers && !supported.mutableComparisonSamplers) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::mutableComparisonSamplers is not supported\n";
}
if (enabling->pointPolygons && !supported.pointPolygons) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::pointPolygons is not supported\n";
}
if (enabling->samplerMipLodBias && !supported.samplerMipLodBias) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::samplerMipLodBias is not supported\n";
}
if (enabling->separateStencilMaskRef && !supported.separateStencilMaskRef) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::separateStencilMaskRef is not supported\n";
}
if (enabling->shaderSampleRateInterpolationFunctions && !supported.shaderSampleRateInterpolationFunctions) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::shaderSampleRateInterpolationFunctions is not supported\n";
}
if (enabling->tessellationIsolines && !supported.tessellationIsolines) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationIsolines is not supported\n";
}
if (enabling->tessellationPointMode && !supported.tessellationPointMode) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationPointMode is not supported\n";
}
if (enabling->triangleFans && !supported.triangleFans) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::triangleFans is not supported\n";
}
if (enabling->vertexAttributeAccessBeyondStride && !supported.vertexAttributeAccessBeyondStride) {
ss << "VkPhysicalDevicePortabilitySubsetFeaturesKHR::vertexAttributeAccessBeyondStride is not supported\n";
}
break;
}
#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: {
VkPhysicalDevicePresentBarrierFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentBarrierFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDevicePresentBarrierFeaturesNV *>(current);
if (enabling->presentBarrier && !supported.presentBarrier) {
ss << "VkPhysicalDevicePresentBarrierFeaturesNV::presentBarrier is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR: {
VkPhysicalDevicePresentId2FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentId2FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePresentId2FeaturesKHR *>(current);
if (enabling->presentId2 && !supported.presentId2) {
ss << "VkPhysicalDevicePresentId2FeaturesKHR::presentId2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR: {
VkPhysicalDevicePresentIdFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentIdFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePresentIdFeaturesKHR *>(current);
if (enabling->presentId && !supported.presentId) {
ss << "VkPhysicalDevicePresentIdFeaturesKHR::presentId is not supported\n";
}
break;
}
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV: {
VkPhysicalDevicePresentMeteringFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentMeteringFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDevicePresentMeteringFeaturesNV *>(current);
if (enabling->presentMetering && !supported.presentMetering) {
ss << "VkPhysicalDevicePresentMeteringFeaturesNV::presentMetering is not supported\n";
}
break;
}
#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR: {
VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *>(current);
if (enabling->presentModeFifoLatestReady && !supported.presentModeFifoLatestReady) {
ss << "VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR::presentModeFifoLatestReady is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT: {
VkPhysicalDevicePresentTimingFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentTimingFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevicePresentTimingFeaturesEXT *>(current);
if (enabling->presentTiming && !supported.presentTiming) {
ss << "VkPhysicalDevicePresentTimingFeaturesEXT::presentTiming is not supported\n";
}
if (enabling->presentAtAbsoluteTime && !supported.presentAtAbsoluteTime) {
ss << "VkPhysicalDevicePresentTimingFeaturesEXT::presentAtAbsoluteTime is not supported\n";
}
if (enabling->presentAtRelativeTime && !supported.presentAtRelativeTime) {
ss << "VkPhysicalDevicePresentTimingFeaturesEXT::presentAtRelativeTime is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR: {
VkPhysicalDevicePresentWait2FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentWait2FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePresentWait2FeaturesKHR *>(current);
if (enabling->presentWait2 && !supported.presentWait2) {
ss << "VkPhysicalDevicePresentWait2FeaturesKHR::presentWait2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR: {
VkPhysicalDevicePresentWaitFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePresentWaitFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDevicePresentWaitFeaturesKHR *>(current);
if (enabling->presentWait && !supported.presentWait) {
ss << "VkPhysicalDevicePresentWaitFeaturesKHR::presentWait is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: {
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *>(current);
if (enabling->primitiveTopologyListRestart && !supported.primitiveTopologyListRestart) {
ss << "VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT::primitiveTopologyListRestart is not "
"supported\n";
}
if (enabling->primitiveTopologyPatchListRestart && !supported.primitiveTopologyPatchListRestart) {
ss << "VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT::primitiveTopologyPatchListRestart is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: {
VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *>(current);
if (enabling->primitivesGeneratedQuery && !supported.primitivesGeneratedQuery) {
ss << "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT::primitivesGeneratedQuery is not supported\n";
}
if (enabling->primitivesGeneratedQueryWithRasterizerDiscard &&
!supported.primitivesGeneratedQueryWithRasterizerDiscard) {
ss << "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT::primitivesGeneratedQueryWithRasterizerDiscard is "
"not supported\n";
}
if (enabling->primitivesGeneratedQueryWithNonZeroStreams && !supported.primitivesGeneratedQueryWithNonZeroStreams) {
ss << "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT::primitivesGeneratedQueryWithNonZeroStreams is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: {
VkPhysicalDevicePrivateDataFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePrivateDataFeatures *enabling =
reinterpret_cast<const VkPhysicalDevicePrivateDataFeatures *>(current);
if (enabling->privateData && !supported.privateData) {
ss << "VkPhysicalDevicePrivateDataFeatures::privateData is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: {
VkPhysicalDeviceProtectedMemoryFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceProtectedMemoryFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures *>(current);
if (enabling->protectedMemory && !supported.protectedMemory) {
ss << "VkPhysicalDeviceProtectedMemoryFeatures::protectedMemory is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: {
VkPhysicalDeviceProvokingVertexFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceProvokingVertexFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceProvokingVertexFeaturesEXT *>(current);
if (enabling->provokingVertexLast && !supported.provokingVertexLast) {
ss << "VkPhysicalDeviceProvokingVertexFeaturesEXT::provokingVertexLast is not supported\n";
}
if (enabling->transformFeedbackPreservesProvokingVertex && !supported.transformFeedbackPreservesProvokingVertex) {
ss << "VkPhysicalDeviceProvokingVertexFeaturesEXT::transformFeedbackPreservesProvokingVertex is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_CONSTANT_BANK_FEATURES_NV: {
VkPhysicalDevicePushConstantBankFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDevicePushConstantBankFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDevicePushConstantBankFeaturesNV *>(current);
if (enabling->pushConstantBank && !supported.pushConstantBank) {
ss << "VkPhysicalDevicePushConstantBankFeaturesNV::pushConstantBank is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: {
VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *>(current);
if (enabling->formatRgba10x6WithoutYCbCrSampler && !supported.formatRgba10x6WithoutYCbCrSampler) {
ss << "VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT::formatRgba10x6WithoutYCbCrSampler is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: {
VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *>(current);
if (enabling->rasterizationOrderColorAttachmentAccess && !supported.rasterizationOrderColorAttachmentAccess) {
ss << "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT::rasterizationOrderColorAttachmentAccess "
"is not supported\n";
}
if (enabling->rasterizationOrderDepthAttachmentAccess && !supported.rasterizationOrderDepthAttachmentAccess) {
ss << "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT::rasterizationOrderDepthAttachmentAccess "
"is not supported\n";
}
if (enabling->rasterizationOrderStencilAttachmentAccess && !supported.rasterizationOrderStencilAttachmentAccess) {
ss << "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT::"
"rasterizationOrderStencilAttachmentAccess is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV: {
VkPhysicalDeviceRawAccessChainsFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRawAccessChainsFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceRawAccessChainsFeaturesNV *>(current);
if (enabling->shaderRawAccessChains && !supported.shaderRawAccessChains) {
ss << "VkPhysicalDeviceRawAccessChainsFeaturesNV::shaderRawAccessChains is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR: {
VkPhysicalDeviceRayQueryFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayQueryFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR *>(current);
if (enabling->rayQuery && !supported.rayQuery) {
ss << "VkPhysicalDeviceRayQueryFeaturesKHR::rayQuery is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT: {
VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT *>(current);
if (enabling->rayTracingInvocationReorder && !supported.rayTracingInvocationReorder) {
ss << "VkPhysicalDeviceRayTracingInvocationReorderFeaturesEXT::rayTracingInvocationReorder is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: {
VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV *>(current);
if (enabling->rayTracingInvocationReorder && !supported.rayTracingInvocationReorder) {
ss << "VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV::rayTracingInvocationReorder is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV: {
VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV *>(current);
if (enabling->spheres && !supported.spheres) {
ss << "VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV::spheres is not supported\n";
}
if (enabling->linearSweptSpheres && !supported.linearSweptSpheres) {
ss << "VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV::linearSweptSpheres is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR: {
VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR *>(current);
if (enabling->rayTracingMaintenance1 && !supported.rayTracingMaintenance1) {
ss << "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingMaintenance1 is not supported\n";
}
if (enabling->rayTracingPipelineTraceRaysIndirect2 && !supported.rayTracingPipelineTraceRaysIndirect2) {
ss << "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingPipelineTraceRaysIndirect2 is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV: {
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *>(current);
if (enabling->rayTracingMotionBlur && !supported.rayTracingMotionBlur) {
ss << "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::rayTracingMotionBlur is not supported\n";
}
if (enabling->rayTracingMotionBlurPipelineTraceRaysIndirect &&
!supported.rayTracingMotionBlurPipelineTraceRaysIndirect) {
ss << "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::rayTracingMotionBlurPipelineTraceRaysIndirect is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR: {
VkPhysicalDeviceRayTracingPipelineFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>(current);
if (enabling->rayTracingPipeline && !supported.rayTracingPipeline) {
ss << "VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipeline is not supported\n";
}
if (enabling->rayTracingPipelineShaderGroupHandleCaptureReplay &&
!supported.rayTracingPipelineShaderGroupHandleCaptureReplay) {
ss << "VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineShaderGroupHandleCaptureReplay is not "
"supported\n";
}
if (enabling->rayTracingPipelineShaderGroupHandleCaptureReplayMixed &&
!supported.rayTracingPipelineShaderGroupHandleCaptureReplayMixed) {
ss << "VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineShaderGroupHandleCaptureReplayMixed is "
"not supported\n";
}
if (enabling->rayTracingPipelineTraceRaysIndirect && !supported.rayTracingPipelineTraceRaysIndirect) {
ss << "VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineTraceRaysIndirect is not supported\n";
}
if (enabling->rayTraversalPrimitiveCulling && !supported.rayTraversalPrimitiveCulling) {
ss << "VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTraversalPrimitiveCulling is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR: {
VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR *>(current);
if (enabling->rayTracingPositionFetch && !supported.rayTracingPositionFetch) {
ss << "VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR::rayTracingPositionFetch is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV: {
VkPhysicalDeviceRayTracingValidationFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRayTracingValidationFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceRayTracingValidationFeaturesNV *>(current);
if (enabling->rayTracingValidation && !supported.rayTracingValidation) {
ss << "VkPhysicalDeviceRayTracingValidationFeaturesNV::rayTracingValidation is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: {
VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *enabling =
reinterpret_cast<const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *>(current);
if (enabling->relaxedLineRasterization && !supported.relaxedLineRasterization) {
ss << "VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG::relaxedLineRasterization is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM: {
VkPhysicalDeviceRenderPassStripedFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRenderPassStripedFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceRenderPassStripedFeaturesARM *>(current);
if (enabling->renderPassStriped && !supported.renderPassStriped) {
ss << "VkPhysicalDeviceRenderPassStripedFeaturesARM::renderPassStriped is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: {
VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *>(current);
if (enabling->representativeFragmentTest && !supported.representativeFragmentTest) {
ss << "VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV::representativeFragmentTest is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR: {
VkPhysicalDeviceRobustness2FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceRobustness2FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesKHR *>(current);
if (enabling->robustBufferAccess2 && !supported.robustBufferAccess2) {
ss << "VkPhysicalDeviceRobustness2FeaturesKHR::robustBufferAccess2 is not supported\n";
}
if (enabling->robustImageAccess2 && !supported.robustImageAccess2) {
ss << "VkPhysicalDeviceRobustness2FeaturesKHR::robustImageAccess2 is not supported\n";
}
if (enabling->nullDescriptor && !supported.nullDescriptor) {
ss << "VkPhysicalDeviceRobustness2FeaturesKHR::nullDescriptor is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
VkPhysicalDeviceSamplerYcbcrConversionFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSamplerYcbcrConversionFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures *>(current);
if (enabling->samplerYcbcrConversion && !supported.samplerYcbcrConversion) {
ss << "VkPhysicalDeviceSamplerYcbcrConversionFeatures::samplerYcbcrConversion is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: {
VkPhysicalDeviceScalarBlockLayoutFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceScalarBlockLayoutFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures *>(current);
if (enabling->scalarBlockLayout && !supported.scalarBlockLayout) {
ss << "VkPhysicalDeviceScalarBlockLayoutFeatures::scalarBlockLayout is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM: {
VkPhysicalDeviceSchedulingControlsFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSchedulingControlsFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceSchedulingControlsFeaturesARM *>(current);
if (enabling->schedulingControls && !supported.schedulingControls) {
ss << "VkPhysicalDeviceSchedulingControlsFeaturesARM::schedulingControls is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: {
VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *>(current);
if (enabling->separateDepthStencilLayouts && !supported.separateDepthStencilLayouts) {
ss << "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures::separateDepthStencilLayouts is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT: {
VkPhysicalDeviceShader64BitIndexingFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShader64BitIndexingFeaturesEXT *>(current);
if (enabling->shader64BitIndexing && !supported.shader64BitIndexing) {
ss << "VkPhysicalDeviceShader64BitIndexingFeaturesEXT::shader64BitIndexing is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV: {
VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV *>(current);
if (enabling->shaderFloat16VectorAtomics && !supported.shaderFloat16VectorAtomics) {
ss << "VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV::shaderFloat16VectorAtomics is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: {
VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *>(current);
if (enabling->shaderBufferFloat16Atomics && !supported.shaderBufferFloat16Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat16Atomics is not supported\n";
}
if (enabling->shaderBufferFloat16AtomicAdd && !supported.shaderBufferFloat16AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat16AtomicAdd is not supported\n";
}
if (enabling->shaderBufferFloat16AtomicMinMax && !supported.shaderBufferFloat16AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat16AtomicMinMax is not supported\n";
}
if (enabling->shaderBufferFloat32AtomicMinMax && !supported.shaderBufferFloat32AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat32AtomicMinMax is not supported\n";
}
if (enabling->shaderBufferFloat64AtomicMinMax && !supported.shaderBufferFloat64AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat64AtomicMinMax is not supported\n";
}
if (enabling->shaderSharedFloat16Atomics && !supported.shaderSharedFloat16Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat16Atomics is not supported\n";
}
if (enabling->shaderSharedFloat16AtomicAdd && !supported.shaderSharedFloat16AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat16AtomicAdd is not supported\n";
}
if (enabling->shaderSharedFloat16AtomicMinMax && !supported.shaderSharedFloat16AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat16AtomicMinMax is not supported\n";
}
if (enabling->shaderSharedFloat32AtomicMinMax && !supported.shaderSharedFloat32AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat32AtomicMinMax is not supported\n";
}
if (enabling->shaderSharedFloat64AtomicMinMax && !supported.shaderSharedFloat64AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat64AtomicMinMax is not supported\n";
}
if (enabling->shaderImageFloat32AtomicMinMax && !supported.shaderImageFloat32AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderImageFloat32AtomicMinMax is not supported\n";
}
if (enabling->sparseImageFloat32AtomicMinMax && !supported.sparseImageFloat32AtomicMinMax) {
ss << "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::sparseImageFloat32AtomicMinMax is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: {
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *>(current);
if (enabling->shaderBufferFloat32Atomics && !supported.shaderBufferFloat32Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderBufferFloat32Atomics is not supported\n";
}
if (enabling->shaderBufferFloat32AtomicAdd && !supported.shaderBufferFloat32AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderBufferFloat32AtomicAdd is not supported\n";
}
if (enabling->shaderBufferFloat64Atomics && !supported.shaderBufferFloat64Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderBufferFloat64Atomics is not supported\n";
}
if (enabling->shaderBufferFloat64AtomicAdd && !supported.shaderBufferFloat64AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderBufferFloat64AtomicAdd is not supported\n";
}
if (enabling->shaderSharedFloat32Atomics && !supported.shaderSharedFloat32Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderSharedFloat32Atomics is not supported\n";
}
if (enabling->shaderSharedFloat32AtomicAdd && !supported.shaderSharedFloat32AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderSharedFloat32AtomicAdd is not supported\n";
}
if (enabling->shaderSharedFloat64Atomics && !supported.shaderSharedFloat64Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderSharedFloat64Atomics is not supported\n";
}
if (enabling->shaderSharedFloat64AtomicAdd && !supported.shaderSharedFloat64AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderSharedFloat64AtomicAdd is not supported\n";
}
if (enabling->shaderImageFloat32Atomics && !supported.shaderImageFloat32Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderImageFloat32Atomics is not supported\n";
}
if (enabling->shaderImageFloat32AtomicAdd && !supported.shaderImageFloat32AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderImageFloat32AtomicAdd is not supported\n";
}
if (enabling->sparseImageFloat32Atomics && !supported.sparseImageFloat32Atomics) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::sparseImageFloat32Atomics is not supported\n";
}
if (enabling->sparseImageFloat32AtomicAdd && !supported.sparseImageFloat32AtomicAdd) {
ss << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::sparseImageFloat32AtomicAdd is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: {
VkPhysicalDeviceShaderAtomicInt64Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderAtomicInt64Features *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features *>(current);
if (enabling->shaderBufferInt64Atomics && !supported.shaderBufferInt64Atomics) {
ss << "VkPhysicalDeviceShaderAtomicInt64Features::shaderBufferInt64Atomics is not supported\n";
}
if (enabling->shaderSharedInt64Atomics && !supported.shaderSharedInt64Atomics) {
ss << "VkPhysicalDeviceShaderAtomicInt64Features::shaderSharedInt64Atomics is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR: {
VkPhysicalDeviceShaderBfloat16FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderBfloat16FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderBfloat16FeaturesKHR *>(current);
if (enabling->shaderBFloat16Type && !supported.shaderBFloat16Type) {
ss << "VkPhysicalDeviceShaderBfloat16FeaturesKHR::shaderBFloat16Type is not supported\n";
}
if (enabling->shaderBFloat16DotProduct && !supported.shaderBFloat16DotProduct) {
ss << "VkPhysicalDeviceShaderBfloat16FeaturesKHR::shaderBFloat16DotProduct is not supported\n";
}
if (enabling->shaderBFloat16CooperativeMatrix && !supported.shaderBFloat16CooperativeMatrix) {
ss << "VkPhysicalDeviceShaderBfloat16FeaturesKHR::shaderBFloat16CooperativeMatrix is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: {
VkPhysicalDeviceShaderClockFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderClockFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR *>(current);
if (enabling->shaderSubgroupClock && !supported.shaderSubgroupClock) {
ss << "VkPhysicalDeviceShaderClockFeaturesKHR::shaderSubgroupClock is not supported\n";
}
if (enabling->shaderDeviceClock && !supported.shaderDeviceClock) {
ss << "VkPhysicalDeviceShaderClockFeaturesKHR::shaderDeviceClock is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM: {
VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *>(current);
if (enabling->shaderCoreBuiltins && !supported.shaderCoreBuiltins) {
ss << "VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM::shaderCoreBuiltins is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: {
VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *>(current);
if (enabling->shaderDemoteToHelperInvocation && !supported.shaderDemoteToHelperInvocation) {
ss << "VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures::shaderDemoteToHelperInvocation is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
VkPhysicalDeviceShaderDrawParametersFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderDrawParametersFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures *>(current);
if (enabling->shaderDrawParameters && !supported.shaderDrawParameters) {
ss << "VkPhysicalDeviceShaderDrawParametersFeatures::shaderDrawParameters is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD: {
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD *>(current);
if (enabling->shaderEarlyAndLateFragmentTests && !supported.shaderEarlyAndLateFragmentTests) {
ss << "VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD::shaderEarlyAndLateFragmentTests is not "
"supported\n";
}
break;
}
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX: {
VkPhysicalDeviceShaderEnqueueFeaturesAMDX supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderEnqueueFeaturesAMDX *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderEnqueueFeaturesAMDX *>(current);
if (enabling->shaderEnqueue && !supported.shaderEnqueue) {
ss << "VkPhysicalDeviceShaderEnqueueFeaturesAMDX::shaderEnqueue is not supported\n";
}
if (enabling->shaderMeshEnqueue && !supported.shaderMeshEnqueue) {
ss << "VkPhysicalDeviceShaderEnqueueFeaturesAMDX::shaderMeshEnqueue is not supported\n";
}
break;
}
#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: {
VkPhysicalDeviceShaderExpectAssumeFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderExpectAssumeFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderExpectAssumeFeatures *>(current);
if (enabling->shaderExpectAssume && !supported.shaderExpectAssume) {
ss << "VkPhysicalDeviceShaderExpectAssumeFeatures::shaderExpectAssume is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: {
VkPhysicalDeviceShaderFloat16Int8Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderFloat16Int8Features *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features *>(current);
if (enabling->shaderFloat16 && !supported.shaderFloat16) {
ss << "VkPhysicalDeviceShaderFloat16Int8Features::shaderFloat16 is not supported\n";
}
if (enabling->shaderInt8 && !supported.shaderInt8) {
ss << "VkPhysicalDeviceShaderFloat16Int8Features::shaderInt8 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT: {
VkPhysicalDeviceShaderFloat8FeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderFloat8FeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderFloat8FeaturesEXT *>(current);
if (enabling->shaderFloat8 && !supported.shaderFloat8) {
ss << "VkPhysicalDeviceShaderFloat8FeaturesEXT::shaderFloat8 is not supported\n";
}
if (enabling->shaderFloat8CooperativeMatrix && !supported.shaderFloat8CooperativeMatrix) {
ss << "VkPhysicalDeviceShaderFloat8FeaturesEXT::shaderFloat8CooperativeMatrix is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: {
VkPhysicalDeviceShaderFloatControls2Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderFloatControls2Features *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderFloatControls2Features *>(current);
if (enabling->shaderFloatControls2 && !supported.shaderFloatControls2) {
ss << "VkPhysicalDeviceShaderFloatControls2Features::shaderFloatControls2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR: {
VkPhysicalDeviceShaderFmaFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderFmaFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderFmaFeaturesKHR *>(current);
if (enabling->shaderFmaFloat16 && !supported.shaderFmaFloat16) {
ss << "VkPhysicalDeviceShaderFmaFeaturesKHR::shaderFmaFloat16 is not supported\n";
}
if (enabling->shaderFmaFloat32 && !supported.shaderFmaFloat32) {
ss << "VkPhysicalDeviceShaderFmaFeaturesKHR::shaderFmaFloat32 is not supported\n";
}
if (enabling->shaderFmaFloat64 && !supported.shaderFmaFloat64) {
ss << "VkPhysicalDeviceShaderFmaFeaturesKHR::shaderFmaFloat64 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: {
VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *>(current);
if (enabling->shaderImageInt64Atomics && !supported.shaderImageInt64Atomics) {
ss << "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT::shaderImageInt64Atomics is not supported\n";
}
if (enabling->sparseImageInt64Atomics && !supported.sparseImageInt64Atomics) {
ss << "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT::sparseImageInt64Atomics is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV: {
VkPhysicalDeviceShaderImageFootprintFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderImageFootprintFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV *>(current);
if (enabling->imageFootprint && !supported.imageFootprint) {
ss << "VkPhysicalDeviceShaderImageFootprintFeaturesNV::imageFootprint is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: {
VkPhysicalDeviceShaderIntegerDotProductFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderIntegerDotProductFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductFeatures *>(current);
if (enabling->shaderIntegerDotProduct && !supported.shaderIntegerDotProduct) {
ss << "VkPhysicalDeviceShaderIntegerDotProductFeatures::shaderIntegerDotProduct is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: {
VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *>(current);
if (enabling->shaderIntegerFunctions2 && !supported.shaderIntegerFunctions2) {
ss << "VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL::shaderIntegerFunctions2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT: {
VkPhysicalDeviceShaderLongVectorFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderLongVectorFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderLongVectorFeaturesEXT *>(current);
if (enabling->longVector && !supported.longVector) {
ss << "VkPhysicalDeviceShaderLongVectorFeaturesEXT::longVector is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: {
VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *>(current);
if (enabling->shaderMaximalReconvergence && !supported.shaderMaximalReconvergence) {
ss << "VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR::shaderMaximalReconvergence is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: {
VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *>(current);
if (enabling->shaderModuleIdentifier && !supported.shaderModuleIdentifier) {
ss << "VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT::shaderModuleIdentifier is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT: {
VkPhysicalDeviceShaderObjectFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderObjectFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderObjectFeaturesEXT *>(current);
if (enabling->shaderObject && !supported.shaderObject) {
ss << "VkPhysicalDeviceShaderObjectFeaturesEXT::shaderObject is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR: {
VkPhysicalDeviceShaderQuadControlFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderQuadControlFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderQuadControlFeaturesKHR *>(current);
if (enabling->shaderQuadControl && !supported.shaderQuadControl) {
ss << "VkPhysicalDeviceShaderQuadControlFeaturesKHR::shaderQuadControl is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR: {
VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *>(current);
if (enabling->shaderRelaxedExtendedInstruction && !supported.shaderRelaxedExtendedInstruction) {
ss << "VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR::shaderRelaxedExtendedInstruction is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: {
VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *>(current);
if (enabling->shaderReplicatedComposites && !supported.shaderReplicatedComposites) {
ss << "VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT::shaderReplicatedComposites is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: {
VkPhysicalDeviceShaderSMBuiltinsFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *>(current);
if (enabling->shaderSMBuiltins && !supported.shaderSMBuiltins) {
ss << "VkPhysicalDeviceShaderSMBuiltinsFeaturesNV::shaderSMBuiltins is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: {
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *>(current);
if (enabling->shaderSubgroupExtendedTypes && !supported.shaderSubgroupExtendedTypes) {
ss << "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures::shaderSubgroupExtendedTypes is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT: {
VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *>(current);
if (enabling->shaderSubgroupPartitioned && !supported.shaderSubgroupPartitioned) {
ss << "VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT::shaderSubgroupPartitioned is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES: {
VkPhysicalDeviceShaderSubgroupRotateFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderSubgroupRotateFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderSubgroupRotateFeatures *>(current);
if (enabling->shaderSubgroupRotate && !supported.shaderSubgroupRotate) {
ss << "VkPhysicalDeviceShaderSubgroupRotateFeatures::shaderSubgroupRotate is not supported\n";
}
if (enabling->shaderSubgroupRotateClustered && !supported.shaderSubgroupRotateClustered) {
ss << "VkPhysicalDeviceShaderSubgroupRotateFeatures::shaderSubgroupRotateClustered is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: {
VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *>(current);
if (enabling->shaderSubgroupUniformControlFlow && !supported.shaderSubgroupUniformControlFlow) {
ss << "VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR::shaderSubgroupUniformControlFlow is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: {
VkPhysicalDeviceShaderTerminateInvocationFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderTerminateInvocationFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeatures *>(current);
if (enabling->shaderTerminateInvocation && !supported.shaderTerminateInvocation) {
ss << "VkPhysicalDeviceShaderTerminateInvocationFeatures::shaderTerminateInvocation is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: {
VkPhysicalDeviceShaderTileImageFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderTileImageFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderTileImageFeaturesEXT *>(current);
if (enabling->shaderTileImageColorReadAccess && !supported.shaderTileImageColorReadAccess) {
ss << "VkPhysicalDeviceShaderTileImageFeaturesEXT::shaderTileImageColorReadAccess is not supported\n";
}
if (enabling->shaderTileImageDepthReadAccess && !supported.shaderTileImageDepthReadAccess) {
ss << "VkPhysicalDeviceShaderTileImageFeaturesEXT::shaderTileImageDepthReadAccess is not supported\n";
}
if (enabling->shaderTileImageStencilReadAccess && !supported.shaderTileImageStencilReadAccess) {
ss << "VkPhysicalDeviceShaderTileImageFeaturesEXT::shaderTileImageStencilReadAccess is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: {
VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT *>(current);
if (enabling->shaderUniformBufferUnsizedArray && !supported.shaderUniformBufferUnsizedArray) {
ss << "VkPhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT::shaderUniformBufferUnsizedArray is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: {
VkPhysicalDeviceShaderUntypedPointersFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceShaderUntypedPointersFeaturesKHR *>(current);
if (enabling->shaderUntypedPointers && !supported.shaderUntypedPointers) {
ss << "VkPhysicalDeviceShaderUntypedPointersFeaturesKHR::shaderUntypedPointers is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: {
VkPhysicalDeviceShadingRateImageFeaturesNV supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceShadingRateImageFeaturesNV *enabling =
reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV *>(current);
if (enabling->shadingRateImage && !supported.shadingRateImage) {
ss << "VkPhysicalDeviceShadingRateImageFeaturesNV::shadingRateImage is not supported\n";
}
if (enabling->shadingRateCoarseSampleOrder && !supported.shadingRateCoarseSampleOrder) {
ss << "VkPhysicalDeviceShadingRateImageFeaturesNV::shadingRateCoarseSampleOrder is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: {
VkPhysicalDeviceSubgroupSizeControlFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSubgroupSizeControlFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeatures *>(current);
if (enabling->subgroupSizeControl && !supported.subgroupSizeControl) {
ss << "VkPhysicalDeviceSubgroupSizeControlFeatures::subgroupSizeControl is not supported\n";
}
if (enabling->computeFullSubgroups && !supported.computeFullSubgroups) {
ss << "VkPhysicalDeviceSubgroupSizeControlFeatures::computeFullSubgroups is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: {
VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *>(current);
if (enabling->subpassMergeFeedback && !supported.subpassMergeFeedback) {
ss << "VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT::subpassMergeFeedback is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI: {
VkPhysicalDeviceSubpassShadingFeaturesHUAWEI supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *enabling =
reinterpret_cast<const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *>(current);
if (enabling->subpassShading && !supported.subpassShading) {
ss << "VkPhysicalDeviceSubpassShadingFeaturesHUAWEI::subpassShading is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR: {
VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR *>(current);
if (enabling->swapchainMaintenance1 && !supported.swapchainMaintenance1) {
ss << "VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR::swapchainMaintenance1 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: {
VkPhysicalDeviceSynchronization2Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceSynchronization2Features *enabling =
reinterpret_cast<const VkPhysicalDeviceSynchronization2Features *>(current);
if (enabling->synchronization2 && !supported.synchronization2) {
ss << "VkPhysicalDeviceSynchronization2Features::synchronization2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM: {
VkPhysicalDeviceTensorFeaturesARM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTensorFeaturesARM *enabling =
reinterpret_cast<const VkPhysicalDeviceTensorFeaturesARM *>(current);
if (enabling->tensorNonPacked && !supported.tensorNonPacked) {
ss << "VkPhysicalDeviceTensorFeaturesARM::tensorNonPacked is not supported\n";
}
if (enabling->shaderTensorAccess && !supported.shaderTensorAccess) {
ss << "VkPhysicalDeviceTensorFeaturesARM::shaderTensorAccess is not supported\n";
}
if (enabling->shaderStorageTensorArrayDynamicIndexing && !supported.shaderStorageTensorArrayDynamicIndexing) {
ss << "VkPhysicalDeviceTensorFeaturesARM::shaderStorageTensorArrayDynamicIndexing is not supported\n";
}
if (enabling->shaderStorageTensorArrayNonUniformIndexing && !supported.shaderStorageTensorArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceTensorFeaturesARM::shaderStorageTensorArrayNonUniformIndexing is not supported\n";
}
if (enabling->descriptorBindingStorageTensorUpdateAfterBind &&
!supported.descriptorBindingStorageTensorUpdateAfterBind) {
ss << "VkPhysicalDeviceTensorFeaturesARM::descriptorBindingStorageTensorUpdateAfterBind is not supported\n";
}
if (enabling->tensors && !supported.tensors) {
ss << "VkPhysicalDeviceTensorFeaturesARM::tensors is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *>(current);
if (enabling->texelBufferAlignment && !supported.texelBufferAlignment) {
ss << "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT::texelBufferAlignment is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT: {
VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT *>(current);
if (enabling->textureCompressionASTC_3D && !supported.textureCompressionASTC_3D) {
ss << "VkPhysicalDeviceTextureCompressionASTC3DFeaturesEXT::textureCompressionASTC_3D is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: {
VkPhysicalDeviceTextureCompressionASTCHDRFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *>(current);
if (enabling->textureCompressionASTC_HDR && !supported.textureCompressionASTC_HDR) {
ss << "VkPhysicalDeviceTextureCompressionASTCHDRFeatures::textureCompressionASTC_HDR is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM: {
VkPhysicalDeviceTileMemoryHeapFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTileMemoryHeapFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceTileMemoryHeapFeaturesQCOM *>(current);
if (enabling->tileMemoryHeap && !supported.tileMemoryHeap) {
ss << "VkPhysicalDeviceTileMemoryHeapFeaturesQCOM::tileMemoryHeap is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM: {
VkPhysicalDeviceTilePropertiesFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTilePropertiesFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceTilePropertiesFeaturesQCOM *>(current);
if (enabling->tileProperties && !supported.tileProperties) {
ss << "VkPhysicalDeviceTilePropertiesFeaturesQCOM::tileProperties is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM: {
VkPhysicalDeviceTileShadingFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTileShadingFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceTileShadingFeaturesQCOM *>(current);
if (enabling->tileShading && !supported.tileShading) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShading is not supported\n";
}
if (enabling->tileShadingFragmentStage && !supported.tileShadingFragmentStage) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingFragmentStage is not supported\n";
}
if (enabling->tileShadingColorAttachments && !supported.tileShadingColorAttachments) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingColorAttachments is not supported\n";
}
if (enabling->tileShadingDepthAttachments && !supported.tileShadingDepthAttachments) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingDepthAttachments is not supported\n";
}
if (enabling->tileShadingStencilAttachments && !supported.tileShadingStencilAttachments) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingStencilAttachments is not supported\n";
}
if (enabling->tileShadingInputAttachments && !supported.tileShadingInputAttachments) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingInputAttachments is not supported\n";
}
if (enabling->tileShadingSampledAttachments && !supported.tileShadingSampledAttachments) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingSampledAttachments is not supported\n";
}
if (enabling->tileShadingPerTileDraw && !supported.tileShadingPerTileDraw) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingPerTileDraw is not supported\n";
}
if (enabling->tileShadingPerTileDispatch && !supported.tileShadingPerTileDispatch) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingPerTileDispatch is not supported\n";
}
if (enabling->tileShadingDispatchTile && !supported.tileShadingDispatchTile) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingDispatchTile is not supported\n";
}
if (enabling->tileShadingApron && !supported.tileShadingApron) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingApron is not supported\n";
}
if (enabling->tileShadingAnisotropicApron && !supported.tileShadingAnisotropicApron) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingAnisotropicApron is not supported\n";
}
if (enabling->tileShadingAtomicOps && !supported.tileShadingAtomicOps) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingAtomicOps is not supported\n";
}
if (enabling->tileShadingImageProcessing && !supported.tileShadingImageProcessing) {
ss << "VkPhysicalDeviceTileShadingFeaturesQCOM::tileShadingImageProcessing is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: {
VkPhysicalDeviceTimelineSemaphoreFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTimelineSemaphoreFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures *>(current);
if (enabling->timelineSemaphore && !supported.timelineSemaphore) {
ss << "VkPhysicalDeviceTimelineSemaphoreFeatures::timelineSemaphore is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: {
VkPhysicalDeviceTransformFeedbackFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceTransformFeedbackFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT *>(current);
if (enabling->transformFeedback && !supported.transformFeedback) {
ss << "VkPhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedback is not supported\n";
}
if (enabling->geometryStreams && !supported.geometryStreams) {
ss << "VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR: {
VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *>(current);
if (enabling->unifiedImageLayouts && !supported.unifiedImageLayouts) {
ss << "VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR::unifiedImageLayouts is not supported\n";
}
if (enabling->unifiedImageLayoutsVideo && !supported.unifiedImageLayoutsVideo) {
ss << "VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR::unifiedImageLayoutsVideo is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: {
VkPhysicalDeviceUniformBufferStandardLayoutFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *>(current);
if (enabling->uniformBufferStandardLayout && !supported.uniformBufferStandardLayout) {
ss << "VkPhysicalDeviceUniformBufferStandardLayoutFeatures::uniformBufferStandardLayout is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
VkPhysicalDeviceVariablePointersFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVariablePointersFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures *>(current);
if (enabling->variablePointersStorageBuffer && !supported.variablePointersStorageBuffer) {
ss << "VkPhysicalDeviceVariablePointersFeatures::variablePointersStorageBuffer is not supported\n";
}
if (enabling->variablePointers && !supported.variablePointers) {
ss << "VkPhysicalDeviceVariablePointersFeatures::variablePointers is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES: {
VkPhysicalDeviceVertexAttributeDivisorFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVertexAttributeDivisorFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeatures *>(current);
if (enabling->vertexAttributeInstanceRateDivisor && !supported.vertexAttributeInstanceRateDivisor) {
ss << "VkPhysicalDeviceVertexAttributeDivisorFeatures::vertexAttributeInstanceRateDivisor is not supported\n";
}
if (enabling->vertexAttributeInstanceRateZeroDivisor && !supported.vertexAttributeInstanceRateZeroDivisor) {
ss << "VkPhysicalDeviceVertexAttributeDivisorFeatures::vertexAttributeInstanceRateZeroDivisor is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: {
VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *>(current);
if (enabling->vertexAttributeRobustness && !supported.vertexAttributeRobustness) {
ss << "VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT::vertexAttributeRobustness is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: {
VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *>(current);
if (enabling->vertexInputDynamicState && !supported.vertexInputDynamicState) {
ss << "VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT::vertexInputDynamicState is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR: {
VkPhysicalDeviceVideoDecodeVP9FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoDecodeVP9FeaturesKHR *>(current);
if (enabling->videoDecodeVP9 && !supported.videoDecodeVP9) {
ss << "VkPhysicalDeviceVideoDecodeVP9FeaturesKHR::videoDecodeVP9 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR: {
VkPhysicalDeviceVideoEncodeAV1FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoEncodeAV1FeaturesKHR *>(current);
if (enabling->videoEncodeAV1 && !supported.videoEncodeAV1) {
ss << "VkPhysicalDeviceVideoEncodeAV1FeaturesKHR::videoEncodeAV1 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR: {
VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR *>(current);
if (enabling->videoEncodeIntraRefresh && !supported.videoEncodeIntraRefresh) {
ss << "VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR::videoEncodeIntraRefresh is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR: {
VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR *>(current);
if (enabling->videoEncodeQuantizationMap && !supported.videoEncodeQuantizationMap) {
ss << "VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR::videoEncodeQuantizationMap is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE: {
VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE *>(current);
if (enabling->videoEncodeRgbConversion && !supported.videoEncodeRgbConversion) {
ss << "VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE::videoEncodeRgbConversion is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: {
VkPhysicalDeviceVideoMaintenance1FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoMaintenance1FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoMaintenance1FeaturesKHR *>(current);
if (enabling->videoMaintenance1 && !supported.videoMaintenance1) {
ss << "VkPhysicalDeviceVideoMaintenance1FeaturesKHR::videoMaintenance1 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR: {
VkPhysicalDeviceVideoMaintenance2FeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVideoMaintenance2FeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceVideoMaintenance2FeaturesKHR *>(current);
if (enabling->videoMaintenance2 && !supported.videoMaintenance2) {
ss << "VkPhysicalDeviceVideoMaintenance2FeaturesKHR::videoMaintenance2 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: {
VkPhysicalDeviceVulkan11Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVulkan11Features *enabling =
reinterpret_cast<const VkPhysicalDeviceVulkan11Features *>(current);
if (enabling->storageBuffer16BitAccess && !supported.storageBuffer16BitAccess) {
ss << "VkPhysicalDeviceVulkan11Features::storageBuffer16BitAccess is not supported\n";
}
if (enabling->uniformAndStorageBuffer16BitAccess && !supported.uniformAndStorageBuffer16BitAccess) {
ss << "VkPhysicalDeviceVulkan11Features::uniformAndStorageBuffer16BitAccess is not supported\n";
}
if (enabling->storagePushConstant16 && !supported.storagePushConstant16) {
ss << "VkPhysicalDeviceVulkan11Features::storagePushConstant16 is not supported\n";
}
if (enabling->storageInputOutput16 && !supported.storageInputOutput16) {
ss << "VkPhysicalDeviceVulkan11Features::storageInputOutput16 is not supported\n";
}
if (enabling->multiview && !supported.multiview) {
ss << "VkPhysicalDeviceVulkan11Features::multiview is not supported\n";
}
if (enabling->multiviewGeometryShader && !supported.multiviewGeometryShader) {
ss << "VkPhysicalDeviceVulkan11Features::multiviewGeometryShader is not supported\n";
}
if (enabling->multiviewTessellationShader && !supported.multiviewTessellationShader) {
ss << "VkPhysicalDeviceVulkan11Features::multiviewTessellationShader is not supported\n";
}
if (enabling->variablePointersStorageBuffer && !supported.variablePointersStorageBuffer) {
ss << "VkPhysicalDeviceVulkan11Features::variablePointersStorageBuffer is not supported\n";
}
if (enabling->variablePointers && !supported.variablePointers) {
ss << "VkPhysicalDeviceVulkan11Features::variablePointers is not supported\n";
}
if (enabling->protectedMemory && !supported.protectedMemory) {
ss << "VkPhysicalDeviceVulkan11Features::protectedMemory is not supported\n";
}
if (enabling->samplerYcbcrConversion && !supported.samplerYcbcrConversion) {
ss << "VkPhysicalDeviceVulkan11Features::samplerYcbcrConversion is not supported\n";
}
if (enabling->shaderDrawParameters && !supported.shaderDrawParameters) {
ss << "VkPhysicalDeviceVulkan11Features::shaderDrawParameters is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
VkPhysicalDeviceVulkan12Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVulkan12Features *enabling =
reinterpret_cast<const VkPhysicalDeviceVulkan12Features *>(current);
if (enabling->samplerMirrorClampToEdge && !supported.samplerMirrorClampToEdge) {
ss << "VkPhysicalDeviceVulkan12Features::samplerMirrorClampToEdge is not supported\n";
}
if (enabling->drawIndirectCount && !supported.drawIndirectCount) {
ss << "VkPhysicalDeviceVulkan12Features::drawIndirectCount is not supported\n";
}
if (enabling->storageBuffer8BitAccess && !supported.storageBuffer8BitAccess) {
ss << "VkPhysicalDeviceVulkan12Features::storageBuffer8BitAccess is not supported\n";
}
if (enabling->uniformAndStorageBuffer8BitAccess && !supported.uniformAndStorageBuffer8BitAccess) {
ss << "VkPhysicalDeviceVulkan12Features::uniformAndStorageBuffer8BitAccess is not supported\n";
}
if (enabling->storagePushConstant8 && !supported.storagePushConstant8) {
ss << "VkPhysicalDeviceVulkan12Features::storagePushConstant8 is not supported\n";
}
if (enabling->shaderBufferInt64Atomics && !supported.shaderBufferInt64Atomics) {
ss << "VkPhysicalDeviceVulkan12Features::shaderBufferInt64Atomics is not supported\n";
}
if (enabling->shaderSharedInt64Atomics && !supported.shaderSharedInt64Atomics) {
ss << "VkPhysicalDeviceVulkan12Features::shaderSharedInt64Atomics is not supported\n";
}
if (enabling->shaderFloat16 && !supported.shaderFloat16) {
ss << "VkPhysicalDeviceVulkan12Features::shaderFloat16 is not supported\n";
}
if (enabling->shaderInt8 && !supported.shaderInt8) {
ss << "VkPhysicalDeviceVulkan12Features::shaderInt8 is not supported\n";
}
if (enabling->descriptorIndexing && !supported.descriptorIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorIndexing is not supported\n";
}
if (enabling->shaderInputAttachmentArrayDynamicIndexing && !supported.shaderInputAttachmentArrayDynamicIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderInputAttachmentArrayDynamicIndexing is not supported\n";
}
if (enabling->shaderUniformTexelBufferArrayDynamicIndexing &&
!supported.shaderUniformTexelBufferArrayDynamicIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderUniformTexelBufferArrayDynamicIndexing is not supported\n";
}
if (enabling->shaderStorageTexelBufferArrayDynamicIndexing &&
!supported.shaderStorageTexelBufferArrayDynamicIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderStorageTexelBufferArrayDynamicIndexing is not supported\n";
}
if (enabling->shaderUniformBufferArrayNonUniformIndexing && !supported.shaderUniformBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderUniformBufferArrayNonUniformIndexing is not supported\n";
}
if (enabling->shaderSampledImageArrayNonUniformIndexing && !supported.shaderSampledImageArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderSampledImageArrayNonUniformIndexing is not supported\n";
}
if (enabling->shaderStorageBufferArrayNonUniformIndexing && !supported.shaderStorageBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderStorageBufferArrayNonUniformIndexing is not supported\n";
}
if (enabling->shaderStorageImageArrayNonUniformIndexing && !supported.shaderStorageImageArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderStorageImageArrayNonUniformIndexing is not supported\n";
}
if (enabling->shaderInputAttachmentArrayNonUniformIndexing &&
!supported.shaderInputAttachmentArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderInputAttachmentArrayNonUniformIndexing is not supported\n";
}
if (enabling->shaderUniformTexelBufferArrayNonUniformIndexing &&
!supported.shaderUniformTexelBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderUniformTexelBufferArrayNonUniformIndexing is not supported\n";
}
if (enabling->shaderStorageTexelBufferArrayNonUniformIndexing &&
!supported.shaderStorageTexelBufferArrayNonUniformIndexing) {
ss << "VkPhysicalDeviceVulkan12Features::shaderStorageTexelBufferArrayNonUniformIndexing is not supported\n";
}
if (enabling->descriptorBindingUniformBufferUpdateAfterBind &&
!supported.descriptorBindingUniformBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingUniformBufferUpdateAfterBind is not supported\n";
}
if (enabling->descriptorBindingSampledImageUpdateAfterBind &&
!supported.descriptorBindingSampledImageUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingSampledImageUpdateAfterBind is not supported\n";
}
if (enabling->descriptorBindingStorageImageUpdateAfterBind &&
!supported.descriptorBindingStorageImageUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingStorageImageUpdateAfterBind is not supported\n";
}
if (enabling->descriptorBindingStorageBufferUpdateAfterBind &&
!supported.descriptorBindingStorageBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingStorageBufferUpdateAfterBind is not supported\n";
}
if (enabling->descriptorBindingUniformTexelBufferUpdateAfterBind &&
!supported.descriptorBindingUniformTexelBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingUniformTexelBufferUpdateAfterBind is not supported\n";
}
if (enabling->descriptorBindingStorageTexelBufferUpdateAfterBind &&
!supported.descriptorBindingStorageTexelBufferUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingStorageTexelBufferUpdateAfterBind is not supported\n";
}
if (enabling->descriptorBindingUpdateUnusedWhilePending && !supported.descriptorBindingUpdateUnusedWhilePending) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingUpdateUnusedWhilePending is not supported\n";
}
if (enabling->descriptorBindingPartiallyBound && !supported.descriptorBindingPartiallyBound) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingPartiallyBound is not supported\n";
}
if (enabling->descriptorBindingVariableDescriptorCount && !supported.descriptorBindingVariableDescriptorCount) {
ss << "VkPhysicalDeviceVulkan12Features::descriptorBindingVariableDescriptorCount is not supported\n";
}
if (enabling->runtimeDescriptorArray && !supported.runtimeDescriptorArray) {
ss << "VkPhysicalDeviceVulkan12Features::runtimeDescriptorArray is not supported\n";
}
if (enabling->samplerFilterMinmax && !supported.samplerFilterMinmax) {
ss << "VkPhysicalDeviceVulkan12Features::samplerFilterMinmax is not supported\n";
}
if (enabling->scalarBlockLayout && !supported.scalarBlockLayout) {
ss << "VkPhysicalDeviceVulkan12Features::scalarBlockLayout is not supported\n";
}
if (enabling->imagelessFramebuffer && !supported.imagelessFramebuffer) {
ss << "VkPhysicalDeviceVulkan12Features::imagelessFramebuffer is not supported\n";
}
if (enabling->uniformBufferStandardLayout && !supported.uniformBufferStandardLayout) {
ss << "VkPhysicalDeviceVulkan12Features::uniformBufferStandardLayout is not supported\n";
}
if (enabling->shaderSubgroupExtendedTypes && !supported.shaderSubgroupExtendedTypes) {
ss << "VkPhysicalDeviceVulkan12Features::shaderSubgroupExtendedTypes is not supported\n";
}
if (enabling->separateDepthStencilLayouts && !supported.separateDepthStencilLayouts) {
ss << "VkPhysicalDeviceVulkan12Features::separateDepthStencilLayouts is not supported\n";
}
if (enabling->hostQueryReset && !supported.hostQueryReset) {
ss << "VkPhysicalDeviceVulkan12Features::hostQueryReset is not supported\n";
}
if (enabling->timelineSemaphore && !supported.timelineSemaphore) {
ss << "VkPhysicalDeviceVulkan12Features::timelineSemaphore is not supported\n";
}
if (enabling->bufferDeviceAddress && !supported.bufferDeviceAddress) {
ss << "VkPhysicalDeviceVulkan12Features::bufferDeviceAddress is not supported\n";
}
if (enabling->bufferDeviceAddressCaptureReplay && !supported.bufferDeviceAddressCaptureReplay) {
ss << "VkPhysicalDeviceVulkan12Features::bufferDeviceAddressCaptureReplay is not supported\n";
}
if (enabling->bufferDeviceAddressMultiDevice && !supported.bufferDeviceAddressMultiDevice) {
ss << "VkPhysicalDeviceVulkan12Features::bufferDeviceAddressMultiDevice is not supported\n";
}
if (enabling->vulkanMemoryModel && !supported.vulkanMemoryModel) {
ss << "VkPhysicalDeviceVulkan12Features::vulkanMemoryModel is not supported\n";
}
if (enabling->vulkanMemoryModelDeviceScope && !supported.vulkanMemoryModelDeviceScope) {
ss << "VkPhysicalDeviceVulkan12Features::vulkanMemoryModelDeviceScope is not supported\n";
}
if (enabling->vulkanMemoryModelAvailabilityVisibilityChains &&
!supported.vulkanMemoryModelAvailabilityVisibilityChains) {
ss << "VkPhysicalDeviceVulkan12Features::vulkanMemoryModelAvailabilityVisibilityChains is not supported\n";
}
if (enabling->shaderOutputViewportIndex && !supported.shaderOutputViewportIndex) {
ss << "VkPhysicalDeviceVulkan12Features::shaderOutputViewportIndex is not supported\n";
}
if (enabling->shaderOutputLayer && !supported.shaderOutputLayer) {
ss << "VkPhysicalDeviceVulkan12Features::shaderOutputLayer is not supported\n";
}
if (enabling->subgroupBroadcastDynamicId && !supported.subgroupBroadcastDynamicId) {
ss << "VkPhysicalDeviceVulkan12Features::subgroupBroadcastDynamicId is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: {
VkPhysicalDeviceVulkan13Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVulkan13Features *enabling =
reinterpret_cast<const VkPhysicalDeviceVulkan13Features *>(current);
if (enabling->robustImageAccess && !supported.robustImageAccess) {
ss << "VkPhysicalDeviceVulkan13Features::robustImageAccess is not supported\n";
}
if (enabling->inlineUniformBlock && !supported.inlineUniformBlock) {
ss << "VkPhysicalDeviceVulkan13Features::inlineUniformBlock is not supported\n";
}
if (enabling->descriptorBindingInlineUniformBlockUpdateAfterBind &&
!supported.descriptorBindingInlineUniformBlockUpdateAfterBind) {
ss << "VkPhysicalDeviceVulkan13Features::descriptorBindingInlineUniformBlockUpdateAfterBind is not supported\n";
}
if (enabling->pipelineCreationCacheControl && !supported.pipelineCreationCacheControl) {
ss << "VkPhysicalDeviceVulkan13Features::pipelineCreationCacheControl is not supported\n";
}
if (enabling->privateData && !supported.privateData) {
ss << "VkPhysicalDeviceVulkan13Features::privateData is not supported\n";
}
if (enabling->shaderDemoteToHelperInvocation && !supported.shaderDemoteToHelperInvocation) {
ss << "VkPhysicalDeviceVulkan13Features::shaderDemoteToHelperInvocation is not supported\n";
}
if (enabling->shaderTerminateInvocation && !supported.shaderTerminateInvocation) {
ss << "VkPhysicalDeviceVulkan13Features::shaderTerminateInvocation is not supported\n";
}
if (enabling->subgroupSizeControl && !supported.subgroupSizeControl) {
ss << "VkPhysicalDeviceVulkan13Features::subgroupSizeControl is not supported\n";
}
if (enabling->computeFullSubgroups && !supported.computeFullSubgroups) {
ss << "VkPhysicalDeviceVulkan13Features::computeFullSubgroups is not supported\n";
}
if (enabling->synchronization2 && !supported.synchronization2) {
ss << "VkPhysicalDeviceVulkan13Features::synchronization2 is not supported\n";
}
if (enabling->textureCompressionASTC_HDR && !supported.textureCompressionASTC_HDR) {
ss << "VkPhysicalDeviceVulkan13Features::textureCompressionASTC_HDR is not supported\n";
}
if (enabling->shaderZeroInitializeWorkgroupMemory && !supported.shaderZeroInitializeWorkgroupMemory) {
ss << "VkPhysicalDeviceVulkan13Features::shaderZeroInitializeWorkgroupMemory is not supported\n";
}
if (enabling->dynamicRendering && !supported.dynamicRendering) {
ss << "VkPhysicalDeviceVulkan13Features::dynamicRendering is not supported\n";
}
if (enabling->shaderIntegerDotProduct && !supported.shaderIntegerDotProduct) {
ss << "VkPhysicalDeviceVulkan13Features::shaderIntegerDotProduct is not supported\n";
}
if (enabling->maintenance4 && !supported.maintenance4) {
ss << "VkPhysicalDeviceVulkan13Features::maintenance4 is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES: {
VkPhysicalDeviceVulkan14Features supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVulkan14Features *enabling =
reinterpret_cast<const VkPhysicalDeviceVulkan14Features *>(current);
if (enabling->globalPriorityQuery && !supported.globalPriorityQuery) {
ss << "VkPhysicalDeviceVulkan14Features::globalPriorityQuery is not supported\n";
}
if (enabling->shaderSubgroupRotate && !supported.shaderSubgroupRotate) {
ss << "VkPhysicalDeviceVulkan14Features::shaderSubgroupRotate is not supported\n";
}
if (enabling->shaderSubgroupRotateClustered && !supported.shaderSubgroupRotateClustered) {
ss << "VkPhysicalDeviceVulkan14Features::shaderSubgroupRotateClustered is not supported\n";
}
if (enabling->shaderFloatControls2 && !supported.shaderFloatControls2) {
ss << "VkPhysicalDeviceVulkan14Features::shaderFloatControls2 is not supported\n";
}
if (enabling->shaderExpectAssume && !supported.shaderExpectAssume) {
ss << "VkPhysicalDeviceVulkan14Features::shaderExpectAssume is not supported\n";
}
if (enabling->rectangularLines && !supported.rectangularLines) {
ss << "VkPhysicalDeviceVulkan14Features::rectangularLines is not supported\n";
}
if (enabling->bresenhamLines && !supported.bresenhamLines) {
ss << "VkPhysicalDeviceVulkan14Features::bresenhamLines is not supported\n";
}
if (enabling->smoothLines && !supported.smoothLines) {
ss << "VkPhysicalDeviceVulkan14Features::smoothLines is not supported\n";
}
if (enabling->stippledRectangularLines && !supported.stippledRectangularLines) {
ss << "VkPhysicalDeviceVulkan14Features::stippledRectangularLines is not supported\n";
}
if (enabling->stippledBresenhamLines && !supported.stippledBresenhamLines) {
ss << "VkPhysicalDeviceVulkan14Features::stippledBresenhamLines is not supported\n";
}
if (enabling->stippledSmoothLines && !supported.stippledSmoothLines) {
ss << "VkPhysicalDeviceVulkan14Features::stippledSmoothLines is not supported\n";
}
if (enabling->vertexAttributeInstanceRateDivisor && !supported.vertexAttributeInstanceRateDivisor) {
ss << "VkPhysicalDeviceVulkan14Features::vertexAttributeInstanceRateDivisor is not supported\n";
}
if (enabling->vertexAttributeInstanceRateZeroDivisor && !supported.vertexAttributeInstanceRateZeroDivisor) {
ss << "VkPhysicalDeviceVulkan14Features::vertexAttributeInstanceRateZeroDivisor is not supported\n";
}
if (enabling->indexTypeUint8 && !supported.indexTypeUint8) {
ss << "VkPhysicalDeviceVulkan14Features::indexTypeUint8 is not supported\n";
}
if (enabling->dynamicRenderingLocalRead && !supported.dynamicRenderingLocalRead) {
ss << "VkPhysicalDeviceVulkan14Features::dynamicRenderingLocalRead is not supported\n";
}
if (enabling->maintenance5 && !supported.maintenance5) {
ss << "VkPhysicalDeviceVulkan14Features::maintenance5 is not supported\n";
}
if (enabling->maintenance6 && !supported.maintenance6) {
ss << "VkPhysicalDeviceVulkan14Features::maintenance6 is not supported\n";
}
if (enabling->pipelineProtectedAccess && !supported.pipelineProtectedAccess) {
ss << "VkPhysicalDeviceVulkan14Features::pipelineProtectedAccess is not supported\n";
}
if (enabling->pipelineRobustness && !supported.pipelineRobustness) {
ss << "VkPhysicalDeviceVulkan14Features::pipelineRobustness is not supported\n";
}
if (enabling->hostImageCopy && !supported.hostImageCopy) {
ss << "VkPhysicalDeviceVulkan14Features::hostImageCopy is not supported\n";
}
if (enabling->pushDescriptor && !supported.pushDescriptor) {
ss << "VkPhysicalDeviceVulkan14Features::pushDescriptor is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: {
VkPhysicalDeviceVulkanMemoryModelFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceVulkanMemoryModelFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures *>(current);
if (enabling->vulkanMemoryModel && !supported.vulkanMemoryModel) {
ss << "VkPhysicalDeviceVulkanMemoryModelFeatures::vulkanMemoryModel is not supported\n";
}
if (enabling->vulkanMemoryModelDeviceScope && !supported.vulkanMemoryModelDeviceScope) {
ss << "VkPhysicalDeviceVulkanMemoryModelFeatures::vulkanMemoryModelDeviceScope is not supported\n";
}
if (enabling->vulkanMemoryModelAvailabilityVisibilityChains &&
!supported.vulkanMemoryModelAvailabilityVisibilityChains) {
ss << "VkPhysicalDeviceVulkanMemoryModelFeatures::vulkanMemoryModelAvailabilityVisibilityChains is not "
"supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: {
VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *enabling =
reinterpret_cast<const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *>(current);
if (enabling->workgroupMemoryExplicitLayout && !supported.workgroupMemoryExplicitLayout) {
ss << "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::workgroupMemoryExplicitLayout is not "
"supported\n";
}
if (enabling->workgroupMemoryExplicitLayoutScalarBlockLayout &&
!supported.workgroupMemoryExplicitLayoutScalarBlockLayout) {
ss << "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::"
"workgroupMemoryExplicitLayoutScalarBlockLayout is not supported\n";
}
if (enabling->workgroupMemoryExplicitLayout8BitAccess && !supported.workgroupMemoryExplicitLayout8BitAccess) {
ss << "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::workgroupMemoryExplicitLayout8BitAccess is "
"not supported\n";
}
if (enabling->workgroupMemoryExplicitLayout16BitAccess && !supported.workgroupMemoryExplicitLayout16BitAccess) {
ss << "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::workgroupMemoryExplicitLayout16BitAccess is "
"not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: {
VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *>(current);
if (enabling->ycbcr2plane444Formats && !supported.ycbcr2plane444Formats) {
ss << "VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT::ycbcr2plane444Formats is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM: {
VkPhysicalDeviceYcbcrDegammaFeaturesQCOM supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM *enabling =
reinterpret_cast<const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM *>(current);
if (enabling->ycbcrDegamma && !supported.ycbcrDegamma) {
ss << "VkPhysicalDeviceYcbcrDegammaFeaturesQCOM::ycbcrDegamma is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: {
VkPhysicalDeviceYcbcrImageArraysFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *>(current);
if (enabling->ycbcrImageArrays && !supported.ycbcrImageArrays) {
ss << "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT::ycbcrImageArrays is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT: {
VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *enabling =
reinterpret_cast<const VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *>(current);
if (enabling->zeroInitializeDeviceMemory && !supported.zeroInitializeDeviceMemory) {
ss << "VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT::zeroInitializeDeviceMemory is not supported\n";
}
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: {
VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures supported = vku::InitStructHelper();
features_2.pNext = &supported;
DispatchGetPhysicalDeviceFeatures2(gpu, &features_2);
const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *enabling =
reinterpret_cast<const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *>(current);
if (enabling->shaderZeroInitializeWorkgroupMemory && !supported.shaderZeroInitializeWorkgroupMemory) {
ss << "VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures::shaderZeroInitializeWorkgroupMemory is not "
"supported\n";
}
break;
}
default:
break;
}
}
Location loc(vvl::Func::vkCreateDevice);
LogWarning("WARNING-vkCreateDevice-FeatureNotPresent", instance, loc, "%s", ss.str().c_str());
} // ReportErrorFeatureNotPresent
} // namespace dispatch
} // namespace vvl