Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

47 lines
1.4 KiB
Plaintext

//
// Copyright Contributors to the MaterialX Project
// SPDX-License-Identifier: Apache-2.0
//
#include "CompileMsl.h"
#include <string>
#include <streambuf>
#include <MaterialXGenShader/ShaderGenerator.h>
#import <Metal/Metal.h>
id<MTLDevice> device = nil;
void CompileMslShader(const char* pShaderFilePath, const char* pEntryFuncName)
{
NSError* _Nullable error = nil;
if(device == nil)
device = MTLCreateSystemDefaultDevice();
NSString* filepath = [NSString stringWithUTF8String:pShaderFilePath];
NSString* shadersource = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:&error];
if(error != nil)
{
throw MaterialX::ExceptionShaderGenError("Cannot load file '" + std::string(pShaderFilePath) + "'.");
return;
}
MTLCompileOptions* options = [MTLCompileOptions new];
#ifdef MAC_OS_VERSION_11_0
if (@available(macOS 11.0, ios 14.0, *))
options.languageVersion = MTLLanguageVersion2_3;
else
#endif
options.languageVersion = MTLLanguageVersion2_0;
options.fastMathEnabled = true;
id<MTLLibrary> library = [device newLibraryWithSource:shadersource options:options error:&error];
if(library == nil)
{
throw MaterialX::ExceptionShaderGenError("Failed to create library out of '" + std::string(pShaderFilePath) + "'." +
std::string(error ? [[error localizedDescription] UTF8String] : ""));
return;
}
}