bool fp16;
bool bf16;
bool pipeline_robustness;
+ bool memory_priority;
vk::Device device;
uint32_t vendor_id;
vk::DriverId driver_id;
vk::PhysicalDeviceMemoryProperties mem_props = device->physical_device.getMemoryProperties();
- const vk::MemoryAllocateFlagsInfo mem_flags_info { mem_flags };
+ const vk::MemoryPriorityAllocateInfoEXT mem_priority_info { 1.0f };
+
+ vk::MemoryAllocateFlagsInfo mem_flags_info { mem_flags };
+
+ if (device->memory_priority) {
+ mem_flags_info.setPNext(&mem_priority_info);
+ }
for (auto it = req_flags_list.begin(); it != req_flags_list.end(); it++) {
const auto & req_flags = *it;
#endif
} else if (strcmp("VK_KHR_pipeline_executable_properties", properties.extensionName) == 0) {
pipeline_executable_properties_support = true;
+ } else if (strcmp("VK_EXT_memory_priority", properties.extensionName) == 0 &&
+ getenv("GGML_VK_ENABLE_MEMORY_PRIORITY")) {
+ device->memory_priority = true;
}
}
device_extensions.push_back("VK_EXT_pipeline_robustness");
}
+ VkPhysicalDeviceMemoryPriorityFeaturesEXT memory_priority_features;
+ memory_priority_features.pNext = nullptr;
+ memory_priority_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT;
+ memory_priority_features.memoryPriority = VK_FALSE;
+ if (device->memory_priority) {
+ last_struct->pNext = (VkBaseOutStructure *)&memory_priority_features;
+ last_struct = (VkBaseOutStructure *)&memory_priority_features;
+ device_extensions.push_back("VK_EXT_memory_priority");
+ }
+
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT subgroup_size_control_features;
subgroup_size_control_features.pNext = nullptr;
subgroup_size_control_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT;