mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Examples: Vulkan: Update GPU selection to pick discrete GPU if available, or use first GPU otherwise. (#4012)
Fixes examples failing on optimus laptops with integrated graphics not supporting Vulkan.
This commit is contained in:
		@@ -65,6 +65,7 @@ Other Changes:
 | 
				
			|||||||
- Backends: OpenGL3: Don't try to read GL_CLIP_ORIGIN unless we're OpenGL 4.5. (#3998, #2366, #2186) [@s7jones]
 | 
					- Backends: OpenGL3: Don't try to read GL_CLIP_ORIGIN unless we're OpenGL 4.5. (#3998, #2366, #2186) [@s7jones]
 | 
				
			||||||
- Examples: Add OpenGL ES 2.0 support to modern GL examples. (#2837, #3951) [@lethal-guitar, @hinxx]
 | 
					- Examples: Add OpenGL ES 2.0 support to modern GL examples. (#2837, #3951) [@lethal-guitar, @hinxx]
 | 
				
			||||||
- Examples: Vulkan: Rebuild swapchain on VK_SUBOPTIMAL_KHR. (#3881)
 | 
					- Examples: Vulkan: Rebuild swapchain on VK_SUBOPTIMAL_KHR. (#3881)
 | 
				
			||||||
 | 
					- Examples: Vulkan: Prefer using discrete GPU if there are more than one available. (#4012) [@rokups]
 | 
				
			||||||
- Examples: SDL2: Link with shell32.lib required by SDL2main.lib since SDL 2.0.12. [#3988]
 | 
					- Examples: SDL2: Link with shell32.lib required by SDL2main.lib since SDL 2.0.12. [#3988]
 | 
				
			||||||
- Docs: Improvements to minor mistakes in documentation comments (#3923) [@ANF-Studios]
 | 
					- Docs: Improvements to minor mistakes in documentation comments (#3923) [@ANF-Studios]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -122,10 +122,22 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count)
 | 
				
			|||||||
        err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus);
 | 
					        err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus);
 | 
				
			||||||
        check_vk_result(err);
 | 
					        check_vk_result(err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // If a number >1 of GPUs got reported, you should find the best fit GPU for your purpose
 | 
					        // If a number >1 of GPUs got reported, find discrete GPU if present, or use first one available. This covers
 | 
				
			||||||
        // e.g. VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU if available, or with the greatest memory available, etc.
 | 
					        // most common cases (multi-gpu/integrated+dedicated graphics). Handling more complicated setups (multiple
 | 
				
			||||||
        // for sake of simplicity we'll just take the first one, assuming it has a graphics queue family.
 | 
					        // dedicated GPUs) is out of scope of this sample.
 | 
				
			||||||
        g_PhysicalDevice = gpus[0];
 | 
					        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);
 | 
					        free(gpus);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,10 +114,22 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count)
 | 
				
			|||||||
        err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus);
 | 
					        err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus);
 | 
				
			||||||
        check_vk_result(err);
 | 
					        check_vk_result(err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // If a number >1 of GPUs got reported, you should find the best fit GPU for your purpose
 | 
					        // If a number >1 of GPUs got reported, find discrete GPU if present, or use first one available. This covers
 | 
				
			||||||
        // e.g. VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU if available, or with the greatest memory available, etc.
 | 
					        // most common cases (multi-gpu/integrated+dedicated graphics). Handling more complicated setups (multiple
 | 
				
			||||||
        // for sake of simplicity we'll just take the first one, assuming it has a graphics queue family.
 | 
					        // dedicated GPUs) is out of scope of this sample.
 | 
				
			||||||
        g_PhysicalDevice = gpus[0];
 | 
					        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);
 | 
					        free(gpus);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user