void sysInit (void) { HMODULE library; #define LOAD_LIBRARY(name) (library = loadLibrary(name)) #define GET_PROC(name) (name##Proc = getProcedure(library, #name)) if (LOAD_LIBRARY("ntdll.dll")) { GET_PROC(NtSetInformationProcess); } if (LOAD_LIBRARY("kernel32.dll")) { GET_PROC(AttachConsole); GET_PROC(GetLocaleInfoEx); } if (LOAD_LIBRARY("user32.dll")) { GET_PROC(GetAltTabInfoA); GET_PROC(SendInput); } #ifdef __MINGW32__ if (LOAD_LIBRARY("ws2_32.dll")) { GET_PROC(getaddrinfo); GET_PROC(freeaddrinfo); } #endif /* __MINGW32__ */ }
static av_cold int nvenc_load_libraries(AVCodecContext *avctx) { NVENCContext *ctx = avctx->priv_data; NVENCLibraryContext *nvel = &ctx->nvel; PNVENCODEAPICREATEINSTANCE nvenc_create_instance; LOAD_LIBRARY(nvel->cuda, CUDA_LIBNAME); LOAD_SYMBOL(nvel->cu_init, nvel->cuda, "cuInit"); LOAD_SYMBOL(nvel->cu_device_get_count, nvel->cuda, "cuDeviceGetCount"); LOAD_SYMBOL(nvel->cu_device_get, nvel->cuda, "cuDeviceGet"); LOAD_SYMBOL(nvel->cu_device_get_name, nvel->cuda, "cuDeviceGetName"); LOAD_SYMBOL(nvel->cu_device_compute_capability, nvel->cuda, "cuDeviceComputeCapability"); LOAD_SYMBOL(nvel->cu_ctx_create, nvel->cuda, "cuCtxCreate_v2"); LOAD_SYMBOL(nvel->cu_ctx_pop_current, nvel->cuda, "cuCtxPopCurrent_v2"); LOAD_SYMBOL(nvel->cu_ctx_destroy, nvel->cuda, "cuCtxDestroy_v2"); LOAD_LIBRARY(nvel->nvenc, NVENC_LIBNAME); LOAD_SYMBOL(nvenc_create_instance, nvel->nvenc, "NvEncodeAPICreateInstance"); nvel->nvenc_funcs.version = NV_ENCODE_API_FUNCTION_LIST_VER; if ((nvenc_create_instance(&nvel->nvenc_funcs)) != NV_ENC_SUCCESS) { av_log(avctx, AV_LOG_ERROR, "Cannot create the NVENC instance"); return AVERROR_UNKNOWN; } return 0; }
/* * Class: CFunction * Method: find * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J */ JNIEXPORT jlong JNICALL Java_CFunction_find (JNIEnv *env, jobject self, jstring lib, jstring fun) { void *handle; void *func; char *libname; char *funname; if ((libname = JNU_GetStringNativeChars(env, lib))) { if ((funname = JNU_GetStringNativeChars(env, fun))) { if ((handle = (void *)LOAD_LIBRARY(libname))) { if (!(func = (void *)FIND_ENTRY(handle, funname))) { JNU_ThrowByName(env, "java/lang/UnsatisfiedLinkError", funname); } } else { JNU_ThrowByName(env, "java/lang/UnsatisfiedLinkError", libname); } free(funname); } free(libname); } return (jlong)func; }
bool Module::LoadLibrary() { string path = config[CONF_APPLICATION_LIBRARY]; libHandler = LOAD_LIBRARY(STR(path), LOAD_LIBRARY_FLAGS); if (libHandler == NULL) { string strError = OPEN_LIBRARY_ERROR; FATAL("Unable to open library %s. Error was: %s", STR(path), STR(strError)); return false; } string functionName = (string) config[CONF_APPLICATION_INIT_APPLICATION_FUNCTION]; getApplication = (GetApplicationFunction_t) GET_PROC_ADDRESS(libHandler, STR(functionName)); if (getApplication == NULL) { string strError = OPEN_LIBRARY_ERROR; FATAL("Unable to find %s function. Error was: %s", STR(functionName), STR(strError)); return false; } functionName = (string) config[CONF_APPLICATION_INIT_FACTORY_FUNCTION]; getFactory = (GetFactoryFunction_t) GET_PROC_ADDRESS(libHandler, STR(functionName)); INFO("Module %s loaded", STR(path)); return true; }
int main( int argc, char ** argv ) { int nLibIndex = ParseArgs( argc, argv ); if( nLibIndex == 0 ) return -1; if( g_fDiag ) Diags( argc, argv ); Logger logger; GetLinuxPwd(); for( ; nLibIndex < argc; nLibIndex++ ) { StringList files = GetFileList( argv[nLibIndex] ); for( StringList::const_iterator it=files.begin(); it!=files.end(); ++it ) { std::string library = *it; std::cout << "Loading Library: " << library << std::endl; DllHandle hModule = LOAD_LIBRARY( library.c_str() ); DLERROR_CHECK; if( !hModule ) { std::cout<<"ERROR: Failed to load "<< *it << std::endl; std::cout.flush(); continue; } RunAllFn pRunAll = (RunAllFn)GET_PROC_ADDRESS( hModule, "RunAll" ); if( pRunAll == NULL ) { std::cerr << std::endl << "Function RunAll() not found in library " << library << "!" << std::endl; FREE_LIBRARY( hModule ); continue; } pRunAll( &logger, g_configFileName.c_str() ); FREE_LIBRARY( hModule ); } // next library } // next arg if( g_fCSV ) { try { std::ofstream log(g_logPath.c_str()); GenerateReportCSV( logger, log, g_fNoHeader ); } catch(...) { std::cerr << "Error writing log file " << g_logPath << "!" << std::endl; } } std::cout << std::endl; }
int load_library(const char *libname, ZARRAYP retval) { void *handle = (void *)LOAD_LIBRARY(libname, DEFAULT_LOAD_OPTS); if (!handle) { logger("LOAD_LIBRARY failed\n"); return ZF_FAILURE; } assign_pointer_to_ZARRAYP(retval, handle); return ZF_SUCCESS; }
void operator()( int /*id*/ ) const { void* (*malloc_ptr)(size_t); void (*free_ptr)(void*); const char* actual_name; LIBRARY_HANDLE lib = LOAD_LIBRARY(actual_name = MALLOCLIB_NAME1); if (!lib) lib = LOAD_LIBRARY(actual_name = MALLOCLIB_NAME2); if (!lib) { REPORT("Can't load " MALLOCLIB_NAME1 " or " MALLOCLIB_NAME2 "\n"); exit(1); } #if _WIN32 || _WIN64 (void *&)malloc_ptr = GetProcAddress(lib, "scalable_malloc"); (void *&)free_ptr = GetProcAddress(lib, "scalable_free"); #else (void *&)malloc_ptr = dlsym(lib, "scalable_malloc"); (void *&)free_ptr = dlsym(lib, "scalable_free"); #endif if (!malloc_ptr || !free_ptr) { REPORT("Can't find scalable_(malloc|free) in %s \n", actual_name); exit(1); } void *p = malloc_ptr(100); memset(p, 1, 100); free_ptr(p); #if _WIN32 || _WIN64 BOOL ret = FreeLibrary(lib); ASSERT(ret, "FreeLibrary must be successful"); ASSERT(GetModuleHandle(actual_name), "allocator library must not be unloaded"); #else int ret = dlclose(lib); ASSERT(ret == 0, "dlclose must be successful"); ASSERT(dlsym(RTLD_DEFAULT, "scalable_malloc"), "allocator library must not be unloaded"); #endif }
bool ExternalReader::m_libload(void) { bool r = false; if (!m_hLib) { #if defined(WIN32) #if defined(_DEBUG) || defined(DEBUG) m_hLib = LOAD_LIBRARY("externalReaderd.dll"); #else m_hLib = LOAD_LIBRARY("externalReader.dll"); #endif #elif defined(__APPLE__) m_hLib = LOAD_LIBRARY("libexternalReader.dylib"); #else m_hLib = LOAD_LIBRARY("libexternalReader.so"); #endif if (m_hLib) { m_hOpen = (CardReaderOpen_t) GET_FUNCTION(m_hLib, CardReaderOpen); m_hSend = (CardReaderSend_t) GET_FUNCTION(m_hLib, CardReaderSend); m_hGetATR = (CardReaderGetATR_t) GET_FUNCTION(m_hLib, CardReaderGetATR); m_hSupportsPACE = (CardReaderSupportsPACE_t) GET_FUNCTION(m_hLib, CardReaderSupportsPACE); m_hDoPACE = (CardReaderDoPACE_t) GET_FUNCTION(m_hLib, CardReaderDoPACE); m_hClose = (CardReaderClose_t) GET_FUNCTION(m_hLib, CardReaderClose); } else { eCardCore_warn(DEBUG_LEVEL_CARD, "could not load external reader library"); } } if (!m_hLib || !m_hOpen || !m_hSend || !m_hGetATR || !m_hSupportsPACE || !m_hDoPACE || !m_hClose) { eCardCore_warn(DEBUG_LEVEL_CARD, "could not load external reader library functions"); m_libcleanup(); } else { r = true; } return r; }
int CReqAvenue2HttpTransfer::InstallSoPlugin(const char *szSoName) { TS_XLOG(XLOG_DEBUG,"CReqAvenue2HttpTransfer::%s, szSoName[%s]\n",__FUNCTION__,szSoName); map<string,SA2HSoUnit>::iterator itr = sm_mapSo.find(szSoName); if(itr != sm_mapSo.end()) { return 0; } PluginPtr pHandle = LOAD_LIBRARY(szSoName); if (NULL == pHandle) { TS_XLOG(XLOG_ERROR, "CReqAvenue2HttpTransfer::%s, LOAD_LIBRARY[%s] error[%s]\n", __FUNCTION__, szSoName, GET_ERROR_INFO("can't Load")); return -1; } TS_XLOG(XLOG_TRACE,"CReqAvenue2HttpTransfer::%s-------------pHandle[%0X]-------------- \n", __FUNCTION__, pHandle); create_a2h_obj create_unit = (create_a2h_obj)GET_FUNC_PTR(pHandle, "create"); if (!create_unit) { TS_XLOG(XLOG_ERROR, "CReqAvenue2HttpTransfer::%s, GET_FUNC_PTR create[%s] error[%s]\n", __FUNCTION__, szSoName, GET_ERROR_INFO("can't find")); return -1; } destroy_a2h_obj destroy_unit = (destroy_a2h_obj)GET_FUNC_PTR(pHandle, "destroy"); if (!destroy_unit) { TS_XLOG(XLOG_ERROR, "CReqAvenue2HttpTransfer::%s, GET_FUNC_PTR destroy[%s] error[%s]\n", __FUNCTION__, szSoName, GET_ERROR_INFO("can't find")); return -1; } SA2HSoUnit SA2HSoUnit; SA2HSoUnit.strSoName = szSoName; SA2HSoUnit.pHandle = pHandle; SA2HSoUnit.pFunCreate = create_unit; SA2HSoUnit.pFunDestroy = destroy_unit; sm_mapSo.insert(make_pair(szSoName,SA2HSoUnit)); return 0; }
CUresult CUDAAPI cuvidInit(unsigned int Flags) { DLLDRIVER DriverLib; CHECKED_CALL(LOAD_LIBRARY(&DriverLib)); // fetch all function pointers GET_PROC(cuvidCreateVideoSource); GET_PROC(cuvidCreateVideoSourceW); GET_PROC(cuvidDestroyVideoSource); GET_PROC(cuvidSetVideoSourceState); GET_PROC(cuvidGetVideoSourceState); GET_PROC(cuvidGetSourceVideoFormat); GET_PROC(cuvidGetSourceAudioFormat); GET_PROC(cuvidCreateVideoParser); GET_PROC(cuvidParseVideoData); GET_PROC(cuvidDestroyVideoParser); GET_PROC(cuvidGetDecoderCaps); GET_PROC(cuvidCreateDecoder); GET_PROC(cuvidDestroyDecoder); GET_PROC(cuvidDecodePicture); #if defined(WIN64) || defined(_WIN64) || defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) GET_PROC(cuvidMapVideoFrame64); GET_PROC(cuvidUnmapVideoFrame64); cuvidMapVideoFrame = cuvidMapVideoFrame64; cuvidUnmapVideoFrame = cuvidUnmapVideoFrame64; #else GET_PROC(cuvidMapVideoFrame); GET_PROC(cuvidUnmapVideoFrame); #endif // GET_PROC(cuvidGetVideoFrameSurface); GET_PROC(cuvidCtxLockCreate); GET_PROC(cuvidCtxLockDestroy); GET_PROC(cuvidCtxLock); GET_PROC(cuvidCtxUnlock); return CUDA_SUCCESS; }
CUresult CUDAAPI cuInit(unsigned int Flags, int cudaVersion) { CUDADRIVER CudaDrvLib; int driverVer = 1000; CHECKED_CALL(LOAD_LIBRARY(&CudaDrvLib)); // cuInit is required; alias it to _cuInit GET_PROC_EX(cuInit, _cuInit, 1); CHECKED_CALL(_cuInit(Flags)); // available since 2.2. if not present, version 1.0 is assumed GET_PROC_OPTIONAL(cuDriverGetVersion); if (cuDriverGetVersion) { CHECKED_CALL(cuDriverGetVersion(&driverVer)); } // fetch all function pointers GET_PROC(cuDeviceGet); GET_PROC(cuDeviceGetCount); GET_PROC(cuDeviceGetName); GET_PROC(cuDeviceComputeCapability); GET_PROC(cuDeviceGetProperties); GET_PROC(cuDeviceGetAttribute); GET_PROC(cuCtxDestroy); GET_PROC(cuCtxAttach); GET_PROC(cuCtxDetach); GET_PROC(cuCtxPushCurrent); GET_PROC(cuCtxPopCurrent); GET_PROC(cuCtxGetDevice); GET_PROC(cuCtxSynchronize); GET_PROC(cuCtxSetLimit); GET_PROC(cuCtxGetCacheConfig); GET_PROC(cuCtxSetCacheConfig); GET_PROC(cuCtxGetApiVersion); GET_PROC(cuModuleLoad); GET_PROC(cuModuleLoadData); GET_PROC(cuModuleUnload); GET_PROC(cuModuleGetFunction); GET_PROC(cuModuleGetTexRef); GET_PROC(cuMemFreeHost); GET_PROC(cuMemHostAlloc); GET_PROC(cuFuncSetBlockShape); GET_PROC(cuFuncSetSharedSize); GET_PROC(cuFuncGetAttribute); GET_PROC(cuArrayDestroy); GET_PROC(cuTexRefCreate); GET_PROC(cuTexRefDestroy); GET_PROC(cuTexRefSetArray); GET_PROC(cuTexRefSetFormat); GET_PROC(cuTexRefSetAddressMode); GET_PROC(cuTexRefSetFilterMode); GET_PROC(cuTexRefSetFlags); GET_PROC(cuTexRefGetArray); GET_PROC(cuTexRefGetAddressMode); GET_PROC(cuTexRefGetFilterMode); GET_PROC(cuTexRefGetFormat); GET_PROC(cuTexRefGetFlags); GET_PROC(cuParamSetSize); GET_PROC(cuParamSeti); GET_PROC(cuParamSetf); GET_PROC(cuParamSetv); GET_PROC(cuParamSetTexRef); GET_PROC(cuLaunch); GET_PROC(cuLaunchGrid); GET_PROC(cuLaunchGridAsync); GET_PROC(cuEventCreate); GET_PROC(cuEventRecord); GET_PROC(cuEventQuery); GET_PROC(cuEventSynchronize); GET_PROC(cuEventDestroy); GET_PROC(cuEventElapsedTime); GET_PROC(cuStreamCreate); GET_PROC(cuStreamWaitEvent); GET_PROC(cuStreamAddCallback); GET_PROC(cuStreamQuery); GET_PROC(cuStreamSynchronize); GET_PROC(cuStreamDestroy); // These are CUDA 5.0 new functions if (driverVer >= 5000) { GET_PROC(cuMipmappedArrayCreate); GET_PROC(cuMipmappedArrayDestroy); GET_PROC(cuMipmappedArrayGetLevel); } // These are CUDA 4.2 new functions if (driverVer >= 4020) { GET_PROC(cuFuncSetSharedMemConfig); GET_PROC(cuCtxGetSharedMemConfig); GET_PROC(cuCtxSetSharedMemConfig); } // These are CUDA 4.1 new functions if (cudaVersion >= 4010 && __CUDA_API_VERSION >= 4010) { GET_PROC(cuDeviceGetByPCIBusId); GET_PROC(cuDeviceGetPCIBusId); GET_PROC(cuIpcGetEventHandle); GET_PROC(cuIpcOpenEventHandle); GET_PROC(cuIpcGetMemHandle); GET_PROC(cuIpcOpenMemHandle); GET_PROC(cuIpcCloseMemHandle); } // These could be _v2 interfaces if (cudaVersion >= 4000 && __CUDA_API_VERSION >= 4000) { GET_PROC_V2(cuCtxDestroy); GET_PROC_V2(cuCtxPopCurrent); GET_PROC_V2(cuCtxPushCurrent); GET_PROC_V2(cuStreamDestroy); GET_PROC_V2(cuEventDestroy); } if (cudaVersion >= 3020 && __CUDA_API_VERSION >= 3020) { GET_PROC_V2(cuDeviceTotalMem); GET_PROC_V2(cuCtxCreate); GET_PROC_V2(cuModuleGetGlobal); GET_PROC_V2(cuMemGetInfo); GET_PROC_V2(cuMemAlloc); GET_PROC_V2(cuMemAllocPitch); GET_PROC_V2(cuMemFree); GET_PROC_V2(cuMemGetAddressRange); GET_PROC_V2(cuMemAllocHost); GET_PROC_V2(cuMemHostGetDevicePointer); GET_PROC_V2(cuMemcpyHtoD); GET_PROC_V2(cuMemcpyDtoH); GET_PROC_V2(cuMemcpyDtoD); GET_PROC_V2(cuMemcpyDtoA); GET_PROC_V2(cuMemcpyAtoD); GET_PROC_V2(cuMemcpyHtoA); GET_PROC_V2(cuMemcpyAtoH); GET_PROC_V2(cuMemcpyAtoA); GET_PROC_V2(cuMemcpy2D); GET_PROC_V2(cuMemcpy2DUnaligned); GET_PROC_V2(cuMemcpy3D); GET_PROC_V2(cuMemcpyHtoDAsync); GET_PROC_V2(cuMemcpyDtoHAsync); GET_PROC_V2(cuMemcpyHtoAAsync); GET_PROC_V2(cuMemcpyAtoHAsync); GET_PROC_V2(cuMemcpy2DAsync); GET_PROC_V2(cuMemcpy3DAsync); GET_PROC_V2(cuMemsetD8); GET_PROC_V2(cuMemsetD16); GET_PROC_V2(cuMemsetD32); GET_PROC_V2(cuMemsetD2D8); GET_PROC_V2(cuMemsetD2D16); GET_PROC_V2(cuMemsetD2D32); GET_PROC_V2(cuArrayCreate); GET_PROC_V2(cuArrayGetDescriptor); GET_PROC_V2(cuArray3DCreate); GET_PROC_V2(cuArray3DGetDescriptor); GET_PROC_V2(cuTexRefSetAddress); GET_PROC_V2(cuTexRefGetAddress); if (cudaVersion >= 4010 && __CUDA_API_VERSION >= 4010) { GET_PROC_V3(cuTexRefSetAddress2D); } else { GET_PROC_V2(cuTexRefSetAddress2D); } } else { // versions earlier than 3020 GET_PROC(cuDeviceTotalMem); GET_PROC(cuCtxCreate); GET_PROC(cuModuleGetGlobal); GET_PROC(cuMemGetInfo); GET_PROC(cuMemAlloc); GET_PROC(cuMemAllocPitch); GET_PROC(cuMemFree); GET_PROC(cuMemGetAddressRange); GET_PROC(cuMemAllocHost); GET_PROC(cuMemHostGetDevicePointer); GET_PROC(cuMemcpyHtoD); GET_PROC(cuMemcpyDtoH); GET_PROC(cuMemcpyDtoD); GET_PROC(cuMemcpyDtoA); GET_PROC(cuMemcpyAtoD); GET_PROC(cuMemcpyHtoA); GET_PROC(cuMemcpyAtoH); GET_PROC(cuMemcpyAtoA); GET_PROC(cuMemcpy2D); GET_PROC(cuMemcpy2DUnaligned); GET_PROC(cuMemcpy3D); GET_PROC(cuMemcpyHtoDAsync); GET_PROC(cuMemcpyDtoHAsync); GET_PROC(cuMemcpyHtoAAsync); GET_PROC(cuMemcpyAtoHAsync); GET_PROC(cuMemcpy2DAsync); GET_PROC(cuMemcpy3DAsync); GET_PROC(cuMemsetD8); GET_PROC(cuMemsetD16); GET_PROC(cuMemsetD32); GET_PROC(cuMemsetD2D8); GET_PROC(cuMemsetD2D16); GET_PROC(cuMemsetD2D32); GET_PROC(cuArrayCreate); GET_PROC(cuArrayGetDescriptor); GET_PROC(cuArray3DCreate); GET_PROC(cuArray3DGetDescriptor); GET_PROC(cuTexRefSetAddress); GET_PROC(cuTexRefSetAddress2D); GET_PROC(cuTexRefGetAddress); } // The following functions are specific to CUDA versions if (driverVer >= 4000) { GET_PROC(cuCtxSetCurrent); GET_PROC(cuCtxGetCurrent); GET_PROC(cuMemHostRegister); GET_PROC(cuMemHostUnregister); GET_PROC(cuMemcpy); GET_PROC(cuMemcpyPeer); GET_PROC(cuLaunchKernel); } if (driverVer >= 3010) { GET_PROC(cuModuleGetSurfRef); GET_PROC(cuSurfRefSetArray); GET_PROC(cuSurfRefGetArray); GET_PROC(cuCtxSetLimit); GET_PROC(cuCtxGetLimit); } if (driverVer >= 3000) { GET_PROC(cuMemcpyDtoDAsync); GET_PROC(cuFuncSetCacheConfig); #ifdef CUDA_INIT_D3D11 GET_PROC(cuD3D11GetDevice); GET_PROC(cuD3D11CtxCreate); GET_PROC(cuGraphicsD3D11RegisterResource); #endif GET_PROC(cuGraphicsUnregisterResource); GET_PROC(cuGraphicsSubResourceGetMappedArray); if (cudaVersion >= 3020 && __CUDA_API_VERSION >= 3020) { GET_PROC_V2(cuGraphicsResourceGetMappedPointer); } else { GET_PROC(cuGraphicsResourceGetMappedPointer); } GET_PROC(cuGraphicsResourceSetMapFlags); GET_PROC(cuGraphicsMapResources); GET_PROC(cuGraphicsUnmapResources); GET_PROC(cuGetExportTable); } if (driverVer >= 2030) { GET_PROC(cuMemHostGetFlags); #ifdef CUDA_INIT_D3D10 GET_PROC(cuD3D10GetDevice); GET_PROC(cuD3D10CtxCreate); GET_PROC(cuGraphicsD3D10RegisterResource); #endif #ifdef CUDA_INIT_OPENGL GET_PROC(cuGraphicsGLRegisterBuffer); GET_PROC(cuGraphicsGLRegisterImage); #endif } if (driverVer >= 2010) { GET_PROC(cuModuleLoadDataEx); GET_PROC(cuModuleLoadFatBinary); #ifdef CUDA_INIT_OPENGL GET_PROC(cuGLCtxCreate); GET_PROC(cuGraphicsGLRegisterBuffer); GET_PROC(cuGraphicsGLRegisterImage); # ifdef WIN32 GET_PROC(cuWGLGetDevice); # endif #endif #ifdef CUDA_INIT_D3D9 GET_PROC(cuD3D9GetDevice); GET_PROC(cuD3D9CtxCreate); GET_PROC(cuGraphicsD3D9RegisterResource); #endif } return CUDA_SUCCESS; }
CUresult CUDAAPI cuInit(unsigned int Flags, int cudaVersion, void *pHandleDriver) { CUDADRIVER CudaDrvLib; int driverVer = 1000; CHECKED_CALL(LOAD_LIBRARY(&CudaDrvLib)); if (pHandleDriver != NULL) { memcpy(pHandleDriver, &CudaDrvLib, sizeof(CUDADRIVER)); } // cuInit is required; alias it to _cuInit GET_PROC_EX(cuInit, _cuInit, 1); CHECKED_CALL(_cuInit(Flags)); // available since 2.2. if not present, version 1.0 is assumed GET_PROC_OPTIONAL(cuDriverGetVersion); if (cuDriverGetVersion) { CHECKED_CALL(cuDriverGetVersion(&driverVer)); } // fetch all function pointers GET_PROC(cuDeviceGet); GET_PROC(cuDeviceGetCount); GET_PROC(cuDeviceGetName); GET_PROC(cuDeviceComputeCapability); GET_PROC(cuDeviceGetProperties); GET_PROC(cuDeviceGetAttribute); GET_PROC(cuCtxDestroy); GET_PROC(cuCtxAttach); GET_PROC(cuCtxDetach); GET_PROC(cuCtxPushCurrent); GET_PROC(cuCtxPopCurrent); GET_PROC(cuCtxGetDevice); GET_PROC(cuCtxSynchronize); GET_PROC(cuModuleLoad); GET_PROC(cuModuleLoadData); GET_PROC(cuModuleUnload); GET_PROC(cuModuleGetFunction); GET_PROC(cuModuleGetTexRef); GET_PROC(cuMemFreeHost); GET_PROC(cuMemHostAlloc); GET_PROC(cuFuncSetBlockShape); GET_PROC(cuFuncSetSharedSize); GET_PROC(cuFuncGetAttribute); GET_PROC(cuArrayDestroy); GET_PROC(cuTexRefCreate); GET_PROC(cuTexRefDestroy); GET_PROC(cuTexRefSetArray); GET_PROC(cuTexRefSetFormat); GET_PROC(cuTexRefSetAddressMode); GET_PROC(cuTexRefSetFilterMode); GET_PROC(cuTexRefSetFlags); GET_PROC(cuTexRefGetArray); GET_PROC(cuTexRefGetAddressMode); GET_PROC(cuTexRefGetFilterMode); GET_PROC(cuTexRefGetFormat); GET_PROC(cuTexRefGetFlags); GET_PROC(cuParamSetSize); GET_PROC(cuParamSeti); GET_PROC(cuParamSetf); GET_PROC(cuParamSetv); GET_PROC(cuParamSetTexRef); GET_PROC(cuLaunch); GET_PROC(cuLaunchGrid); GET_PROC(cuLaunchGridAsync); GET_PROC(cuEventCreate); GET_PROC(cuEventRecord); GET_PROC(cuEventQuery); GET_PROC(cuEventSynchronize); GET_PROC(cuEventDestroy); GET_PROC(cuEventElapsedTime); GET_PROC(cuStreamCreate); GET_PROC(cuStreamQuery); GET_PROC(cuStreamSynchronize); GET_PROC(cuStreamDestroy); // These could be _v2 interfaces if (cudaVersion >= 4000) { GET_PROC_V2(cuCtxDestroy); GET_PROC_V2(cuCtxPopCurrent); GET_PROC_V2(cuCtxPushCurrent); GET_PROC_V2(cuStreamDestroy); GET_PROC_V2(cuEventDestroy); } if (cudaVersion >= 3020) { GET_PROC_V2(cuDeviceTotalMem); GET_PROC_V2(cuCtxCreate); GET_PROC_V2(cuModuleGetGlobal); GET_PROC_V2(cuMemGetInfo); GET_PROC_V2(cuMemAlloc); GET_PROC_V2(cuMemAllocPitch); GET_PROC_V2(cuMemFree); GET_PROC_V2(cuMemGetAddressRange); GET_PROC_V2(cuMemAllocHost); GET_PROC_V2(cuMemHostGetDevicePointer); GET_PROC_V2(cuMemcpyHtoD); GET_PROC_V2(cuMemcpyDtoH); GET_PROC_V2(cuMemcpyDtoD); GET_PROC_V2(cuMemcpyDtoA); GET_PROC_V2(cuMemcpyAtoD); GET_PROC_V2(cuMemcpyHtoA); GET_PROC_V2(cuMemcpyAtoH); GET_PROC_V2(cuMemcpyAtoA); GET_PROC_V2(cuMemcpy2D); GET_PROC_V2(cuMemcpy2DUnaligned); GET_PROC_V2(cuMemcpy3D); GET_PROC_V2(cuMemcpyHtoDAsync); GET_PROC_V2(cuMemcpyDtoHAsync); GET_PROC_V2(cuMemcpyHtoAAsync); GET_PROC_V2(cuMemcpyAtoHAsync); GET_PROC_V2(cuMemcpy2DAsync); GET_PROC_V2(cuMemcpy3DAsync); GET_PROC_V2(cuMemsetD8); GET_PROC_V2(cuMemsetD16); GET_PROC_V2(cuMemsetD32); GET_PROC_V2(cuMemsetD2D8); GET_PROC_V2(cuMemsetD2D16); GET_PROC_V2(cuMemsetD2D32); GET_PROC_V2(cuArrayCreate); GET_PROC_V2(cuArrayGetDescriptor); GET_PROC_V2(cuArray3DCreate); GET_PROC_V2(cuArray3DGetDescriptor); GET_PROC_V2(cuTexRefSetAddress); GET_PROC_V2(cuTexRefSetAddress2D); GET_PROC_V2(cuTexRefGetAddress); } else { GET_PROC(cuDeviceTotalMem); GET_PROC(cuCtxCreate); GET_PROC(cuModuleGetGlobal); GET_PROC(cuMemGetInfo); GET_PROC(cuMemAlloc); GET_PROC(cuMemAllocPitch); GET_PROC(cuMemFree); GET_PROC(cuMemGetAddressRange); GET_PROC(cuMemAllocHost); GET_PROC(cuMemHostGetDevicePointer); GET_PROC(cuMemcpyHtoD); GET_PROC(cuMemcpyDtoH); GET_PROC(cuMemcpyDtoD); GET_PROC(cuMemcpyDtoA); GET_PROC(cuMemcpyAtoD); GET_PROC(cuMemcpyHtoA); GET_PROC(cuMemcpyAtoH); GET_PROC(cuMemcpyAtoA); GET_PROC(cuMemcpy2D); GET_PROC(cuMemcpy2DUnaligned); GET_PROC(cuMemcpy3D); GET_PROC(cuMemcpyHtoDAsync); GET_PROC(cuMemcpyDtoHAsync); GET_PROC(cuMemcpyHtoAAsync); GET_PROC(cuMemcpyAtoHAsync); GET_PROC(cuMemcpy2DAsync); GET_PROC(cuMemcpy3DAsync); GET_PROC(cuMemsetD8); GET_PROC(cuMemsetD16); GET_PROC(cuMemsetD32); GET_PROC(cuMemsetD2D8); GET_PROC(cuMemsetD2D16); GET_PROC(cuMemsetD2D32); GET_PROC(cuArrayCreate); GET_PROC(cuArrayGetDescriptor); GET_PROC(cuArray3DCreate); GET_PROC(cuArray3DGetDescriptor); GET_PROC(cuTexRefSetAddress); GET_PROC(cuTexRefSetAddress2D); GET_PROC(cuTexRefGetAddress); } // The following functions are specific to CUDA versions if (driverVer >= 2010) { GET_PROC(cuModuleLoadDataEx); GET_PROC(cuModuleLoadFatBinary); } if (driverVer >= 2030) { GET_PROC(cuMemHostGetFlags); } if (driverVer >= 3000) { GET_PROC(cuMemcpyDtoDAsync); GET_PROC(cuFuncSetCacheConfig); GET_PROC(cuGraphicsUnregisterResource); GET_PROC(cuGraphicsSubResourceGetMappedArray); #if (__CUDA_API_VERSION >= 3020) if (cudaVersion >= 3020) { GET_PROC_V2(cuGraphicsResourceGetMappedPointer); } else { GET_PROC(cuGraphicsResourceGetMappedPointer); } #endif GET_PROC(cuGraphicsResourceSetMapFlags); GET_PROC(cuGraphicsMapResources); GET_PROC(cuGraphicsUnmapResources); GET_PROC(cuGetExportTable); } if (driverVer >= 3010) { GET_PROC(cuModuleGetSurfRef); GET_PROC(cuSurfRefSetArray); GET_PROC(cuSurfRefGetArray); GET_PROC(cuCtxSetLimit); GET_PROC(cuCtxGetLimit); } if (driverVer >= 4000) { GET_PROC(cuCtxSetCurrent); GET_PROC(cuCtxGetCurrent); GET_PROC(cuMemHostRegister); GET_PROC(cuMemHostUnregister); GET_PROC(cuMemcpy); GET_PROC(cuMemcpyPeer); GET_PROC(cuLaunchKernel); } #if INIT_CUDA_GL if (cuInitGL(0, __CUDA_API_VERSION, CudaDrvLib) != CUDA_SUCCESS) return CUDA_ERROR_INVALID_DEVICE; #endif #if INIT_CUDA_D3D9 if (cuInitD3D9(0, __CUDA_API_VERSION, CudaDrvLib) != CUDA_SUCCESS) return CUDA_ERROR_INVALID_DEVICE; #endif #if INIT_CUDA_D3D10 if (cuInitD3D10(0, __CUDA_API_VERSION, CudaDrvLib) != CUDA_SUCCESS) return CUDA_ERROR_INVALID_DEVICE; #endif #if INIT_CUDA_D3D11 if (cuInitD3D11(0, __CUDA_API_VERSION, CudaDrvLib) != CUDA_SUCCESS) return CUDA_ERROR_INVALID_DEVICE; #endif return CUDA_SUCCESS; }
CUresult CUDAAPI cuInit(unsigned int Flags) { CUDADRIVER CudaDrvLib; CUresult result; int driverVer; CHECKED_CALL(LOAD_LIBRARY(&CudaDrvLib)); //cuInit must be present ever GET_PROC_LONG(cuInit, tcuInit, _cuInit); //available since 2.2 GET_PROC(cuDriverGetVersion); //get driver version CHECKED_CALL(_cuInit(Flags)); CHECKED_CALL(cuDriverGetVersion(&driverVer)); GET_PROC(cuDeviceGet); GET_PROC(cuDeviceGetCount); GET_PROC(cuDeviceGetName); GET_PROC(cuDeviceComputeCapability); GET_PROC(cuDeviceTotalMem); GET_PROC(cuDeviceGetProperties); GET_PROC(cuDeviceGetAttribute); GET_PROC(cuCtxCreate); GET_PROC(cuCtxDestroy); GET_PROC(cuCtxAttach); GET_PROC(cuCtxDetach); GET_PROC(cuCtxPushCurrent); GET_PROC(cuCtxPopCurrent); GET_PROC(cuCtxGetDevice); GET_PROC(cuCtxSynchronize); GET_PROC(cuModuleLoad); GET_PROC(cuModuleLoadData); GET_PROC(cuModuleLoadDataEx); GET_PROC(cuModuleLoadFatBinary); GET_PROC(cuModuleUnload); GET_PROC(cuModuleGetFunction); GET_PROC(cuModuleGetGlobal); GET_PROC(cuModuleGetTexRef); GET_PROC(cuMemGetInfo); GET_PROC(cuMemAlloc); GET_PROC(cuMemAllocPitch); GET_PROC(cuMemFree); GET_PROC(cuMemGetAddressRange); GET_PROC(cuMemAllocHost); GET_PROC(cuMemFreeHost); GET_PROC(cuMemHostAlloc); GET_PROC(cuMemHostGetDevicePointer); GET_PROC(cuMemcpyHtoD); GET_PROC(cuMemcpyDtoH); GET_PROC(cuMemcpyDtoD); GET_PROC(cuMemcpyDtoA); GET_PROC(cuMemcpyAtoD); GET_PROC(cuMemcpyHtoA); GET_PROC(cuMemcpyAtoH); GET_PROC(cuMemcpyAtoA); GET_PROC(cuMemcpy2D); GET_PROC(cuMemcpy2DUnaligned); GET_PROC(cuMemcpy3D); GET_PROC(cuMemcpyHtoDAsync); GET_PROC(cuMemcpyDtoHAsync); GET_PROC(cuMemcpyHtoAAsync); GET_PROC(cuMemcpyAtoHAsync); GET_PROC(cuMemcpy2DAsync); GET_PROC(cuMemcpy3DAsync); GET_PROC(cuMemsetD8); GET_PROC(cuMemsetD16); GET_PROC(cuMemsetD32); GET_PROC(cuMemsetD2D8); GET_PROC(cuMemsetD2D16); GET_PROC(cuMemsetD2D32); GET_PROC(cuFuncSetBlockShape); GET_PROC(cuFuncSetSharedSize); GET_PROC(cuFuncGetAttribute); GET_PROC(cuArrayCreate); GET_PROC(cuArrayGetDescriptor); GET_PROC(cuArrayDestroy); GET_PROC(cuArray3DCreate); GET_PROC(cuArray3DGetDescriptor); GET_PROC(cuTexRefCreate); GET_PROC(cuTexRefDestroy); GET_PROC(cuTexRefSetArray); GET_PROC(cuTexRefSetAddress); GET_PROC(cuTexRefSetAddress2D); GET_PROC(cuTexRefSetFormat); GET_PROC(cuTexRefSetAddressMode); GET_PROC(cuTexRefSetFilterMode); GET_PROC(cuTexRefSetFlags); GET_PROC(cuTexRefGetAddress); GET_PROC(cuTexRefGetArray); GET_PROC(cuTexRefGetAddressMode); GET_PROC(cuTexRefGetFilterMode); GET_PROC(cuTexRefGetFormat); GET_PROC(cuTexRefGetFlags); GET_PROC(cuParamSetSize); GET_PROC(cuParamSeti); GET_PROC(cuParamSetf); GET_PROC(cuParamSetv); GET_PROC(cuParamSetTexRef); GET_PROC(cuLaunch); GET_PROC(cuLaunchGrid); GET_PROC(cuLaunchGridAsync); GET_PROC(cuEventCreate); GET_PROC(cuEventRecord); GET_PROC(cuEventQuery); GET_PROC(cuEventSynchronize); GET_PROC(cuEventDestroy); GET_PROC(cuEventElapsedTime); GET_PROC(cuStreamCreate); GET_PROC(cuStreamQuery); GET_PROC(cuStreamSynchronize); GET_PROC(cuStreamDestroy); if (driverVer >= 2030) { GET_PROC(cuMemHostGetFlags); } if (driverVer >= 3000) { GET_PROC(cuMemcpyDtoDAsync); GET_PROC(cuFuncSetCacheConfig); GET_PROC(cuGraphicsUnregisterResource); GET_PROC(cuGraphicsSubResourceGetMappedArray); GET_PROC(cuGraphicsResourceGetMappedPointer); GET_PROC(cuGraphicsResourceSetMapFlags); GET_PROC(cuGraphicsMapResources); GET_PROC(cuGraphicsUnmapResources); GET_PROC(cuGetExportTable); } return CUDA_SUCCESS; }