mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-12 01:38:29 +12:00
40 lines
1.8 KiB
C++
40 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "Cafe/HW/Latte/Renderer/Metal/MetalAttachmentsInfo.h"
|
|
|
|
#include "Cafe/HW/Latte/ISA/LatteReg.h"
|
|
#include "Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompiler.h"
|
|
|
|
class MetalPipelineCompiler
|
|
{
|
|
public:
|
|
MetalPipelineCompiler(class MetalRenderer* metalRenderer) : m_mtlr{metalRenderer} {}
|
|
~MetalPipelineCompiler();
|
|
|
|
void InitFromState(const LatteFetchShader* fetchShader, const LatteDecompilerShader* vertexShader, const LatteDecompilerShader* geometryShader, const LatteDecompilerShader* pixelShader, const class MetalAttachmentsInfo& lastUsedAttachmentsInfo, const class MetalAttachmentsInfo& activeAttachmentsInfo, const LatteContextRegister& lcr, bool& fbosMatch);
|
|
|
|
MTL::RenderPipelineState* Compile(bool forceCompile, bool isRenderThread, bool showInOverlay, bool& attemptedCompilation);
|
|
|
|
private:
|
|
class MetalRenderer* m_mtlr;
|
|
|
|
class RendererShaderMtl* m_vertexShaderMtl;
|
|
class RendererShaderMtl* m_geometryShaderMtl;
|
|
class RendererShaderMtl* m_pixelShaderMtl;
|
|
bool m_usesGeometryShader;
|
|
bool m_rasterizationEnabled;
|
|
|
|
/*
|
|
std::map<uint64, MTL::RenderPipelineState*> m_pipelineCache;
|
|
|
|
NS::URL* m_binaryArchiveURL;
|
|
MTL::BinaryArchive* m_binaryArchive;
|
|
*/
|
|
NS::Object* m_pipelineDescriptor;
|
|
|
|
void InitFromStateRender(const LatteFetchShader* fetchShader, const LatteDecompilerShader* vertexShader, const class MetalAttachmentsInfo& lastUsedAttachmentsInfo, const class MetalAttachmentsInfo& activeAttachmentsInfo, const LatteContextRegister& lcr, bool& fbosMatch);
|
|
|
|
void InitFromStateMesh(const LatteFetchShader* fetchShader, const class MetalAttachmentsInfo& lastUsedAttachmentsInfo, const class MetalAttachmentsInfo& activeAttachmentsInfo, const LatteContextRegister& lcr, bool& fbosMatch);
|
|
|
|
//void TryLoadBinaryArchive();
|
|
};
|