yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
02706dfc5
master
1// metal-shader-program.cpp 2#include "metal-shader-program.h" 3 4#include "metal-device.h" 5#include "metal-util.h" 6 7namespace gfx 8{ 9 10using namespace Slang ; 11 12namespace metal 13{ 14 15ShaderProgramImpl ::ShaderProgramImpl (DeviceImpl * device ) 16 :m_device (device ) 17{ 18} 19 20ShaderProgramImpl ::~ShaderProgramImpl () {} 21 22Result ShaderProgramImpl ::createShaderModule ( 23 slang::EntryPointReflection * entryPointInfo , 24List < ComPtr < ISlangBlob >>& kernelCodes ) 25{ 26Module module ; 27module .stage = entryPointInfo -> getStage (); 28module .entryPointName = entryPointInfo -> getNameOverride (); 29module .code = kernelCodes [0 ]; 30 31dispatch_data_t data = dispatch_data_create ( 32kernelCodes [0 ]-> getBufferPointer (), 33kernelCodes [0 ]-> getBufferSize (), 34dispatch_get_main_queue (), 35NULL ); 36NS ::Error * error ; 37module .library = NS ::TransferPtr (m_device -> m_device -> newLibrary (data ,& error )); 38if (!module .library ) 39 { 40// TODO use better mechanism for reporting errors 41 std::cout <<error -> localizedDescription ()-> utf8String () << std::endl ; 42return SLANG_E_INVALID_ARG ; 43 } 44 45m_modules .add (module ); 46return SLANG_OK ; 47} 48 49}// namespace metal 50}// namespace gfx