#![allow(dead_code)]
#![allow(non_camel_case_types, non_snake_case)]
use libc::{c_void, c_char, size_t, c_float};
use super::types::*;
pub type VkSurfaceTransformFlagsKHR = VkFlags;
pub type VkCompositeAlphaFlagsKHR = VkFlags;
pub type VkSwapchainCreateFlagsKHR = VkFlags;
pub type VkDeviceAddress = u64;
#[repr(C)]
pub struct VkSurfaceKHROpaque { _private: [u8; 0] }
pub type VkSurfaceKHR = *mut VkSurfaceKHROpaque;
#[repr(C)]
pub struct VkSwapchainKHROpaque { _private: [u8; 0] }
pub type VkSwapchainKHR = *mut VkSwapchainKHROpaque;
#[repr(C)]
pub enum VkSurfaceTransformFlagBitsKHR {
VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF,
}
#[repr(C)]
pub struct VkSurfaceCapabilitiesKHR {
pub minImageCount: u32,
pub maxImageCount: u32,
pub currentExtent: VkExtent2D,
pub minImageExtent: VkExtent2D,
pub maxImageExtent: VkExtent2D,
pub maxImageArrayLayers: u32,
pub supportedTransforms: VkSurfaceTransformFlagsKHR,
pub currentTransform: VkSurfaceTransformFlagBitsKHR,
pub supportedCompositeAlpha: VkCompositeAlphaFlagsKHR,
pub supportedUsageFlags: VkImageUsageFlags,
}
#[repr(C)]
pub enum VkStructureTypeExt {
VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
}
#[repr(C)]
#[derive(Clone)]
#[derive(Debug)]
pub struct VkSurfaceFormatKHR {
pub format: VkFormat,
pub colorSpace: VkColorSpaceKHR,
}
#[repr(C)]
#[derive(Clone, Copy)]
#[derive(Debug, PartialEq, Eq)]
pub enum VkColorSpaceKHR {
VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003,
VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000,
VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF,
}
#[repr(C)]
#[derive(Clone)]
#[derive(Debug, PartialEq, Eq)]
pub enum VkPresentModeKHR {
VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
VK_PRESENT_MODE_MAILBOX_KHR = 1,
VK_PRESENT_MODE_FIFO_KHR = 2,
VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF,
}
#[repr(C)]
#[derive(Clone)]
#[derive(Debug, PartialEq, Eq)]
pub enum VkCompositeAlphaFlagBitsKHR {
VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
}
#[repr(C)]
pub struct VkSwapchainCreateInfoKHR {
pub sType: VkStructureTypeExt,
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: VkSurfaceTransformFlagBitsKHR,
pub compositeAlpha: VkCompositeAlphaFlagBitsKHR,
pub presentMode: VkPresentModeKHR,
pub clipped: VkBool32,
pub oldSwapchain: VkSwapchainKHR,
}
#[repr(C)]
pub struct VkPresentInfoKHR {
pub sType: VkStructureTypeExt,
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,
}
#[link(name = "vulkan")]
extern "C" {
pub fn vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
physicalDevice: VkPhysicalDevice,
surface: VkSurfaceKHR,
pSurfaceCapabilities: *mut VkSurfaceCapabilitiesKHR,
) -> VkResult;
pub fn vkDestroySurfaceKHR(
instance: VkInstance,
surface: VkSurfaceKHR,
pAllocator: *const VkAllocationCallbacks,
);
pub fn vkGetPhysicalDeviceSurfaceFormatsKHR(
physicalDevice: VkPhysicalDevice,
surface: VkSurfaceKHR,
pSurfaceFormatCount: *mut u32,
pSurfaceFormats: *mut VkSurfaceFormatKHR,
) -> VkResult;
pub fn vkGetPhysicalDeviceSurfacePresentModesKHR(
physicalDevice: VkPhysicalDevice,
surface: VkSurfaceKHR,
pPresentModeCount: *mut u32,
pPresentModes: *mut VkPresentModeKHR,
) -> VkResult;
pub fn vkGetPhysicalDeviceSurfaceSupportKHR(
physicalDevice: VkPhysicalDevice,
queueFamilyIndex: u32,
surface: VkSurfaceKHR,
pSupported: *mut VkBool32,
) -> VkResult;
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;
pub fn vkGetBufferDeviceAddress(
device: VkDevice,
pInfo: *const VkBufferDeviceAddressInfo,
) -> VkDeviceAddress;
}
mod xcb {
use super::*;
use crate::ffi::xcb::*;
pub type VkXcbSurfaceCreateFlagsKHR = VkFlags;
#[repr(C)]
pub struct VkXcbSurfaceCreateInfoKHR {
pub sType: VkStructureTypeExt,
pub pNext: *const c_void,
pub flags: VkXcbSurfaceCreateFlagsKHR,
pub connection: *const xcb_connection_t,
pub window: xcb_window_t,
}
impl VkXcbSurfaceCreateInfoKHR {
pub fn new(connection: *const xcb_connection_t, window: xcb_window_t) -> Self {
Self {
sType: VkStructureTypeExt::VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
pNext: std::ptr::null(),
flags: VK_FLAGS_NONE,
connection,
window,
}
}
}
#[link(name = "vulkan")]
extern "C" {
pub fn vkCreateXcbSurfaceKHR(
instance: VkInstance,
pCreateInfo: *const VkXcbSurfaceCreateInfoKHR,
pAllocator: *const VkAllocationCallbacks,
pSurface: *mut VkSurfaceKHR,
) -> VkResult;
}
}
pub use xcb::*;