35 static bool s_inited =
false;
36 static char s_cudaDLLName[1024] =
"nvcuda.dll";
47 { s_cudaDLLName,
NULL },
48 {
"kernel32.dll",
NULL },
49 {
"winmm.dll",
NULL },
50 {
"shlwapi.dll",
NULL },
55 #define FW_DLL_IMPORT_RETV(RET, CALL, NAME, PARAMS, PASS) static RET (CALL *s_ ## NAME)PARAMS = NULL;
56 #define FW_DLL_IMPORT_VOID(RET, CALL, NAME, PARAMS, PASS) static RET (CALL *s_ ## NAME)PARAMS = NULL;
57 #define FW_DLL_DECLARE_RETV(RET, CALL, NAME, PARAMS, PASS) static RET (CALL *s_ ## NAME)PARAMS = NULL;
58 #define FW_DLL_DECLARE_VOID(RET, CALL, NAME, PARAMS, PASS) static RET (CALL *s_ ## NAME)PARAMS = NULL;
59 #define FW_DLL_IMPORT_CUDA(RET, CALL, NAME, PARAMS, PASS) static RET (CALL *s_ ## NAME)PARAMS = NULL;
60 #define FW_DLL_IMPORT_CUV2(RET, CALL, NAME, PARAMS, PASS) static RET (CALL *s_ ## NAME)PARAMS = NULL;
62 #undef FW_DLL_IMPORT_RETV
63 #undef FW_DLL_IMPORT_VOID
64 #undef FW_DLL_DECLARE_RETV
65 #undef FW_DLL_DECLARE_VOID
66 #undef FW_DLL_IMPORT_CUDA
67 #undef FW_DLL_IMPORT_CUV2
78 #define FW_DLL_IMPORT_RETV(RET, CALL, NAME, PARAMS, PASS) { #NAME, (void**)&s_ ## NAME },
79 #define FW_DLL_IMPORT_VOID(RET, CALL, NAME, PARAMS, PASS) { #NAME, (void**)&s_ ## NAME },
80 #define FW_DLL_DECLARE_RETV(RET, CALL, NAME, PARAMS, PASS) { #NAME, (void**)&s_ ## NAME },
81 #define FW_DLL_DECLARE_VOID(RET, CALL, NAME, PARAMS, PASS) { #NAME, (void**)&s_ ## NAME },
82 #define FW_DLL_IMPORT_CUDA(RET, CALL, NAME, PARAMS, PASS) { #NAME, (void**)&s_ ## NAME },
83 #define FW_DLL_IMPORT_CUV2(RET, CALL, NAME, PARAMS, PASS) { #NAME "_v2", (void**)&s_ ## NAME }, { #NAME, (void**)&s_ ## NAME },
85 #undef FW_DLL_IMPORT_RETV
86 #undef FW_DLL_IMPORT_VOID
87 #undef FW_DLL_DECLARE_RETV
88 #undef FW_DLL_DECLARE_VOID
89 #undef FW_DLL_IMPORT_CUDA
90 #undef FW_DLL_IMPORT_CUV2
112 s_importDLLs[i].handle = LoadLibrary(s_importDLLs[i].
name);
113 if (s_importDLLs[i].
handle)
115 if (!*s_importFuncs[j].
ptr)
116 *s_importFuncs[j].ptr = (
void*)GetProcAddress(s_importDLLs[i].handle, s_importFuncs[j].name);
126 if (!*s_importFuncs[i].
ptr)
127 *s_importFuncs[i].ptr = (
void*)wglGetProcAddress(s_importFuncs[i].
name);
140 if (s_importDLLs[i].
handle)
141 FreeLibrary(s_importDLLs[i].handle);
142 s_importDLLs[i].handle =
NULL;
151 #define FW_DLL_IMPORT_RETV(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { if (!s_inited) initDLLImports(); if (!s_ ## NAME) fail("Failed to import " #NAME "()!"); return s_ ## NAME PASS; }
152 #define FW_DLL_IMPORT_VOID(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { if (!s_inited) initDLLImports(); if (!s_ ## NAME) fail("Failed to import " #NAME "()!"); s_ ## NAME PASS; }
153 #define FW_DLL_DECLARE_RETV(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { if (!s_inited) initDLLImports(); if (!s_ ## NAME) fail("Failed to import " #NAME "()!"); return s_ ## NAME PASS; }
154 #define FW_DLL_DECLARE_VOID(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { if (!s_inited) initDLLImports(); if (!s_ ## NAME) fail("Failed to import " #NAME "()!"); s_ ## NAME PASS; }
156 # define FW_DLL_IMPORT_CUDA(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { if (!s_inited) initDLLImports(); if (!s_ ## NAME) fail("Failed to import " #NAME "()!"); return s_ ## NAME PASS; }
157 # define FW_DLL_IMPORT_CUV2(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { if (!s_inited) initDLLImports(); if (!s_ ## NAME) fail("Failed to import " #NAME "()!"); return s_ ## NAME PASS; }
159 # define FW_DLL_IMPORT_CUDA(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { fail(#NAME "(): Built without FW_USE_CUDA!"); return s_ ## NAME PASS; }
160 # define FW_DLL_IMPORT_CUV2(RET, CALL, NAME, PARAMS, PASS) RET CALL NAME PARAMS { fail(#NAME "(): Built without FW_USE_CUDA!"); return s_ ## NAME PASS; }
163 #undef FW_DLL_IMPORT_RETV
164 #undef FW_DLL_IMPORT_VOID
165 #undef FW_DLL_DECLARE_RETV
166 #undef FW_DLL_DECLARE_VOID
167 #undef FW_DLL_IMPORT_CUDA
168 #undef FW_DLL_IMPORT_CUV2
172 #define FW_DLL_IMPORT_RETV(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { if (!s_inited) initDLLImports(); return (s_ ## NAME != NULL); }
173 #define FW_DLL_IMPORT_VOID(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { if (!s_inited) initDLLImports(); return (s_ ## NAME != NULL); }
174 #define FW_DLL_DECLARE_RETV(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { if (!s_inited) initDLLImports(); return (s_ ## NAME != NULL); }
175 #define FW_DLL_DECLARE_VOID(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { if (!s_inited) initDLLImports(); return (s_ ## NAME != NULL); }
177 # define FW_DLL_IMPORT_CUDA(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { if (!s_inited) initDLLImports(); return (s_ ## NAME != NULL); }
178 # define FW_DLL_IMPORT_CUV2(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { if (!s_inited) initDLLImports(); return (s_ ## NAME != NULL); }
180 # define FW_DLL_IMPORT_CUDA(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { return false; }
181 # define FW_DLL_IMPORT_CUV2(RET, CALL, NAME, PARAMS, PASS) bool isAvailable_ ## NAME(void) { return false; }
184 #undef FW_DLL_IMPORT_RETV
185 #undef FW_DLL_IMPORT_VOID
186 #undef FW_DLL_DECLARE_RETV
187 #undef FW_DLL_DECLARE_VOID
188 #undef FW_DLL_IMPORT_CUDA
189 #undef FW_DLL_IMPORT_CUV2
const char * getPtr(void) const
void deinitDLLImports(void)
void setCudaDLLName(const String &name)
int getLength(void) const
void initDLLImports(void)