swr: [rasterizer] utility functions for shared libs
authorTim Rowley <timothy.o.rowley@intel.com>
Fri, 13 May 2016 00:12:55 +0000 (18:12 -0600)
committerTim Rowley <timothy.o.rowley@intel.com>
Thu, 19 May 2016 21:27:18 +0000 (16:27 -0500)
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/rasterizer/core/utils.h
src/gallium/drivers/swr/rasterizer/jitter/jit_api.h

index bf53c6964eec2e35f5b0f92e597870168a178737..a5b004c6fb3e1dc85d6ee55ab1e29b82c23cb558 100644 (file)
@@ -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);
+}
+
index 08261e74ed70e29f4543432a5a2e07c9c0f877e5..f5c27f04cddd0452868a8e93fbe43c3a127cbb76 100644 (file)
@@ -29,6 +29,7 @@
 ******************************************************************************/
 #pragma once
 #include "common/os.h"
+#include "core/utils.h"
 
 #include "fetch_jit.h"
 #include "streamout_jit.h"