diff options
| author | Simon Kallweit <simon.kallweit@gmail.com> | 2024-05-27 06:03:13 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-27 15:03:13 +0200 |
| commit | d9443d670ef8413971fe7c3f02368b60a7fc5904 (patch) | |
| tree | 001e763846b23814b0e4960991fc457d7b580a0f /tools/gfx/metal/metal-shader-program.cpp | |
| parent | 4f1cbf6f4d561320b8e3c73b871cc95dd13c6207 (diff) | |
[gfx] metal backend skeleton (#4223)
* add metal-cpp submodule
* add metal-cpp cmake target
* gfx metal backend skeleton
* add premake support
* add foundation framework
* add metal-cpp include to premake
* update vs project file
---------
Co-authored-by: Simon Kallweit <skallweit@nvidia.com>
Co-authored-by: Jay Kwak <82421531+jkwak-work@users.noreply.github.com>
Diffstat (limited to 'tools/gfx/metal/metal-shader-program.cpp')
| -rw-r--r-- | tools/gfx/metal/metal-shader-program.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/gfx/metal/metal-shader-program.cpp b/tools/gfx/metal/metal-shader-program.cpp new file mode 100644 index 000000000..05f5f9b53 --- /dev/null +++ b/tools/gfx/metal/metal-shader-program.cpp @@ -0,0 +1,49 @@ +// metal-shader-program.cpp +#include "metal-shader-program.h" + +#include "metal-device.h" + +namespace gfx +{ + +using namespace Slang; + +namespace metal +{ + +ShaderProgramImpl::ShaderProgramImpl(DeviceImpl* device) + : m_device(device) +{ +} + +ShaderProgramImpl::~ShaderProgramImpl() +{ +} + +void ShaderProgramImpl::comFree() { } + +Result ShaderProgramImpl::createShaderModule( + slang::EntryPointReflection* entryPointInfo, ComPtr<ISlangBlob> kernelCode) +{ + if (entryPointInfo == nullptr || kernelCode == nullptr || kernelCode->getBufferSize() == 0) + { + return SLANG_E_INVALID_ARG; + } + + auto realEntryPointName = entryPointInfo->getNameOverride(); + std::string sourceStr(static_cast<const char*>(kernelCode->getBufferPointer()), kernelCode->getBufferSize()); + NS::String *nsSourceString = NS::String::alloc()->init(sourceStr.c_str(), NS::UTF8StringEncoding); + NS::Error* error; + MTL::Library* library = m_device->m_device->newLibrary(nsSourceString, nullptr, &error); + if (library == nullptr) + { + std::cout << error->localizedDescription()->utf8String() << std::endl; + return SLANG_E_INVALID_ARG; + } + m_entryPointNames.add(realEntryPointName); + m_modules.add(library); + return SLANG_OK; +} + +} // namespace metal +} // namespace gfx |
