Skip to content

Commit 49840a8

Browse files
committed
Vulkan: print reason on error
Ref: fastfetch-cli#976
1 parent 44257b7 commit 49840a8

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

src/detection/vulkan/vulkan.c

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)