1414VulkanProbe::VulkanProbe () {
1515 available_ = createInstance () && queryDevice ();
1616
17+ if (!available_) {
18+ cleanup ();
19+ }
20+
1721 if (available_) {
1822 LOGI (" Vulkan available: %s (API %u.%u.%u, driver %u)" ,
1923 deviceInfo_.deviceName .c_str (),
@@ -65,7 +69,11 @@ bool VulkanProbe::queryDevice() {
6569 }
6670
6771 std::vector<VkPhysicalDevice> devices (deviceCount);
68- vkEnumeratePhysicalDevices (instance_, &deviceCount, devices.data ());
72+
73+ if (vkEnumeratePhysicalDevices (instance_, &deviceCount, devices.data ()) != VK_SUCCESS || deviceCount == 0 ) {
74+ LOGE (" Failed to enumerate Vulkan physical devices" );
75+ return false ;
76+ }
6977
7078 // Pick the first discrete GPU, or fall back to the first device.
7179 VkPhysicalDevice selected = devices[0 ];
@@ -90,10 +98,18 @@ bool VulkanProbe::queryDevice() {
9098
9199 // Check for swapchain extension support.
92100 uint32_t extCount = 0 ;
93- vkEnumerateDeviceExtensionProperties (selected, nullptr , &extCount, nullptr );
101+
102+ if (vkEnumerateDeviceExtensionProperties (selected, nullptr , &extCount, nullptr ) != VK_SUCCESS || extCount == 0 ) {
103+ deviceInfo_.supportsSwapchain = false ;
104+ return true ;
105+ }
94106
95107 std::vector<VkExtensionProperties> extensions (extCount);
96- vkEnumerateDeviceExtensionProperties (selected, nullptr , &extCount, extensions.data ());
108+
109+ if (vkEnumerateDeviceExtensionProperties (selected, nullptr , &extCount, extensions.data ()) != VK_SUCCESS ) {
110+ deviceInfo_.supportsSwapchain = false ;
111+ return true ;
112+ }
97113
98114 deviceInfo_.supportsSwapchain = false ;
99115
0 commit comments