use core::ptr;
use khr_surface;
use libc::c_void;
use vk;
pub const VK_KHR_SWAPCHAIN_SPEC_VERSION: u32 = 68;
pub const VK_KHR_SWAPCHAIN_EXTENSION_NAME: &'static [u8; 17] = b"VK_KHR_swapchain\x00";
pub const VK_KHR_SWAPCHAIN_EXTENSION_NAME_STR: &'static str = "VK_KHR_swapchain";
define_non_dispatchable_handle!(
struct VkSwapchainKHR;
);
vks_bitflags! {
pub struct VkSwapchainCreateFlagsKHR: u32 {
const VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7fffffff;
#[cfg(feature = "experimental")]
const VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX = 0x00000001;
}
}
pub type VkSwapchainCreateFlagBitsKHR = VkSwapchainCreateFlagsKHR;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkSwapchainCreateInfoKHR {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub flags: VkSwapchainCreateFlagsKHR,
pub surface: khr_surface::VkSurfaceKHR,
pub minImageCount: u32,
pub imageFormat: vk::VkFormat,
pub imageColorSpace: khr_surface::VkColorSpaceKHR,
pub imageExtent: vk::VkExtent2D,
pub imageArrayLayers: u32,
pub imageUsage: vk::VkImageUsageFlags,
pub imageSharingMode: vk::VkSharingMode,
pub queueFamilyIndexCount: u32,
pub pQueueFamilyIndices: *const u32,
pub preTransform: khr_surface::VkSurfaceTransformFlagBitsKHR,
pub compositeAlpha: khr_surface::VkCompositeAlphaFlagBitsKHR,
pub presentMode: khr_surface::VkPresentModeKHR,
pub clipped: vk::VkBool32,
pub oldSwapchain: VkSwapchainKHR,
}
impl Default for VkSwapchainCreateInfoKHR {
fn default() -> Self {
VkSwapchainCreateInfoKHR {
sType: vk::VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
pNext: ptr::null(),
flags: Default::default(),
surface: Default::default(),
minImageCount: Default::default(),
imageFormat: Default::default(),
imageColorSpace: Default::default(),
imageExtent: Default::default(),
imageArrayLayers: Default::default(),
imageUsage: Default::default(),
imageSharingMode: Default::default(),
queueFamilyIndexCount: Default::default(),
pQueueFamilyIndices: ptr::null(),
preTransform: Default::default(),
compositeAlpha: Default::default(),
presentMode: Default::default(),
clipped: Default::default(),
oldSwapchain: Default::default(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkPresentInfoKHR {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub waitSemaphoreCount: u32,
pub pWaitSemaphores: *const vk::VkSemaphore,
pub swapchainCount: u32,
pub pSwapchains: *const VkSwapchainKHR,
pub pImageIndices: *const u32,
pub pResults: *mut vk::VkResult,
}
impl Default for VkPresentInfoKHR {
fn default() -> Self {
VkPresentInfoKHR {
sType: vk::VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
pNext: ptr::null(),
waitSemaphoreCount: Default::default(),
pWaitSemaphores: ptr::null(),
swapchainCount: Default::default(),
pSwapchains: ptr::null(),
pImageIndices: ptr::null(),
pResults: ptr::null_mut(),
}
}
}
pub type PFN_vkCreateSwapchainKHR = Option<unsafe extern "system" fn(device: vk::VkDevice, pCreateInfo: *const VkSwapchainCreateInfoKHR, pAllocator: *const vk::VkAllocationCallbacks, pSwapchain: *mut VkSwapchainKHR) -> vk::VkResult>;
pub type PFN_vkDestroySwapchainKHR = Option<unsafe extern "system" fn(device: vk::VkDevice, swapchain: VkSwapchainKHR, pAllocator: *const vk::VkAllocationCallbacks)>;
pub type PFN_vkGetSwapchainImagesKHR = Option<unsafe extern "system" fn(device: vk::VkDevice, swapchain: VkSwapchainKHR, pSwapchainImageCount: *mut u32, pSwapchainImages: *mut vk::VkImage) -> vk::VkResult>;
pub type PFN_vkAcquireNextImageKHR = Option<unsafe extern "system" fn(device: vk::VkDevice, swapchain: VkSwapchainKHR, timeout: u64, semaphore: vk::VkSemaphore, fence: vk::VkFence, pImageIndex: *mut u32) -> vk::VkResult>;
pub type PFN_vkQueuePresentKHR = Option<unsafe extern "system" fn(queue: vk::VkQueue, pPresentInfo: *const VkPresentInfoKHR) -> vk::VkResult>;
#[cfg(feature = "function_prototypes")]
extern "system" {
pub fn vkCreateSwapchainKHR(device: vk::VkDevice, pCreateInfo: *const VkSwapchainCreateInfoKHR, pAllocator: *const vk::VkAllocationCallbacks, pSwapchain: *mut VkSwapchainKHR) -> vk::VkResult;
pub fn vkDestroySwapchainKHR(device: vk::VkDevice, swapchain: VkSwapchainKHR, pAllocator: *const vk::VkAllocationCallbacks);
pub fn vkGetSwapchainImagesKHR(device: vk::VkDevice, swapchain: VkSwapchainKHR, pSwapchainImageCount: *mut u32, pSwapchainImages: *mut vk::VkImage) -> vk::VkResult;
pub fn vkAcquireNextImageKHR(device: vk::VkDevice, swapchain: VkSwapchainKHR, timeout: u64, semaphore: vk::VkSemaphore, fence: vk::VkFence, pImageIndex: *mut u32) -> vk::VkResult;
pub fn vkQueuePresentKHR(queue: vk::VkQueue, pPresentInfo: *const VkPresentInfoKHR) -> vk::VkResult;
}