@@ -76,7 +76,7 @@ static const char* detectVulkan(FFVulkanResult* result)
7676 );
7777
7878 VkInstance vkInstance ;
79- if ( ffvkCreateInstance (& (VkInstanceCreateInfo ) {
79+ VkResult res = ffvkCreateInstance (& (VkInstanceCreateInfo ) {
8080 .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO ,
8181 .pNext = NULL ,
8282 .pApplicationInfo = & (VkApplicationInfo ) {
@@ -95,8 +95,27 @@ static const char* detectVulkan(FFVulkanResult* result)
9595 .enabledExtensionCount = 0 ,
9696 .ppEnabledExtensionNames = NULL ,
9797 .flags = 0
98- }, NULL , & vkInstance ) != VK_SUCCESS )
99- return "ffvkCreateInstance() failed" ;
98+ }, NULL , & vkInstance );
99+ if (res != VK_SUCCESS )
100+ {
101+ switch (res )
102+ {
103+ case VK_ERROR_OUT_OF_HOST_MEMORY :
104+ return "ffvkCreateInstance() failed: VK_ERROR_OUT_OF_HOST_MEMORY" ;
105+ case VK_ERROR_OUT_OF_DEVICE_MEMORY :
106+ return "ffvkCreateInstance() failed: VK_ERROR_OUT_OF_DEVICE_MEMORY" ;
107+ case VK_ERROR_INITIALIZATION_FAILED :
108+ return "ffvkCreateInstance() failed: VK_ERROR_INITIALIZATION_FAILED" ;
109+ case VK_ERROR_LAYER_NOT_PRESENT :
110+ return "ffvkCreateInstance() failed: VK_ERROR_LAYER_NOT_PRESENT" ;
111+ case VK_ERROR_EXTENSION_NOT_PRESENT :
112+ return "ffvkCreateInstance() failed: VK_ERROR_EXTENSION_NOT_PRESENT" ;
113+ case VK_ERROR_INCOMPATIBLE_DRIVER :
114+ return "ffvkCreateInstance() failed: VK_ERROR_INCOMPATIBLE_DRIVER" ;
115+ default :
116+ return "ffvkCreateInstance() failed: unknown error" ;
117+ }
118+ }
100119
101120 //if instance creation succeeded, but vkEnumerateInstanceVersion didn't, this means we are running against a vulkan 1.0 implementation
102121 //explicitly set this version, if no device is found, so we still have at least this info
@@ -105,10 +124,23 @@ static const char* detectVulkan(FFVulkanResult* result)
105124
106125 VkPhysicalDevice physicalDevices [128 ];
107126 uint32_t physicalDeviceCount = (uint32_t ) (sizeof (physicalDevices ) / sizeof (* physicalDevices ));
108- if (ffvkEnumeratePhysicalDevices (vkInstance , & physicalDeviceCount , physicalDevices ) != VK_SUCCESS )
127+ res = ffvkEnumeratePhysicalDevices (vkInstance , & physicalDeviceCount , physicalDevices );
128+ if (res != VK_SUCCESS )
109129 {
110130 ffvkDestroyInstance (vkInstance , NULL );
111- return "ffvkEnumeratePhysicalDevices() failed" ;
131+ switch (res )
132+ {
133+ case VK_ERROR_OUT_OF_HOST_MEMORY :
134+ return "ffvkEnumeratePhysicalDevices() failed: VK_ERROR_OUT_OF_HOST_MEMORY" ;
135+ case VK_ERROR_OUT_OF_DEVICE_MEMORY :
136+ return "ffvkEnumeratePhysicalDevices() failed: VK_ERROR_OUT_OF_DEVICE_MEMORY" ;
137+ case VK_ERROR_INITIALIZATION_FAILED :
138+ return "ffvkEnumeratePhysicalDevices() failed: VK_ERROR_INITIALIZATION_FAILED" ;
139+ case VK_INCOMPLETE :
140+ return "ffvkEnumeratePhysicalDevices() failed: VK_INCOMPLETE" ;
141+ default :
142+ return "ffvkEnumeratePhysicalDevices() failed" ;
143+ }
112144 }
113145
114146 PFN_vkGetPhysicalDeviceProperties ffvkGetPhysicalDeviceProperties = NULL ;
0 commit comments