Vulkan: print detailed reason of why failing

instead of the general message `Failed to detect vulkan`
This commit is contained in:
李通洲
2022-09-15 13:32:08 +08:00
parent 8fdbadfbb2
commit f9695f4148
4 changed files with 19 additions and 13 deletions
+13 -11
View File
@@ -33,14 +33,14 @@ static void applyDriverName(VkPhysicalDeviceDriverProperties* properties, FFstrb
ffStrbufAppendC(result, ']');
}
static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
static const char* detectVulkan(const FFinstance* instance, FFVulkanResult* result)
{
FF_LIBRARY_LOAD(vulkan, instance->config.libVulkan, , "libvulkan"FF_LIBRARY_EXTENSION, 2)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetInstanceProcAddr,)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkCreateInstance,)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkDestroyInstance,)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkEnumeratePhysicalDevices,)
FF_LIBRARY_LOAD_SYMBOL(vulkan, vkGetPhysicalDeviceProperties,)
FF_LIBRARY_LOAD(vulkan, instance->config.libVulkan, "dlopen libvulkan"FF_LIBRARY_EXTENSION " failed", "libvulkan"FF_LIBRARY_EXTENSION, 2)
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkGetInstanceProcAddr)
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkCreateInstance)
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkDestroyInstance)
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkEnumeratePhysicalDevices)
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(vulkan, vkGetPhysicalDeviceProperties)
//Some drivers (nvdc) print messages to stdout
//and thats the best way i found to disable that
@@ -102,7 +102,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
{
dlclose(vulkan);
ffSuppressIO(false);
return;
return "ffvkCreateInstance() failed";
}
@@ -117,7 +117,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
ffvkDestroyInstance(vkInstance, NULL);
dlclose(vulkan);
ffSuppressIO(false);
return;
return "ffvkEnumeratePhysicalDevices() failed";
}
VkPhysicalDevice* physicalDevices = malloc(sizeof(VkPhysicalDevice) * physicalDeviceCount);
@@ -127,7 +127,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
ffvkDestroyInstance(vkInstance, NULL);
dlclose(vulkan);
ffSuppressIO(false);
return;
return "ffvkEnumeratePhysicalDevices() failed";
}
PFN_vkGetPhysicalDeviceProperties2 ffvkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2) ffvkGetInstanceProcAddr(vkInstance, "vkGetPhysicalDeviceProperties2");
@@ -208,6 +208,7 @@ static void detectVulkan(const FFinstance* instance, FFVulkanResult* result)
ffvkDestroyInstance(vkInstance, NULL);
dlclose(vulkan);
ffSuppressIO(false);
return NULL;
}
#endif
@@ -232,9 +233,10 @@ const FFVulkanResult* ffDetectVulkan(const FFinstance* instance)
ffListInit(&result.gpus, sizeof(FFGPUResult));
#ifdef FF_HAVE_VULKAN
detectVulkan(instance, &result);
result.error = detectVulkan(instance, &result);
#else
FF_UNUSED(instance);
result.error = "fastfetch was compiled without vulkan support";
#endif
pthread_mutex_unlock(&mutex);
+1
View File
@@ -11,6 +11,7 @@ typedef struct FFVulkanResult
FFstrbuf apiVersion;
FFstrbuf conformanceVersion;
FFlist gpus; //List of FFGPUResult, see detection/gpu/gpu.h
const char* error;
} FFVulkanResult;
const FFVulkanResult* ffDetectVulkan(const FFinstance* instance);