diff options
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/core/utils.h | 65 | ||||
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/jitter/jit_api.h | 1 |
2 files changed, 64 insertions, 2 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/core/utils.h b/src/gallium/drivers/swr/rasterizer/core/utils.h index bf53c6964ee..a5b004c6fb3 100644 --- a/src/gallium/drivers/swr/rasterizer/core/utils.h +++ b/src/gallium/drivers/swr/rasterizer/core/utils.h @@ -867,7 +867,7 @@ struct TemplateArgUnroller }; ////////////////////////////////////////////////////////////////////////// -/// Helper used to get an environment variable +/// Helpers used to get / set environment variable ////////////////////////////////////////////////////////////////////////// static INLINE std::string GetEnv(const std::string& variableName) { @@ -882,4 +882,65 @@ static INLINE std::string GetEnv(const std::string& variableName) #endif return output; -}
\ No newline at end of file +} + +static INLINE void SetEnv(const std::string& variableName, const std::string& value) +{ +#if defined(_WIN32) + SetEnvironmentVariableA(variableName.c_str(), value.c_str()); +#else + setenv(variableName.c_str(), value.c_str(), true); +#endif +} + +////////////////////////////////////////////////////////////////////////// +/// Abstraction for dynamically loading modules and getting functions +////////////////////////////////////////////////////////////////////////// +#if defined(_WIN32) +typedef HMODULE SWR_MODULE_HANDLE; +#else +#include <dlfcn.h> +typedef void* SWR_MODULE_HANDLE; +#endif + +static inline SWR_MODULE_HANDLE SWR_API LoadModule(const char* szModuleName) +{ +#if defined(_WIN32) + return LoadLibraryA(szModuleName); +#else + return dlopen(szModuleName, RTLD_LAZY | RTLD_LOCAL); +#endif +} + +static inline void SWR_API FreeModuleHandle(SWR_MODULE_HANDLE hModule) +{ + if (hModule) + { +#if defined(_WIN32) + FreeLibrary((HMODULE)hModule); +#else + dlclose(hModule); +#endif + } +} + +static inline void* SWR_API GetProcFromModule(SWR_MODULE_HANDLE hModule, const char* szProcName) +{ + if (hModule && szProcName) + { +#if defined(_WIN32) + return GetProcAddress((HMODULE)hModule, szProcName); +#else + return dlsym(hModule, szProcName); +#endif + } + + return nullptr; +} + +template<typename T> +static inline void GetProcFromModule(SWR_MODULE_HANDLE hModule, const char* szProcName, T& outFunc) +{ + outFunc = (T)GetProcFromModule(hModule, szProcName); +} + diff --git a/src/gallium/drivers/swr/rasterizer/jitter/jit_api.h b/src/gallium/drivers/swr/rasterizer/jitter/jit_api.h index 08261e74ed7..f5c27f04cdd 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/jit_api.h +++ b/src/gallium/drivers/swr/rasterizer/jitter/jit_api.h @@ -29,6 +29,7 @@ ******************************************************************************/ #pragma once #include "common/os.h" +#include "core/utils.h" #include "fetch_jit.h" #include "streamout_jit.h" |