metaforce/aurora/lib/gfx/stream/shader.hpp

37 lines
1.1 KiB
C++
Raw Normal View History

2022-03-05 03:36:54 +00:00
#pragma once
#include "../common.hpp"
#include "../gx.hpp"
2022-03-05 03:36:54 +00:00
2022-03-07 23:53:42 +00:00
#include <unordered_map>
2022-03-05 03:36:54 +00:00
namespace aurora::gfx::stream {
struct DrawData {
PipelineRef pipeline;
Range vertRange;
Range uniformRange;
uint32_t vertexCount;
2022-03-07 23:53:42 +00:00
gx::GXBindGroups bindGroups;
2022-03-05 03:36:54 +00:00
};
2022-03-07 23:53:42 +00:00
struct PipelineConfig : public gx::PipelineConfig {};
2022-03-05 03:36:54 +00:00
struct CachedBindGroup {
wgpu::BindGroupLayout layout;
wgpu::BindGroup bindGroup;
CachedBindGroup(wgpu::BindGroupLayout layout, wgpu::BindGroup&& group)
: layout(std::move(layout)), bindGroup(std::move(group)) {}
};
struct State {
wgpu::BindGroupLayout samplerLayout;
wgpu::BindGroupLayout textureLayout;
mutable std::unordered_map<uint32_t, CachedBindGroup> uniform;
mutable std::unordered_map<uint64_t, wgpu::Sampler> sampler;
2022-03-07 23:53:42 +00:00
mutable std::unordered_map<PipelineRef, gx::ShaderInfo> shaderInfo;
2022-03-05 03:36:54 +00:00
};
State construct_state();
wgpu::RenderPipeline create_pipeline(const State& state, [[maybe_unused]] PipelineConfig config);
void render(const State& state, const DrawData& data, const wgpu::RenderPassEncoder& pass);
} // namespace aurora::gfx::stream