29#ifndef NV_FLOW_LOADER_H
30#define NV_FLOW_LOADER_H
34static void* NvFlowLoadLibrary(
const char* winName,
const char* linuxName)
36 return (
void*)LoadLibraryA(winName);
38static void* NvFlowGetProcAddress(
void* module,
const char* name)
40 return GetProcAddress((HMODULE)module, name);
42static void NvFlowFreeLibrary(
void* module)
44 FreeLibrary((HMODULE)module);
46static const char* NvFlowLoadLibraryError()
48 DWORD lastError = GetLastError();
49 static char buf[1024];
50 FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, lastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf,
sizeof(buf), NULL);
55static void* NvFlowLoadLibrary(
const char* winName,
const char* linuxName)
57 void*
module = dlopen(linuxName, RTLD_NOW);
64static void* NvFlowGetProcAddress(
void* module,
const char* name)
66 return dlsym(module, name);
68static void NvFlowFreeLibrary(
void* module)
72static const char* NvFlowLoadLibraryError()
83 void* module_nvflowext;
93static void NvFlowLoaderInitDeviceAPI(
NvFlowLoader* ptr,
void(*printError)(
const char* str,
void* userdata),
void* userdata, NvFlowContextApi deviceAPI)
98 ptr->module_nvflow = NvFlowLoadLibrary(
"nvflow.dll",
"libnvflow.so");
99 if (ptr->module_nvflow)
101 PFN_NvFlowGetOpList getOpList = (PFN_NvFlowGetOpList)NvFlowGetProcAddress(ptr->module_nvflow,
"NvFlowGetOpList");
103 if (getOpList) { NvFlowOpList_duplicate(&ptr->opList, getOpList()); }
107 printError(NvFlowLoadLibraryError(), userdata);
110 ptr->module_nvflowext = NvFlowLoadLibrary(
"nvflowext.dll",
"libnvflowext.so");
111 if (ptr->module_nvflowext)
113 PFN_NvFlowGetExtOpList getExtOpList = (PFN_NvFlowGetExtOpList)NvFlowGetProcAddress(ptr->module_nvflowext,
"NvFlowGetExtOpList");
114 PFN_NvFlowGetGridInterface getGridInterface = (PFN_NvFlowGetGridInterface)NvFlowGetProcAddress(ptr->module_nvflowext,
"NvFlowGetGridInterface");
115 PFN_NvFlowGetGridParamsInterface getGridParamsInterface = (PFN_NvFlowGetGridParamsInterface)NvFlowGetProcAddress(ptr->module_nvflowext,
"NvFlowGetGridParamsInterface");
116 PFN_NvFlowGetContextOptInterface getContextOptInterface = (PFN_NvFlowGetContextOptInterface)NvFlowGetProcAddress(ptr->module_nvflowext,
"NvFlowGetContextOptInterface");
117 PFN_NvFlowGetDeviceInterface getDeviceInterface = (PFN_NvFlowGetDeviceInterface)NvFlowGetProcAddress(ptr->module_nvflowext,
"NvFlowGetDeviceInterface");
119 if (getExtOpList) { NvFlowExtOpList_duplicate(&ptr->extOpList, getExtOpList()); }
120 if (getGridInterface) { NvFlowGridInterface_duplicate(&ptr->gridInterface, getGridInterface()); }
121 if (getGridParamsInterface) { NvFlowGridParamsInterface_duplicate(&ptr->gridParamsInterface, getGridParamsInterface()); }
122 if (getContextOptInterface) { NvFlowContextOptInterface_duplicate(&ptr->contextOptInterface, getContextOptInterface()); }
123 if (getDeviceInterface) { NvFlowDeviceInterface_duplicate(&ptr->deviceInterface, getDeviceInterface(deviceAPI)); }
127 printError(NvFlowLoadLibraryError(), userdata);
131static void NvFlowLoaderInit(
NvFlowLoader* ptr,
void(*printError)(
const char* str,
void* userdata),
void* userdata)
133 NvFlowLoaderInitDeviceAPI(ptr, printError, userdata, eNvFlowContextApi_vulkan);
138 NvFlowFreeLibrary(ptr->module_nvflow);
139 NvFlowFreeLibrary(ptr->module_nvflowext);
Definition NvFlowExt.h:2933
Definition NvFlowExt.h:3031
********************************* NvFlowExtOpList ***************************************
Definition NvFlowExt.h:2381
Definition NvFlowExt.h:2671
Definition NvFlowExt.h:2815
Definition NvFlowLoader.h:81
********************************* NvFlowOpList ***************************************
Definition NvFlow.h:1007