spirv_reflect/types/
op.rs

1use crate::ffi;
2use num_traits::cast::FromPrimitive;
3use spirv_headers;
4use std::ops::Deref;
5
6#[derive(Debug, Copy, Clone, PartialEq)]
7pub struct ReflectOp(spirv_headers::Op);
8
9impl Default for ReflectOp {
10    fn default() -> Self {
11        ReflectOp(spirv_headers::Op::Nop)
12    }
13}
14
15impl Deref for ReflectOp {
16    type Target = spirv_headers::Op;
17    fn deref(&self) -> &spirv_headers::Op {
18        &self.0
19    }
20}
21
22impl From<ffi::SpvOp> for ReflectOp {
23    fn from(raw_op: ffi::SpvOp) -> Self {
24        match spirv_headers::Op::from_u32(raw_op as u32) {
25            Some(op) => ReflectOp(op),
26            None => Default::default(),
27        }
28    }
29}
30
31#[derive(Debug, Copy, Clone, PartialEq)]
32pub struct ReflectBuiltIn(spirv_headers::BuiltIn);
33
34impl Default for ReflectBuiltIn {
35    fn default() -> Self {
36        ReflectBuiltIn(spirv_headers::BuiltIn::Position)
37    }
38}
39
40impl Deref for ReflectBuiltIn {
41    type Target = spirv_headers::BuiltIn;
42    fn deref(&self) -> &spirv_headers::BuiltIn {
43        &self.0
44    }
45}
46
47impl From<ffi::SpvBuiltIn> for ReflectBuiltIn {
48    fn from(raw_built_in: ffi::SpvBuiltIn) -> Self {
49        match spirv_headers::BuiltIn::from_u32(raw_built_in as u32) {
50            Some(built_in) => ReflectBuiltIn(built_in),
51            None => Default::default(),
52        }
53    }
54}