use valo_geometry::Color;
use crate::host_buffer::{DrawSlot, VertexSlot};
use crate::pipelines::PipelineKey;
use crate::renderer::RenderStats;
pub(crate) struct FramePlan {
pub passes: Vec<PlannedPass>,
pub stats: RenderStats,
}
pub(crate) struct PlannedPass {
pub color: PassColor,
pub depth: Option<wgpu::TextureView>,
pub clear: Option<Color>,
pub clear_depth: bool,
pub store: bool,
pub pre_copies: Vec<TextureCopy>,
pub steps: Vec<Step>,
}
pub(crate) fn replace_msaa(color: &mut PassColor, msaa: &wgpu::TextureView) {
match color {
PassColor::Main { msaa: attachment }
| PassColor::Layer {
msaa: attachment, ..
} => *attachment = msaa.clone(),
PassColor::Filter { .. } => unreachable!("filter passes never open a frame"),
}
}
pub(crate) enum PassColor {
Main { msaa: wgpu::TextureView },
Layer {
msaa: wgpu::TextureView,
resolve: wgpu::TextureView,
},
Filter { view: wgpu::TextureView },
}
pub(crate) struct TextureCopy {
pub src: wgpu::Texture,
pub dst: wgpu::Texture,
pub origin: [u32; 2],
pub size: [u32; 2],
}
pub(crate) struct Step {
pub key: PipelineKey,
pub uniforms: DrawSlot,
pub texture: Option<wgpu::BindGroup>,
pub mesh: Option<(VertexSlot, u32)>,
pub sort_z: f32,
}