1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//! VK_KHR_swapchain extension

use libc::*;
use super::*;

mod nd_handle_base_ts { pub enum VkSwapchainKHR {} }
pub type VkSwapchainKHR = VK_NON_DISPATCHABLE_HANDLE!(VkSwapchainKHR);

pub const VK_KHR_SWAPCHAIN_SPEC_VERSION: usize = 68;
pub const VK_KHR_SWAPCHAIN_EXTENSION_NAME: &str = "VK_KHR_swapchain";

pub type VkSwapchainCreateFlagsKHR = VkFlags;
pub const VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX: VkSwapchainCreateFlagsKHR = 0x01;

#[repr(C)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct VkSwapchainCreateInfoKHR
{
    pub sType: VkStructureType, pub pNext: *const c_void, pub flags: VkSwapchainCreateFlagsKHR,
    pub surface: VkSurfaceKHR, pub minImageCount: u32, pub imageFormat: VkFormat, pub imageColorSpace: VkColorSpaceKHR,
    pub imageExtent: VkExtent2D, pub imageArrayLayers: u32, pub imageUsage: VkImageUsageFlags, pub imageSharingMode: VkSharingMode,
    pub queueFamilyIndexCount: u32, pub pQueueFamilyIndices: *const u32, pub preTransform: VkSurfaceTransformFlagsKHR,
    pub compositeAlpha: VkCompositeAlphaFlagsKHR, pub presentMode: VkPresentModeKHR, pub clipped: VkBool32, pub oldSwapchain: VkSwapchainKHR
}
impl Default for VkSwapchainCreateInfoKHR
{
    fn default() -> Self
    {
        VkSwapchainCreateInfoKHR { sType: VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, .. unsafe { std::mem::zeroed() } }
    }
}

#[repr(C)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct VkPresentInfoKHR
{
    pub sType: VkStructureType, pub pNext: *const c_void,
    pub waitSemaphoreCount: u32, pub pWaitSemaphores: *const VkSemaphore,
    pub swapchainCount: u32, pub pSwapchains: *const VkSwapchainKHR,
    pub pImageIndices: *const u32, pub pResults: *mut VkResult
}
impl Default for VkPresentInfoKHR
{
    fn default() -> Self
    {
        VkPresentInfoKHR { sType: VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, .. unsafe { std::mem::zeroed() } }
    }
}

pub type PFN_vkCreateSwapchainKHR = extern "system" fn(device: VkDevice, pCreateInfo: *const VkSwapchainCreateInfoKHR, pAllocator: *const VkAllocationCallbacks, pSwapchain: *mut VkSwapchainKHR) -> VkResult;
pub type PFN_vkDestroySwapchainKHR = extern "system" fn(device: VkDevice, swapchain: VkSwapchainKHR, pAllocator: *const VkAllocationCallbacks);
pub type PFN_vkGetSwapchainImagesKHR = extern "system" fn(device: VkDevice, swapchain: VkSwapchainKHR, pSwapchainImageCount: *mut u32, pSwapchainImages: *mut VkImage) -> VkResult;
pub type PFN_vkAcquireNextImageKHR = extern "system" fn(device: VkDevice, swapchain: VkSwapchainKHR, timeout: u64, semaphore: VkSemaphore, fence: VkFence, pImageIndex: *mut u32) -> VkResult;
pub type PFN_vkQueuePresentKHR = extern "system" fn(queue: VkQueue, pPresentInfo: *const VkPresentInfoKHR) -> VkResult;

#[cfg(feature = "Implements")]
extern "system"
{
    pub fn vkCreateSwapchainKHR(device: VkDevice, pCreateInfo: *const VkSwapchainCreateInfoKHR, pAllocator: *const VkAllocationCallbacks, pSwapchain: *mut VkSwapchainKHR) -> VkResult;
    pub fn vkDestroySwapchainKHR(device: VkDevice, swapchain: VkSwapchainKHR, pAllocator: *const VkAllocationCallbacks);
    pub fn vkGetSwapchainImagesKHR(device: VkDevice, swapchain: VkSwapchainKHR, pSwapchainImageCount: *mut u32, pSwapchainImages: *mut VkImage) -> VkResult;
    pub fn vkAcquireNextImageKHR(device: VkDevice, swapchain: VkSwapchainKHR, timeout: u64, semaphore: VkSemaphore, fence: VkFence, pImageIndex: *mut u32) -> VkResult;
    pub fn vkQueuePresentKHR(queue: VkQueue, pPresentInfo: *const VkPresentInfoKHR) -> VkResult;
}