yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// cuda-helper-functions.cpp 2#include "cuda-helper-functions.h" 3 4#include "cuda-device.h" 5 6namespace gfx 7{ 8#ifdef GFX_ENABLE_CUDA 9using namespace Slang ; 10 11namespace cuda 12{ 13SlangResult CUDAErrorInfo ::handle ()const 14{ 15StringBuilder builder ; 16builder <<"Error: " <<m_filePath <<" (" <<m_lineNo <<") :" ; 17 18if (m_errorName ) 19 { 20builder <<m_errorName <<" : " ; 21 } 22if (m_errorString ) 23 { 24builder <<m_errorString ; 25 } 26 27getDebugCallback ()-> handleMessage ( 28DebugMessageType ::Error , 29DebugMessageSource ::Driver , 30builder .getUnownedSlice ().begin ()); 31 32// Slang::signalUnexpectedError(builder.getBuffer()); 33return SLANG_FAIL ; 34} 35 36SlangResult _handleCUDAError (CUresult cuResult ,const char * file ,int line ) 37{ 38CUDAErrorInfo info (file ,line ); 39cuGetErrorString (cuResult ,& info .m_errorString ); 40cuGetErrorName (cuResult ,& info .m_errorName ); 41return info .handle (); 42} 43 44#ifdef RENDER_TEST_OPTIX 45 46static bool _isError (OptixResult result ) 47{ 48return result != OPTIX_SUCCESS ; 49} 50 51#if 1 52static SlangResult _handleOptixError (OptixResult result ,char const * file ,int line ) 53{ 54fprintf ( 55stderr , 56"%s(%d): optix: %s (%s)\n" , 57file , 58line , 59optixGetErrorString (result ), 60optixGetErrorName (result )); 61return SLANG_FAIL ; 62} 63 64void _optixLogCallback (unsigned int level ,const char * tag ,const char * message ,void * userData ) 65{ 66fprintf (stderr ,"optix: %s (%s)\n" ,message ,tag ); 67} 68#endif 69#endif 70 71AdapterLUID getAdapterLUID (int deviceIndex ) 72{ 73CUdevice device ; 74cuDeviceGet (& device ,deviceIndex ); 75AdapterLUID luid = {}; 76unsigned int deviceNodeMask ; 77cuDeviceGetLuid ((char * )& luid ,& deviceNodeMask ,device ); 78return luid ; 79} 80 81Result SLANG_MCALL getAdapters (List < AdapterInfo >& outAdapters ) 82{ 83int deviceCount ; 84SLANG_CUDA_RETURN_ON_FAIL (cuDeviceGetCount (& deviceCount )); 85for (int deviceIndex = 0 ;deviceIndex < deviceCount ;deviceIndex ++ ) 86 { 87CUdevice device ; 88SLANG_CUDA_RETURN_ON_FAIL (cuDeviceGet (& device ,deviceIndex )); 89 90AdapterInfo info = {}; 91SLANG_CUDA_RETURN_ON_FAIL (cuDeviceGetName (info .name ,sizeof (info .name ),device )); 92info .luid = getAdapterLUID (deviceIndex ); 93outAdapters .add (info ); 94 } 95 96return SLANG_OK ; 97} 98 99}// namespace cuda 100 101Result SLANG_MCALL getCUDAAdapters (List < AdapterInfo >& outAdapters ) 102{ 103return cuda::getAdapters (outAdapters ); 104} 105 106Result SLANG_MCALL createCUDADevice (const IDevice ::Desc * desc ,IDevice ** outDevice ) 107{ 108RefPtr < cuda::DeviceImpl > result = new cuda::DeviceImpl (); 109SLANG_RETURN_ON_FAIL (result -> initialize (* desc )); 110returnComPtr (outDevice ,result ); 111return SLANG_OK ; 112} 113#else 114 115Result SLANG_MCALL getCUDAAdapters (List < AdapterInfo >& outAdapters ) 116{ 117SLANG_UNUSED (outAdapters ); 118return SLANG_FAIL ; 119} 120 121Result SLANG_MCALL createCUDADevice (const IDevice ::Desc * desc ,IDevice ** outDevice ) 122{ 123SLANG_UNUSED (desc ); 124* outDevice = nullptr ; 125return SLANG_FAIL ; 126} 127#endif 128 129}// namespace gfx