mod surface;
use core;
use vks;
pub use self::surface::{SurfaceKhr, FromNativeSurfaceKhrParameters};
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum ColorSpaceKhr {
SRGBNonLinear,
Unknown(vks::VkColorSpaceKHR),
}
impl From<vks::VkColorSpaceKHR> for ColorSpaceKhr {
fn from(color_space: vks::VkColorSpaceKHR) -> Self {
match color_space {
vks::VK_COLORSPACE_SRGB_NONLINEAR_KHR => ColorSpaceKhr::SRGBNonLinear,
_ => ColorSpaceKhr::Unknown(color_space),
}
}
}
impl From<ColorSpaceKhr> for vks::VkColorSpaceKHR {
fn from(color_space: ColorSpaceKhr) -> Self {
match color_space {
ColorSpaceKhr::SRGBNonLinear => vks::VK_COLORSPACE_SRGB_NONLINEAR_KHR,
ColorSpaceKhr::Unknown(color_space) => color_space,
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum PresentModeKhr {
Immediate,
Mailbox,
Fifo,
FifoRelaxed,
Unknown(vks::VkPresentModeKHR),
}
impl From<vks::VkPresentModeKHR> for PresentModeKhr {
fn from(mode: vks::VkPresentModeKHR) -> Self {
match mode {
vks::VK_PRESENT_MODE_IMMEDIATE_KHR => PresentModeKhr::Immediate,
vks::VK_PRESENT_MODE_MAILBOX_KHR => PresentModeKhr::Mailbox,
vks::VK_PRESENT_MODE_FIFO_KHR => PresentModeKhr::Fifo,
vks::VK_PRESENT_MODE_FIFO_RELAXED_KHR => PresentModeKhr::FifoRelaxed,
_ => PresentModeKhr::Unknown(mode),
}
}
}
impl From<PresentModeKhr> for vks::VkPresentModeKHR {
fn from(mode: PresentModeKhr) -> Self {
match mode {
PresentModeKhr::Immediate => vks::VK_PRESENT_MODE_IMMEDIATE_KHR,
PresentModeKhr::Mailbox => vks::VK_PRESENT_MODE_MAILBOX_KHR,
PresentModeKhr::Fifo => vks::VK_PRESENT_MODE_FIFO_KHR,
PresentModeKhr::FifoRelaxed => vks::VK_PRESENT_MODE_FIFO_RELAXED_KHR,
PresentModeKhr::Unknown(mode) => mode,
}
}
}
bitflags! {
#[derive(Default)]
pub struct SurfaceTransformFlagsKhr: u32 {
const SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = vks::VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR;
const SURFACE_TRANSFORM_IDENTITY_BIT_KHR = vks::VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
const SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = vks::VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR;
const SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = vks::VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR;
const SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = vks::VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR;
const SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = vks::VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR;
const SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = vks::VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR;
const SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = vks::VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR;
const SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = vks::VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR;
const SURFACE_TRANSFORM_INHERIT_BIT_KHR = vks::VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR;
}
}
pub type SurfaceTransformFlagBitsKhr = SurfaceTransformFlagsKhr;
bitflags! {
#[derive(Default)]
pub struct CompositeAlphaFlagsKhr: u32 {
const COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = vks::VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR;
const COMPOSITE_ALPHA_OPAQUE_BIT_KHR = vks::VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
const COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = vks::VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR;
const COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = vks::VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR;
const COMPOSITE_ALPHA_INHERIT_BIT_KHR = vks::VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
}
}
pub type CompositeAlphaFlagBitsKhr = CompositeAlphaFlagsKhr;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct SurfaceCapabilitiesKhr {
pub min_image_count: u32,
pub max_image_count: Option<u32>,
pub current_extent: Option<core::Extent2D>,
pub min_image_extent: core::Extent2D,
pub max_image_extent: core::Extent2D,
pub max_image_array_layers: u32,
pub supported_transforms: SurfaceTransformFlagsKhr,
pub current_transform: SurfaceTransformFlagBitsKhr,
pub supported_composite_alpha: CompositeAlphaFlagsKhr,
pub supported_usage_flags: core::ImageUsageFlags,
}
impl<'a> From<&'a vks::VkSurfaceCapabilitiesKHR> for SurfaceCapabilitiesKhr {
fn from(capabilities: &'a vks::VkSurfaceCapabilitiesKHR) -> Self {
let max_image_count = if capabilities.maxImageCount > 0 {
Some(capabilities.maxImageCount)
}
else {
None
};
let current_extent = if (capabilities.currentExtent.width != ::std::u32::MAX) || (capabilities.currentExtent.height != ::std::u32::MAX) {
Some((&capabilities.currentExtent).into())
}
else {
None
};
SurfaceCapabilitiesKhr {
min_image_count: capabilities.minImageCount,
max_image_count: max_image_count,
current_extent: current_extent,
min_image_extent: (&capabilities.minImageExtent).into(),
max_image_extent: (&capabilities.maxImageExtent).into(),
max_image_array_layers: capabilities.maxImageArrayLayers,
supported_transforms: SurfaceTransformFlagsKhr::from_bits_truncate(capabilities.supportedTransforms),
current_transform: SurfaceTransformFlagsKhr::from_bits_truncate(capabilities.currentTransform),
supported_composite_alpha: CompositeAlphaFlagsKhr::from_bits_truncate(capabilities.supportedCompositeAlpha),
supported_usage_flags: core::ImageUsageFlags::from_bits_truncate(capabilities.supportedUsageFlags),
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct SurfaceFormatKhr {
pub format: core::Format,
pub color_space: ColorSpaceKhr,
}
impl<'a> From<&'a vks::VkSurfaceFormatKHR> for SurfaceFormatKhr {
fn from(format: &'a vks::VkSurfaceFormatKHR) -> Self {
SurfaceFormatKhr {
format: format.format.into(),
color_space: format.colorSpace.into(),
}
}
}