rafx-plugins 0.0.16

Rendering framework built on an extensible asset pipeline
Documentation
// This code is auto-generated by the shader processor.

#[allow(unused_imports)]
use rafx::RafxResult;

#[allow(unused_imports)]
use rafx::framework::{
    DescriptorSetAllocator, DescriptorSetArc, DescriptorSetBindings, DescriptorSetInitializer,
    DescriptorSetWriter, DescriptorSetWriterContext, DynDescriptorSet, ImageViewResource,
    ResourceArc,
};

#[derive(Copy, Clone, Debug)]
#[repr(C)]
pub struct DepthPyramidConfigStd140 {
    pub input_width: u32,  // +0 (size: 4)
    pub input_height: u32, // +4 (size: 4)
    pub odd_width: u32,    // +8 (size: 4)
    pub odd_height: u32,   // +12 (size: 4)
} // 16 bytes

impl Default for DepthPyramidConfigStd140 {
    fn default() -> Self {
        DepthPyramidConfigStd140 {
            input_width: <u32>::default(),
            input_height: <u32>::default(),
            odd_width: <u32>::default(),
            odd_height: <u32>::default(),
        }
    }
}

pub type DepthPyramidConfigUniform = DepthPyramidConfigStd140;

pub const CONFIG_DESCRIPTOR_SET_INDEX: usize = 0;
pub const CONFIG_DESCRIPTOR_BINDING_INDEX: usize = 0;
pub const SRC_DEPTH_TEX_DESCRIPTOR_SET_INDEX: usize = 0;
pub const SRC_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX: usize = 1;
pub const SMP_DESCRIPTOR_SET_INDEX: usize = 0;
pub const SMP_DESCRIPTOR_BINDING_INDEX: usize = 2;
pub const DST_DEPTH_TEX_DESCRIPTOR_SET_INDEX: usize = 0;
pub const DST_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX: usize = 3;

pub struct DescriptorSet0Args<'a> {
    pub config: &'a DepthPyramidConfigUniform,
    pub src_depth_tex: &'a ResourceArc<ImageViewResource>,
    pub dst_depth_tex: &'a ResourceArc<ImageViewResource>,
}

impl<'a> DescriptorSetInitializer<'a> for DescriptorSet0Args<'a> {
    type Output = DescriptorSet0;

    fn create_dyn_descriptor_set(
        descriptor_set: DynDescriptorSet,
        args: Self,
    ) -> Self::Output {
        let mut descriptor = DescriptorSet0(descriptor_set);
        descriptor.set_args(args);
        descriptor
    }

    fn create_descriptor_set(
        descriptor_set_allocator: &mut DescriptorSetAllocator,
        descriptor_set: DynDescriptorSet,
        args: Self,
    ) -> RafxResult<DescriptorSetArc> {
        let mut descriptor = Self::create_dyn_descriptor_set(descriptor_set, args);
        descriptor.0.flush(descriptor_set_allocator)?;
        Ok(descriptor.0.descriptor_set().clone())
    }
}

impl<'a> DescriptorSetWriter<'a> for DescriptorSet0Args<'a> {
    fn write_to(
        descriptor_set: &mut DescriptorSetWriterContext,
        args: Self,
    ) {
        descriptor_set.set_buffer_data(CONFIG_DESCRIPTOR_BINDING_INDEX as u32, args.config);
        descriptor_set.set_image(
            SRC_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX as u32,
            args.src_depth_tex,
        );
        descriptor_set.set_image(
            DST_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX as u32,
            args.dst_depth_tex,
        );
    }
}

pub struct DescriptorSet0(pub DynDescriptorSet);

impl DescriptorSet0 {
    pub fn set_args_static(
        descriptor_set: &mut DynDescriptorSet,
        args: DescriptorSet0Args,
    ) {
        descriptor_set.set_buffer_data(CONFIG_DESCRIPTOR_BINDING_INDEX as u32, args.config);
        descriptor_set.set_image(
            SRC_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX as u32,
            args.src_depth_tex,
        );
        descriptor_set.set_image(
            DST_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX as u32,
            args.dst_depth_tex,
        );
    }

    pub fn set_args(
        &mut self,
        args: DescriptorSet0Args,
    ) {
        self.set_config(args.config);
        self.set_src_depth_tex(args.src_depth_tex);
        self.set_dst_depth_tex(args.dst_depth_tex);
    }

    pub fn set_config(
        &mut self,
        config: &DepthPyramidConfigUniform,
    ) {
        self.0
            .set_buffer_data(CONFIG_DESCRIPTOR_BINDING_INDEX as u32, config);
    }

    pub fn set_src_depth_tex(
        &mut self,
        src_depth_tex: &ResourceArc<ImageViewResource>,
    ) {
        self.0
            .set_image(SRC_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX as u32, src_depth_tex);
    }

    pub fn set_dst_depth_tex(
        &mut self,
        dst_depth_tex: &ResourceArc<ImageViewResource>,
    ) {
        self.0
            .set_image(DST_DEPTH_TEX_DESCRIPTOR_BINDING_INDEX as u32, dst_depth_tex);
    }

    pub fn flush(
        &mut self,
        descriptor_set_allocator: &mut DescriptorSetAllocator,
    ) -> RafxResult<()> {
        self.0.flush(descriptor_set_allocator)
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_struct_depth_pyramid_config_std140() {
        assert_eq!(std::mem::size_of::<DepthPyramidConfigStd140>(), 16);
        assert_eq!(std::mem::size_of::<u32>(), 4);
        assert_eq!(std::mem::align_of::<u32>(), 4);
        assert_eq!(
            memoffset::offset_of!(DepthPyramidConfigStd140, input_width),
            0
        );
        assert_eq!(std::mem::size_of::<u32>(), 4);
        assert_eq!(std::mem::align_of::<u32>(), 4);
        assert_eq!(
            memoffset::offset_of!(DepthPyramidConfigStd140, input_height),
            4
        );
        assert_eq!(std::mem::size_of::<u32>(), 4);
        assert_eq!(std::mem::align_of::<u32>(), 4);
        assert_eq!(
            memoffset::offset_of!(DepthPyramidConfigStd140, odd_width),
            8
        );
        assert_eq!(std::mem::size_of::<u32>(), 4);
        assert_eq!(std::mem::align_of::<u32>(), 4);
        assert_eq!(
            memoffset::offset_of!(DepthPyramidConfigStd140, odd_height),
            12
        );
    }
}