|
@@ -122,10 +122,22 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count)
|
|
|
err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus);
|
|
|
check_vk_result(err);
|
|
|
|
|
|
- // If a number >1 of GPUs got reported, you should find the best fit GPU for your purpose
|
|
|
- // e.g. VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU if available, or with the greatest memory available, etc.
|
|
|
- // for sake of simplicity we'll just take the first one, assuming it has a graphics queue family.
|
|
|
- g_PhysicalDevice = gpus[0];
|
|
|
+ // If a number >1 of GPUs got reported, find discrete GPU if present, or use first one available. This covers
|
|
|
+ // most common cases (multi-gpu/integrated+dedicated graphics). Handling more complicated setups (multiple
|
|
|
+ // dedicated GPUs) is out of scope of this sample.
|
|
|
+ int use_gpu = 0;
|
|
|
+ for (int i = 0; i < (int)gpu_count; i++)
|
|
|
+ {
|
|
|
+ VkPhysicalDeviceProperties properties;
|
|
|
+ vkGetPhysicalDeviceProperties(gpus[i], &properties);
|
|
|
+ if (properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
|
|
+ {
|
|
|
+ use_gpu = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ g_PhysicalDevice = gpus[use_gpu];
|
|
|
free(gpus);
|
|
|
}
|
|
|
|