diff options
Diffstat (limited to 'thirdparty/vulkan/loader/vk_loader_platform.h')
-rw-r--r-- | thirdparty/vulkan/loader/vk_loader_platform.h | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/thirdparty/vulkan/loader/vk_loader_platform.h b/thirdparty/vulkan/loader/vk_loader_platform.h index b7664f50a1..36698f7fa4 100644 --- a/thirdparty/vulkan/loader/vk_loader_platform.h +++ b/thirdparty/vulkan/loader/vk_loader_platform.h @@ -28,10 +28,14 @@ #include <winsock2.h> #endif // _WIN32 +#if defined(__Fuchsia__) +#include "dlopen_fuchsia.h" +#endif // defined(__Fuchsia__) + #include "vulkan/vk_platform.h" #include "vulkan/vk_sdk_platform.h" -#if defined(__linux__) || defined(__APPLE__) +#if defined(__linux__) || defined(__APPLE__) || defined(__Fuchsia__) /* Linux-specific common code: */ // Headers: @@ -118,6 +122,8 @@ static inline char *loader_platform_executable_path(char *buffer, size_t size) { buffer[ret] = '\0'; return buffer; } +#elif defined(__Fuchsia__) +static inline char *loader_platform_executable_path(char *buffer, size_t size) { return NULL; } #endif // defined (__APPLE__) // Compatability with compilers that don't support __has_feature @@ -131,14 +137,32 @@ static inline char *loader_platform_executable_path(char *buffer, size_t size) { // Dynamic Loading of libraries: typedef void *loader_platform_dl_handle; -static inline loader_platform_dl_handle loader_platform_open_library(const char *libPath) { // When loading the library, we use RTLD_LAZY so that not all symbols have to be // resolved at this time (which improves performance). Note that if not all symbols // can be resolved, this could cause crashes later. Use the LD_BIND_NOW environment // variable to force all symbols to be resolved here. - return dlopen(libPath, RTLD_LAZY | RTLD_LOCAL); +#define LOADER_DLOPEN_MODE (RTLD_LAZY | RTLD_LOCAL) + +#if defined(__Fuchsia__) +static inline loader_platform_dl_handle loader_platform_open_driver(const char *libPath) { + return dlopen_fuchsia(libPath, LOADER_DLOPEN_MODE, true); +} +static inline loader_platform_dl_handle loader_platform_open_library(const char *libPath) { + return dlopen_fuchsia(libPath, LOADER_DLOPEN_MODE, false); +} +#else +static inline loader_platform_dl_handle loader_platform_open_library(const char *libPath) { + return dlopen(libPath, LOADER_DLOPEN_MODE); +} +#endif + +static inline const char *loader_platform_open_library_error(const char *libPath) { +#ifdef __Fuchsia__ + return dlerror_fuchsia(); +#else + return dlerror(); +#endif } -static inline const char *loader_platform_open_library_error(const char *libPath) { return dlerror(); } static inline void loader_platform_close_library(loader_platform_dl_handle library) { dlclose(library); } static inline void *loader_platform_get_proc_address(loader_platform_dl_handle library, const char *name) { assert(library); |