#pragma once
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "backend/rhi.h"
struct Pipelines {
Pipelines(rhi::Device &device, rhi::ShaderCompiler &compiler);
~Pipelines() = default;
struct RenderEntry {
rhi::RenderPipelineDesc desc;
rhi::RenderPipeline pipeline;
u64 source_mtime = 0;
};
struct ComputeEntry {
rhi::ComputePipelineDesc desc;
rhi::ComputePipeline pipeline;
u64 source_mtime = 0;
};
rhi::RenderPipeline &add_render(const char *name, rhi::RenderPipelineDesc desc);
rhi::ComputePipeline &add_compute(const char *name, rhi::ComputePipelineDesc desc);
rhi::RenderPipeline &get_render(const char *name);
rhi::ComputePipeline &get_compute(const char *name);
void clear();
void reload();
private:
rhi::Device &device;
rhi::ShaderCompiler &compiler;
std::unordered_map<std::string, RenderEntry> render_entries;
std::unordered_map<std::string, ComputeEntry> compute_entries;
};