@@ -932,8 +932,10 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
932932 supports_.vulkan_memory_model = true ;
933933 } else if (ext == VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME) {
934934 supports_.zero_initialize_workgroup_memory = true ;
935+ #ifdef VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME
935936 } else if (ext == VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME) {
936937 supports_.shader_long_vector = true ;
938+ #endif
937939 }
938940 }
939941
@@ -954,7 +956,9 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
954956 VkPhysicalDeviceVulkanMemoryModelFeatures memory_model_structure_features{};
955957 VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
956958 zero_initialize_workgroup_memory_features{};
959+ #ifdef VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME
957960 VkPhysicalDeviceShaderLongVectorFeaturesEXT shader_long_vector_features{};
961+ #endif
958962 VkPhysicalDeviceAccelerationStructureFeaturesKHR
959963 acceleration_structure_features = {};
960964 VkPhysicalDeviceBufferDeviceAddressFeatures buffer_device_address_features =
@@ -995,10 +999,12 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
995999 zero_initialize_workgroup_memory_features.pNext = next_ptr;
9961000 next_ptr = &zero_initialize_workgroup_memory_features;
9971001
1002+ #ifdef VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME
9981003 shader_long_vector_features.sType =
9991004 VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT;
10001005 shader_long_vector_features.pNext = next_ptr;
10011006 next_ptr = &shader_long_vector_features;
1007+ #endif
10021008
10031009 shader_subgroup_extended_types_features.sType =
10041010 // NOLINTNEXTLINE(whitespace/line_length)
@@ -1083,20 +1089,26 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
10831089 continue ;
10841090 }
10851091
1092+ const bool long_vector_supported =
1093+ #ifdef VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME
1094+ shader_long_vector_features.longVector == VK_TRUE;
1095+ #else
1096+ false ;
1097+ #endif
1098+
10861099 if ((feature == kVariablePointers &&
10871100 variable_pointers_features.variablePointers == VK_FALSE) ||
1088- (feature == kVulkanMemoryModel_vulkanMemoryModel &&
1089- memory_model_structure_features.vulkanMemoryModel == VK_FALSE) ||
1090- (feature == kVulkanMemoryModel_vulkanMemoryModelDeviceScope &&
1091- memory_model_structure_features.vulkanMemoryModelDeviceScope
1092- == VK_FALSE) ||
1093- (feature ==
1094- // NOLINTNEXTLINE(whitespace/line_length)
1095- kZeroInitializeWorkgroupMemory_shaderZeroInitializeWorkgroupMemory &&
1096- zero_initialize_workgroup_memory_features
1097- .shaderZeroInitializeWorkgroupMemory == VK_FALSE) ||
1098- (feature == kShaderLongVector_longVector &&
1099- shader_long_vector_features.longVector == VK_FALSE) ||
1101+ (feature == kVulkanMemoryModel_vulkanMemoryModel &&
1102+ memory_model_structure_features.vulkanMemoryModel == VK_FALSE) ||
1103+ (feature == kVulkanMemoryModel_vulkanMemoryModelDeviceScope &&
1104+ memory_model_structure_features.vulkanMemoryModelDeviceScope ==
1105+ VK_FALSE) ||
1106+ (feature ==
1107+ // NOLINTNEXTLINE(whitespace/line_length)
1108+ kZeroInitializeWorkgroupMemory_shaderZeroInitializeWorkgroupMemory &&
1109+ zero_initialize_workgroup_memory_features
1110+ .shaderZeroInitializeWorkgroupMemory == VK_FALSE) ||
1111+ (feature == kShaderLongVector_longVector && !long_vector_supported) ||
11001112 (feature == kVariablePointersStorageBuffer &&
11011113 variable_pointers_features.variablePointersStorageBuffer ==
11021114 VK_FALSE) ||
@@ -1343,13 +1355,17 @@ amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2(
13431355 .shaderZeroInitializeWorkgroupMemory = VK_TRUE;
13441356 }
13451357 } else if (StartsWith (feature, " ShaderLongVectorFeaturesEXT." )) {
1358+ #ifdef VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME
13461359 init_feature (
13471360 supports_.shader_long_vector , features_.shader_long_vector ,
13481361 VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT,
13491362 VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME);
13501363 if (feature == kShaderLongVector_longVector ) {
13511364 features_.shader_long_vector .longVector = VK_TRUE;
13521365 }
1366+ #else
1367+ return amber::Result (" Vulkan instance does not support " + feature);
1368+ #endif
13531369 } else if (StartsWith (feature, " Float16Int8Features." )) {
13541370 init_feature (supports_.shader_float16_int8 , features_.float16_int8 ,
13551371 VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR,
0 commit comments