diff options
author | Tim Rowley <[email protected]> | 2016-05-12 18:12:55 -0600 |
---|---|---|
committer | Tim Rowley <[email protected]> | 2016-05-19 16:27:18 -0500 |
commit | 65c2abf6fdd51b0a80a72caa0c52cf3f4578e743 (patch) | |
tree | 931a48a780350072e868d6ad0926fe2292d3de46 /src/gallium/drivers/swr/rasterizer | |
parent | 6deb9f7f2c186655420c8249f30f70f24cc39080 (diff) |
swr: [rasterizer] utility functions for shared libs
Reviewed-by: Bruce Cherniak <[email protected]>
Diffstat (limited to 'src/gallium/drivers/swr/rasterizer')
-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" |