use askama::Template;
use crate::{
render_passes::hzb::shader::cache_key::{ShaderCacheKeyHzbReduce, ShaderCacheKeyHzbSeed},
shaders::{AwsmShaderError, Result},
};
#[derive(Template, Debug)]
#[template(path = "hzb_wgsl/seed.wgsl", whitespace = "minimize")]
pub struct ShaderTemplateHzbSeed {
pub multisampled_geometry: bool,
}
impl TryFrom<&ShaderCacheKeyHzbSeed> for ShaderTemplateHzbSeed {
type Error = AwsmShaderError;
fn try_from(value: &ShaderCacheKeyHzbSeed) -> Result<Self> {
Ok(Self {
multisampled_geometry: value.msaa_sample_count.is_some(),
})
}
}
impl ShaderTemplateHzbSeed {
pub fn into_source(self) -> Result<String> {
self.render().map_err(AwsmShaderError::from)
}
pub fn debug_label(&self) -> Option<&str> {
Some("HZB Seed")
}
}
#[derive(Template, Debug, Default)]
#[template(path = "hzb_wgsl/reduce.wgsl", whitespace = "minimize")]
pub struct ShaderTemplateHzbReduce;
impl TryFrom<&ShaderCacheKeyHzbReduce> for ShaderTemplateHzbReduce {
type Error = AwsmShaderError;
fn try_from(_value: &ShaderCacheKeyHzbReduce) -> Result<Self> {
Ok(Self)
}
}
impl ShaderTemplateHzbReduce {
pub fn into_source(self) -> Result<String> {
self.render().map_err(AwsmShaderError::from)
}
pub fn debug_label(&self) -> Option<&str> {
Some("HZB Reduce")
}
}