summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorTim Rowley <[email protected]>2016-05-12 18:12:55 -0600
committerTim Rowley <[email protected]>2016-05-19 16:27:18 -0500
commit65c2abf6fdd51b0a80a72caa0c52cf3f4578e743 (patch)
tree931a48a780350072e868d6ad0926fe2292d3de46 /src/gallium/drivers
parent6deb9f7f2c186655420c8249f30f70f24cc39080 (diff)
swr: [rasterizer] utility functions for shared libs
Reviewed-by: Bruce Cherniak <[email protected]>
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/swr/rasterizer/core/utils.h65
-rw-r--r--src/gallium/drivers/swr/rasterizer/jitter/jit_api.h1
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"