@@ -4423,8 +4423,8 @@ static void ggml_vk_print_gpu_info(size_t idx) {
4423
4423
4424
4424
static bool ggml_vk_instance_validation_ext_available();
4425
4425
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
4426
-
4427
4426
static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
4427
+ static bool ggml_vk_device_is_supported(const vk::PhysicalDevice & vkdev);
4428
4428
4429
4429
static void ggml_vk_instance_init() {
4430
4430
if (vk_instance_initialized) {
@@ -4540,7 +4540,7 @@ static void ggml_vk_instance_init() {
4540
4540
new_driver.pNext = &new_id;
4541
4541
devices[i].getProperties2(&new_props);
4542
4542
4543
- if (new_props.properties.deviceType == vk::PhysicalDeviceType::eDiscreteGpu || new_props.properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu) {
4543
+ if (( new_props.properties.deviceType == vk::PhysicalDeviceType::eDiscreteGpu || new_props.properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu) && ggml_vk_device_is_supported(devices[i]) ) {
4544
4544
// Check if there are two physical devices corresponding to the same GPU
4545
4545
auto old_device = std::find_if(
4546
4546
vk_instance.device_indices.begin(),
@@ -12738,6 +12738,20 @@ static bool ggml_vk_instance_debug_utils_ext_available(
12738
12738
UNUSED(instance_extensions);
12739
12739
}
12740
12740
12741
+ static bool ggml_vk_device_is_supported(const vk::PhysicalDevice & vkdev) {
12742
+ VkPhysicalDeviceFeatures2 device_features2;
12743
+ device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
12744
+
12745
+ VkPhysicalDeviceVulkan11Features vk11_features;
12746
+ vk11_features.pNext = nullptr;
12747
+ vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
12748
+ device_features2.pNext = &vk11_features;
12749
+
12750
+ vkGetPhysicalDeviceFeatures2(vkdev, &device_features2);
12751
+
12752
+ return vk11_features.storageBuffer16BitAccess;
12753
+ }
12754
+
12741
12755
static bool ggml_vk_khr_cooperative_matrix_support(const vk::PhysicalDeviceProperties& props, const vk::PhysicalDeviceDriverProperties& driver_props, vk_device_architecture arch) {
12742
12756
switch (props.vendorID) {
12743
12757
case VK_VENDOR_ID_INTEL:
0 commit comments