diff --git a/Common/GPU/Vulkan/VulkanLoader.cpp b/Common/GPU/Vulkan/VulkanLoader.cpp index 3717aad209cc..153c5b73f706 100644 --- a/Common/GPU/Vulkan/VulkanLoader.cpp +++ b/Common/GPU/Vulkan/VulkanLoader.cpp @@ -288,7 +288,7 @@ static const char * const so_names[] = { }; #endif -static VulkanLibraryHandle VulkanLoadLibrary(const char *logname) { +static VulkanLibraryHandle VulkanLoadLibrary(std::string *errorString) { #if PPSSPP_PLATFORM(SWITCH) // Always unavailable, for now. return nullptr; @@ -329,7 +329,7 @@ static VulkanLibraryHandle VulkanLoadLibrary(const char *logname) { for (int i = 0; i < ARRAY_SIZE(so_names); i++) { lib = dlopen(so_names[i], RTLD_NOW | RTLD_LOCAL); if (lib) { - INFO_LOG(G3D, "%s: Library loaded ('%s')", logname, so_names[i]); + INFO_LOG(G3D, "Vulkan library loaded with AdrenoTools ('%s')", so_names[i]); break; } } @@ -378,9 +378,10 @@ bool VulkanMayBeAvailable() { } INFO_LOG(G3D, "VulkanMayBeAvailable: Device allowed ('%s')", name.c_str()); - VulkanLibraryHandle lib = VulkanLoadLibrary("VulkanMayBeAvailable"); + std::string errorStr; + VulkanLibraryHandle lib = VulkanLoadLibrary(&errorStr); if (!lib) { - INFO_LOG(G3D, "Vulkan loader: Library not available"); + INFO_LOG(G3D, "Vulkan loader: Library not available: %s", errorStr.c_str()); g_vulkanAvailabilityChecked = true; g_vulkanMayBeAvailable = false; return false; @@ -545,9 +546,9 @@ bool VulkanMayBeAvailable() { return g_vulkanMayBeAvailable; } -bool VulkanLoad() { +bool VulkanLoad(std::string *errorStr) { if (!vulkanLibrary) { - vulkanLibrary = VulkanLoadLibrary("VulkanLoad"); + vulkanLibrary = VulkanLoadLibrary(errorStr); if (!vulkanLibrary) { return false; } @@ -565,7 +566,8 @@ bool VulkanLoad() { INFO_LOG(G3D, "VulkanLoad: Base functions loaded."); return true; } else { - ERROR_LOG(G3D, "VulkanLoad: Failed to load Vulkan base functions."); + *errorStr = "Failed to load Vulkan base functions"; + ERROR_LOG(G3D, "VulkanLoad: %s", errorStr->c_str()); VulkanFreeLibrary(vulkanLibrary); return false; } diff --git a/Common/GPU/Vulkan/VulkanLoader.h b/Common/GPU/Vulkan/VulkanLoader.h index 0e631ba718d2..a08c232daa51 100644 --- a/Common/GPU/Vulkan/VulkanLoader.h +++ b/Common/GPU/Vulkan/VulkanLoader.h @@ -32,6 +32,7 @@ #define VK_NO_PROTOTYPES #include "ext/vulkan/vulkan.h" +#include // Hacky X11 header workaround #ifdef Opposite @@ -266,7 +267,7 @@ struct VulkanExtensions { bool VulkanMayBeAvailable(); void VulkanSetAvailable(bool available); -bool VulkanLoad(); +bool VulkanLoad(std::string *errorStr); void VulkanLoadInstanceFunctions(VkInstance instance, const VulkanExtensions &enabledExtensions); void VulkanLoadDeviceFunctions(VkDevice device, const VulkanExtensions &enabledExtensions); void VulkanFree(); diff --git a/SDL/SDLVulkanGraphicsContext.cpp b/SDL/SDLVulkanGraphicsContext.cpp index c15eb2824566..9300afa8d6e3 100644 --- a/SDL/SDLVulkanGraphicsContext.cpp +++ b/SDL/SDLVulkanGraphicsContext.cpp @@ -56,8 +56,10 @@ bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int w, in Version gitVer(PPSSPP_GIT_VERSION); - if (!VulkanLoad()) { - *error_message = "Failed to load Vulkan driver library"; + std::string errorStr; + if (!VulkanLoad(&errorStr)) { + *error_message = "Failed to load Vulkan driver library: "; + (*error_message) += errorStr; return false; } diff --git a/Windows/GPU/WindowsVulkanContext.cpp b/Windows/GPU/WindowsVulkanContext.cpp index 71347e8e5554..13ee5f1bf14c 100644 --- a/Windows/GPU/WindowsVulkanContext.cpp +++ b/Windows/GPU/WindowsVulkanContext.cpp @@ -92,8 +92,10 @@ bool WindowsVulkanContext::Init(HINSTANCE hInst, HWND hWnd, std::string *error_m Version gitVer(PPSSPP_GIT_VERSION); - if (!VulkanLoad()) { - *error_message = "Failed to load Vulkan driver library"; + std::string errorStr; + if (!VulkanLoad(&errorStr)) { + *error_message = "Failed to load Vulkan driver library: "; + (*error_message) += errorStr; return false; } diff --git a/android/jni/AndroidVulkanContext.cpp b/android/jni/AndroidVulkanContext.cpp index 319f41346b84..a700ab3141b7 100644 --- a/android/jni/AndroidVulkanContext.cpp +++ b/android/jni/AndroidVulkanContext.cpp @@ -52,8 +52,9 @@ bool AndroidVulkanContext::InitAPI() { INFO_LOG(G3D, "Creating Vulkan context"); Version gitVer(PPSSPP_GIT_VERSION); - if (!VulkanLoad()) { - ERROR_LOG(G3D, "Failed to load Vulkan driver library"); + std::string errorStr; + if (!VulkanLoad(&errorStr)) { + ERROR_LOG(G3D, "Failed to load Vulkan driver library: %s", errorStr.c_str()); state_ = GraphicsContextState::FAILED_INIT; return false; } diff --git a/libretro/LibretroVulkanContext.cpp b/libretro/LibretroVulkanContext.cpp index ccce6c9ad5e3..125563f0e3da 100644 --- a/libretro/LibretroVulkanContext.cpp +++ b/libretro/LibretroVulkanContext.cpp @@ -31,10 +31,11 @@ void LibretroVulkanContext::SwapBuffers() { static bool create_device(retro_vulkan_context *context, VkInstance instance, VkPhysicalDevice gpu, VkSurfaceKHR surface, PFN_vkGetInstanceProcAddr get_instance_proc_addr, const char **required_device_extensions, unsigned num_required_device_extensions, const char **required_device_layers, unsigned num_required_device_layers, const VkPhysicalDeviceFeatures *required_features) { init_glslang(); - if (!VulkanLoad()) { + std::string errorStr; + if (!VulkanLoad(&errorStr)) { // TODO: In the context of RetroArch, someone has already loaded the functions. // But grabbing the pointers for ourselves can't really be a bad thing. - ERROR_LOG(G3D, "RetroArch called the Vulkan entry point without Vulkan available???"); + ERROR_LOG(G3D, "RetroArch called the Vulkan entry point without Vulkan available??? %s", errorStr.c_str()); return false; }