mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-04 14:01:17 +12:00
38 lines
1.4 KiB
C++
38 lines
1.4 KiB
C++
#include "Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.h"
|
|
#include "Cafe/HW/Latte/Renderer/Metal/MetalRenderer.h"
|
|
#include "Cafe/HW/Latte/Renderer/Metal/LatteToMtl.h"
|
|
#include "Cafe/HW/Latte/Renderer/Metal/MetalCommon.h"
|
|
//#include "Cemu/FileCache/FileCache.h"
|
|
//#include "config/ActiveSettings.h"
|
|
|
|
#include "Cemu/Logging/CemuLogging.h"
|
|
#include "Common/precompiled.h"
|
|
#include "HW/Latte/Core/FetchShader.h"
|
|
#include "HW/Latte/ISA/RegDefines.h"
|
|
|
|
extern std::atomic_int g_compiled_shaders_total;
|
|
extern std::atomic_int g_compiled_shaders_async;
|
|
|
|
RendererShaderMtl::RendererShaderMtl(MetalRenderer* mtlRenderer, ShaderType type, uint64 baseHash, uint64 auxHash, bool isGameShader, bool isGfxPackShader, const std::string& mslCode)
|
|
: RendererShader(type, baseHash, auxHash, isGameShader, isGfxPackShader), m_mtlr{mtlRenderer}
|
|
{
|
|
NS::Error* error = nullptr;
|
|
MTL::Library* library = m_mtlr->GetDevice()->newLibrary(ToNSString(mslCode), nullptr, &error);
|
|
if (error)
|
|
{
|
|
cemuLog_log(LogType::Force, "failed to create library: {} -> {}", error->localizedDescription()->utf8String(), mslCode.c_str());
|
|
error->release();
|
|
return;
|
|
}
|
|
m_function = library->newFunction(ToNSString("main0"));
|
|
library->release();
|
|
|
|
// Count shader compilation
|
|
g_compiled_shaders_total++;
|
|
}
|
|
|
|
RendererShaderMtl::~RendererShaderMtl()
|
|
{
|
|
if (m_function)
|
|
m_function->release();
|
|
}
|