pipelines.h

cross platform rendering playground

src/pipelines.h

1.02 KB
#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;
};