yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
3aff764c2
master
1#include "slang-rt.h" 2 3#include "../core/slang-basic.h" 4#include "../core/slang-shared-library.h" 5 6#if SLANG_WINDOWS_FAMILY 7#include <windows.h> 8#endif 9 10using namespace Slang ; 11Dictionary < String ,ComPtr < ISlangSharedLibrary >> slangRT_loadedLibraries ; 12 13extern "C" 14{ 15SLANG_RT_API void SLANG_MCALL _slang_rt_abort (Slang ::String errorMessage ) 16 { 17fprintf (stderr ,"%s" ,errorMessage .getBuffer ()); 18#if SLANG_WINDOWS_FAMILY 19MessageBoxW (0 ,errorMessage .toWString (),L"Slang Runtime Error" ,MB_ICONERROR ); 20#endif 21abort (); 22 } 23 24SLANG_RT_API void * SLANG_MCALL _slang_rt_load_dll (Slang ::String modulePath ) 25 { 26ComPtr < ISlangSharedLibrary > lib ; 27if (!slangRT_loadedLibraries .tryGetValue (modulePath ,lib )) 28 { 29if (DefaultSharedLibraryLoader ::getSingleton ()-> loadSharedLibrary ( 30modulePath .getBuffer (), 31lib .writeRef ())!= SLANG_OK ) 32 { 33_slang_rt_abort ("Failed to load DLL \"" + modulePath + "\"" ); 34 } 35slangRT_loadedLibraries [modulePath ]= lib ; 36 } 37return lib .get (); 38 } 39 40SLANG_RT_API void * SLANG_MCALL 41_slang_rt_load_dll_func (void * moduleHandle ,Slang ::String funcName ,uint32_t argSize ) 42 { 43if (moduleHandle == nullptr ) 44 { 45moduleHandle = _slang_rt_load_dll ("" ); 46 } 47auto lib = static_cast < ISlangSharedLibrary *> (moduleHandle ); 48auto funcPtr = lib -> findFuncByName (funcName .getBuffer ()); 49if (!funcPtr ) 50 { 51// If failed, try stdcall mangled name. 52StringBuilder sb ; 53sb <<"_" <<funcName <<"@" <<argSize ; 54funcPtr = lib -> findFuncByName (sb .toString ().getBuffer ()); 55 } 56if (!funcPtr ) 57 { 58_slang_rt_abort ("Cannot find function \"" + funcName + "\" in loaded library." ); 59 } 60return (void * )funcPtr ; 61 } 62}