wasm2spirv 0.1.0

Compile your WebAssembly programs into SPIR-V shaders
Documentation
use rspirv::{
    dr::Operand,
    spirv::{BuiltIn, Decoration},
};

#[derive(Debug, Clone, PartialEq)]
pub enum VariableDecorator {
    BuiltIn(BuiltIn),
    DesctiptorSet(u32),
    Binding(u32),
}

#[derive(Debug, Clone, PartialEq)]
pub enum TypeDecorator {
    Block,
    BufferBlock,
    ArrayStride(u32),
}

#[derive(Debug, Clone, PartialEq)]
pub enum TypeMemberDecorator {
    Offset(u32),
    NonWriteable,
}

impl VariableDecorator {
    pub fn translate(&self, target: rspirv::spirv::Word, builder: &mut rspirv::dr::Builder) {
        match self {
            VariableDecorator::BuiltIn(x) => {
                builder.decorate(target, Decoration::BuiltIn, [Operand::BuiltIn(*x)])
            }
            VariableDecorator::DesctiptorSet(x) => builder.decorate(
                target,
                Decoration::DescriptorSet,
                [Operand::LiteralInt32(*x)],
            ),
            VariableDecorator::Binding(x) => {
                builder.decorate(target, Decoration::Binding, [Operand::LiteralInt32(*x)])
            }
        }
    }
}