浏览代码

Merge pull request #49506 from akien-mga/vulkan_prefer_discrete_gpu

Prefer discrete GPU over integrated one
Rémi Verschelde 4 年之前
父节点
当前提交
ba82626c2c
共有 1 个文件被更改,包括 18 次插入1 次删除
  1. 18 1
      drivers/vulkan/vulkan_context.cpp

+ 18 - 1
drivers/vulkan/vulkan_context.cpp

@@ -694,8 +694,25 @@ Error VulkanContext::_create_physical_device() {
 		free(physical_devices);
 		free(physical_devices);
 		ERR_FAIL_V(ERR_CANT_CREATE);
 		ERR_FAIL_V(ERR_CANT_CREATE);
 	}
 	}
-	/* for now, just grab the first physical device */
+
+	// TODO: At least on Linux Laptops integrated GPUs fail with Vulkan in many instances.
+	//   The device should really be a preference, but for now choosing a discrete GPU over the
+	//   integrated one is better than the default.
+
+	// Default to first device
 	uint32_t device_index = 0;
 	uint32_t device_index = 0;
+
+	for (uint32_t i = 0; i < gpu_count; ++i) {
+		VkPhysicalDeviceProperties props;
+		vkGetPhysicalDeviceProperties(physical_devices[i], &props);
+
+		if (props.deviceType == VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) {
+			// Prefer discrete GPU.
+			device_index = i;
+			break;
+		}
+	}
+
 	gpu = physical_devices[device_index];
 	gpu = physical_devices[device_index];
 	free(physical_devices);
 	free(physical_devices);