#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum VkFormat {
Undefined = 0,
R8Unorm = 9,
R8G8Unorm = 16,
R8G8B8Unorm = 23,
R8G8B8A8Unorm = 37,
R8G8B8A8Srgb = 43,
B8G8R8Unorm = 30,
B8G8R8A8Unorm = 44,
B8G8R8A8Srgb = 50,
R32Sfloat = 100,
R32G32Sfloat = 103,
R32G32B32A32Sfloat = 109,
R16Sfloat = 70,
R16G16Sfloat = 73,
R16G16B16A16Sfloat = 97,
Bc1RgbUnormBlock = 131,
Bc1RgbaUnormBlock = 132,
Bc1RgbaSrgbBlock = 134,
Bc3UnormBlock = 136,
Bc3SrgbBlock = 138,
Bc4UnormBlock = 137,
Bc5UnormBlock = 140,
Bc7UnormBlock = 145,
Bc7SrgbBlock = 146,
Etc2R8G8B8UnormBlock = 147,
Etc2R8G8B8SrgbBlock = 148,
Etc2R8G8B8A1UnormBlock = 149,
Etc2R8G8B8A1SrgbBlock = 150,
Etc2R8G8B8A8UnormBlock = 151,
Etc2R8G8B8A8SrgbBlock = 152,
Astc4x4UnormBlock = 157,
Astc4x4SrgbBlock = 158,
Astc8x8UnormBlock = 165,
Astc8x8SrgbBlock = 172,
}
impl VkFormat {
pub fn as_raw(&self) -> u32 {
*self as u32
}
pub fn from_raw(value: u32) -> Option<Self> {
match value {
0 => Some(VkFormat::Undefined),
9 => Some(VkFormat::R8Unorm),
16 => Some(VkFormat::R8G8Unorm),
23 => Some(VkFormat::R8G8B8Unorm),
37 => Some(VkFormat::R8G8B8A8Unorm),
43 => Some(VkFormat::R8G8B8A8Srgb),
30 => Some(VkFormat::B8G8R8Unorm),
44 => Some(VkFormat::B8G8R8A8Unorm),
50 => Some(VkFormat::B8G8R8A8Srgb),
100 => Some(VkFormat::R32Sfloat),
103 => Some(VkFormat::R32G32Sfloat),
109 => Some(VkFormat::R32G32B32A32Sfloat),
70 => Some(VkFormat::R16Sfloat),
73 => Some(VkFormat::R16G16Sfloat),
97 => Some(VkFormat::R16G16B16A16Sfloat),
131 => Some(VkFormat::Bc1RgbUnormBlock),
132 => Some(VkFormat::Bc1RgbaUnormBlock),
134 => Some(VkFormat::Bc1RgbaSrgbBlock),
136 => Some(VkFormat::Bc3UnormBlock),
138 => Some(VkFormat::Bc3SrgbBlock),
137 => Some(VkFormat::Bc4UnormBlock),
140 => Some(VkFormat::Bc5UnormBlock),
145 => Some(VkFormat::Bc7UnormBlock),
146 => Some(VkFormat::Bc7SrgbBlock),
147 => Some(VkFormat::Etc2R8G8B8UnormBlock),
148 => Some(VkFormat::Etc2R8G8B8SrgbBlock),
149 => Some(VkFormat::Etc2R8G8B8A1UnormBlock),
150 => Some(VkFormat::Etc2R8G8B8A1SrgbBlock),
151 => Some(VkFormat::Etc2R8G8B8A8UnormBlock),
152 => Some(VkFormat::Etc2R8G8B8A8SrgbBlock),
157 => Some(VkFormat::Astc4x4UnormBlock),
158 => Some(VkFormat::Astc4x4SrgbBlock),
165 => Some(VkFormat::Astc8x8UnormBlock),
172 => Some(VkFormat::Astc8x8SrgbBlock),
_ => None,
}
}
}
impl From<VkFormat> for u32 {
fn from(format: VkFormat) -> Self {
format.as_raw()
}
}
impl TryFrom<u32> for VkFormat {
type Error = ();
fn try_from(value: u32) -> Result<Self, Self::Error> {
VkFormat::from_raw(value).ok_or(())
}
}