24 const std::vector<std::function<std::shared_ptr<IShaderFrontend>()>> &shaderFrontendFactories,
25 const std::function<std::shared_ptr<IShaderIR>()> &shaderIRFactory =
nullptr)
27 for (
const auto &factory : shaderFrontendFactories)
29 auto frontend = factory();
44 std::unordered_map<ShaderID, ShaderIRModule>
build(
const std::vector<ShaderSourceDesc> &sources,
47 std::unordered_map<ShaderID, ShaderIRModule> out;
49 const auto irProcessor =
m_irs.at(targetIR);
50 for (
const auto &src : sources)
63 if (
auto it =
m_irs.find(irType); it !=
m_irs.end())
65 std::vector<ShaderIRModule *> ptrs;
66 for (
auto &m : modules)
71 std::vector<ShaderIRModule> tmp;
72 tmp.reserve(ptrs.size());
78 it->second->optimize(tmp);
80 for (
size_t i = 0; i < ptrs.size(); ++i)
82 *ptrs[i] = std::move(tmp[i]);
89 void registerIR(
const std::shared_ptr<IShaderIR> &ir) {
m_irs[ir->irType()] = ir; }
91 std::unordered_map<ShaderSourceType, std::shared_ptr<IShaderFrontend>>
m_frontends;
92 std::unordered_map<ShaderSourceType, std::shared_ptr<IShaderIR>>
m_irs;
This file contains the ShaderIR interface.
Class for managing shaders.
ShaderManager & operator=(ShaderManager &&)=delete
ShaderManager(const std::vector< std::function< std::shared_ptr< IShaderFrontend >()> > &shaderFrontendFactories, const std::function< std::shared_ptr< IShaderIR >()> &shaderIRFactory=nullptr)
ShaderManager & operator=(const ShaderManager &)=delete
std::unordered_map< ShaderSourceType, std::shared_ptr< IShaderIR > > m_irs
void registerIR(const std::shared_ptr< IShaderIR > &ir)
std::unordered_map< ShaderSourceType, std::shared_ptr< IShaderFrontend > > m_frontends
ShaderManager(const ShaderManager &)=delete
ShaderManager(ShaderManager &&)=delete
std::unordered_map< ShaderID, ShaderIRModule > build(const std::vector< ShaderSourceDesc > &sources, const ShaderSourceType targetIR) const
void registerFrontend(const std::shared_ptr< IShaderFrontend > &f)
void optimizeAll(const ShaderSourceType irType, R &&modules) const
Struct for shader intermediate representation module.