@@ -66,6 +66,11 @@ const char k16BitStorage_PushConstant[] =
6666const char k16BitStorage_InputOutput[] =
6767 " Storage16BitFeatures.storageInputOutput16" ;
6868
69+ const char kVulkanMemoryModel_vulkanMemoryModel [] =
70+ " VulkanMemoryModelFeatures.vulkanMemoryModel" ;
71+ const char kVulkanMemoryModel_vulkanMemoryModelDeviceScope [] =
72+ " VulkanMemoryModelFeatures.vulkanMemoryModelDeviceScope" ;
73+
6974const char kSubgroupSizeControl [] = " SubgroupSizeControl.subgroupSizeControl" ;
7075const char kComputeFullSubgroups [] = " SubgroupSizeControl.computeFullSubgroups" ;
7176
@@ -887,25 +892,25 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
887892 return amber::Result (" Device does not support all required extensions" );
888893 }
889894 for (const auto & ext : vk_.available_device_extensions ) {
890- if (ext == " VK_KHR_shader_float16_int8 " ) {
895+ if (ext == VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME ) {
891896 supports_.shader_float16_int8 = true ;
892- } else if (ext == " VK_KHR_8bit_storage " ) {
897+ } else if (ext == VK_KHR_8BIT_STORAGE_EXTENSION_NAME ) {
893898 supports_.shader_8bit_storage = true ;
894- } else if (ext == " VK_KHR_16bit_storage " ) {
899+ } else if (ext == VK_KHR_16BIT_STORAGE_EXTENSION_NAME ) {
895900 supports_.shader_16bit_storage = true ;
896- } else if (ext == " VK_EXT_subgroup_size_control " ) {
901+ } else if (ext == VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME ) {
897902 supports_.subgroup_size_control = true ;
898- } else if (ext == " VK_EXT_depth_clamp_zero_one " ) {
903+ } else if (ext == VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME ) {
899904 supports_.depth_clamp_zero_one = true ;
900- } else if (ext == " VK_KHR_shader_subgroup_extended_types " ) {
905+ } else if (ext == VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME ) {
901906 supports_.shader_subgroup_extended_types = true ;
902- } else if (ext == " VK_KHR_variable_pointers " ) {
907+ } else if (ext == VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME ) {
903908 supports_.variable_pointers = true ;
904- } else if (ext == " VK_KHR_acceleration_structure " ) {
909+ } else if (ext == VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME ) {
905910 supports_.acceleration_structure = true ;
906- } else if (ext == " VK_KHR_buffer_device_address " ) {
911+ } else if (ext == VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME ) {
907912 supports_.buffer_device_address = true ;
908- } else if (ext == " VK_KHR_ray_tracing_pipeline " ) {
913+ } else if (ext == VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME ) {
909914 supports_.ray_tracing_pipeline = true ;
910915 } else if (ext == VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME) {
911916 supports_.descriptor_indexing = true ;
@@ -915,6 +920,8 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
915920 supports_.spirv_1_4 = true ;
916921 } else if (ext == VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME) {
917922 supports_.shader_float_controls = true ;
923+ } else if (ext == VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME) {
924+ supports_.vulkan_memory_model = true ;
918925 }
919926 }
920927
@@ -932,6 +939,7 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
932939 VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_features = {};
933940 VkPhysicalDevice8BitStorageFeaturesKHR storage_8bit_features = {};
934941 VkPhysicalDevice16BitStorageFeaturesKHR storage_16bit_features = {};
942+ VkPhysicalDeviceVulkanMemoryModelFeatures memory_model_structure_features{};
935943 VkPhysicalDeviceAccelerationStructureFeaturesKHR
936944 acceleration_structure_features = {};
937945 VkPhysicalDeviceBufferDeviceAddressFeatures buffer_device_address_features =
@@ -961,6 +969,11 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
961969 variable_pointers_features.pNext = next_ptr;
962970 next_ptr = &variable_pointers_features;
963971
972+ memory_model_structure_features.sType =
973+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR;
974+ memory_model_structure_features.pNext = next_ptr;
975+ next_ptr = &memory_model_structure_features;
976+
964977 shader_subgroup_extended_types_features.sType =
965978 // NOLINTNEXTLINE(whitespace/line_length)
966979 VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
@@ -1046,6 +1059,11 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
10461059
10471060 if ((feature == kVariablePointers &&
10481061 variable_pointers_features.variablePointers == VK_FALSE) ||
1062+ (feature == kVulkanMemoryModel_vulkanMemoryModel &&
1063+ memory_model_structure_features.vulkanMemoryModel == VK_FALSE) ||
1064+ (feature == kVulkanMemoryModel_vulkanMemoryModelDeviceScope &&
1065+ memory_model_structure_features.vulkanMemoryModelDeviceScope
1066+ == VK_FALSE) ||
10491067 (feature == kVariablePointersStorageBuffer &&
10501068 variable_pointers_features.variablePointersStorageBuffer ==
10511069 VK_FALSE) ||
@@ -1268,6 +1286,16 @@ amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2(
12681286 } else if (feature == kVariablePointersStorageBuffer ) {
12691287 features_.variable_pointers .variablePointersStorageBuffer = VK_TRUE;
12701288 }
1289+ } else if (StartsWith (feature, " VulkanMemoryModelFeatures." )) {
1290+ init_feature (
1291+ supports_.vulkan_memory_model , features_.memory_model_structure ,
1292+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR,
1293+ VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME);
1294+ if (feature == kVulkanMemoryModel_vulkanMemoryModel ) {
1295+ features_.memory_model_structure .vulkanMemoryModel = VK_TRUE;
1296+ } else if (feature == kVulkanMemoryModel_vulkanMemoryModelDeviceScope ) {
1297+ features_.memory_model_structure .vulkanMemoryModelDeviceScope = VK_TRUE;
1298+ }
12711299 } else if (StartsWith (feature, " Float16Int8Features." )) {
12721300 init_feature (supports_.shader_float16_int8 , features_.float16_int8 ,
12731301 VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR,
0 commit comments