yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

cheneym2Fix precompiledTargetModule tests (#6455)02706dfc5

master
1.2 KiB50 linesraw
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,
24    List<ComPtr<ISlangBlob>>& kernelCodes)
25{
26    Module module;
27    module.stage = entryPointInfo->getStage();
28    module.entryPointName = entryPointInfo->getNameOverride();
29    module.code = kernelCodes[0];
30
31    dispatch_data_t data = dispatch_data_create(
32        kernelCodes[0]->getBufferPointer(),
33        kernelCodes[0]->getBufferSize(),
34        dispatch_get_main_queue(),
35        NULL);
36    NS::Error* error;
37    module.library = NS::TransferPtr(m_device->m_device->newLibrary(data, &error));
38    if (!module.library)
39    {
40        // TODO use better mechanism for reporting errors
41        std::cout << error->localizedDescription()->utf8String() << std::endl;
42        return SLANG_E_INVALID_ARG;
43    }
44
45    m_modules.add(module);
46    return SLANG_OK;
47}
48
49} // namespace metal
50} // namespace gfx