acquire_info: &AcquireNextImageInfoKHR,
image_index: &mut u32,
) -> Result;
+
+pub type FnGetPhysicalDeviceSurfaceCapabilities2KHR = extern "system" fn(
+ physical_device: PhysicalDevice,
+ surface_info: &PhysicalDeviceSurfaceInfo2KHR,
+ surface_capabilities: &mut SurfaceCapabilities2KHR,
+) -> Result;
+
+pub type FnGetPhysicalDeviceSurfaceFormats2KHR = extern "system" fn(
+ physical_device: PhysicalDevice,
+ surface_info: PhysicalDeviceSurfaceInfo2KHR,
+ surface_format_count: &mut u32,
+ surface_formats: *mut SurfaceFormat2KHR,
+) -> Result;
(self.queue_present)(queue, present_info)
}
}
+
+pub struct SurfaceCapabilities2KhrFunctions {
+ get_physical_device_surface_capabilities2_khr: FnGetPhysicalDeviceSurfaceCapabilities2KHR,
+ get_physical_device_surface_formats2_khr: FnGetPhysicalDeviceSurfaceFormats2KHR,
+}
+
+impl SurfaceCapabilities2KhrFunctions {
+ pub fn new(global_functions: &GlobalFunctions, instance: Instance) -> Self {
+ unsafe {
+ let load = |name: &CStr| {
+ global_functions
+ .get_instance_proc_addr(instance, name)
+ .unwrap_or_else(
+ #[cold]
+ || panic!("failed to load device function {}", name.to_string_lossy()),
+ )
+ };
+ Self {
+ get_physical_device_surface_formats2_khr: transmute::<_, _>(load(
+ c"vkGetPhysicalDeviceSurfaceFormats2KHR",
+ )),
+ get_physical_device_surface_capabilities2_khr: transmute::<_, _>(load(
+ c"vkGetPhysicalDeviceSurfaceCapabilities2KHR",
+ )),
+ }
+ }
+ }
+
+ pub unsafe fn get_physical_device_surface_capabilities2_khr(
+ &self,
+ physical_device: PhysicalDevice,
+ surface_info: &PhysicalDeviceSurfaceInfo2KHR,
+ surface_capabilities: &mut SurfaceCapabilities2KHR,
+ ) -> Result {
+ (self.get_physical_device_surface_capabilities2_khr)(
+ physical_device,
+ surface_info,
+ surface_capabilities,
+ )
+ }
+
+ pub unsafe fn get_physical_device_surface_formats2_khr(
+ &self,
+ physical_device: PhysicalDevice,
+ surface_info: PhysicalDeviceSurfaceInfo2KHR,
+ surface_format_count: &mut u32,
+ surface_formats: *mut SurfaceFormat2KHR,
+ ) -> Result {
+ (self.get_physical_device_surface_formats2_khr)(
+ physical_device,
+ surface_info,
+ surface_format_count,
+ surface_formats,
+ )
+ }
+}
}
}
+#[repr(C)]
+pub struct PhysicalDeviceSurfaceInfo2KHR {
+ pub _type: StructureType,
+ pub _next: *mut c_void,
+ pub surface: SurfaceKHR,
+}
+
+impl Default for PhysicalDeviceSurfaceInfo2KHR {
+ fn default() -> Self {
+ Self {
+ _type: StructureType::PhysicalDeviceSurfaceInfo2Khr,
+ _next: core::ptr::null_mut(),
+ surface: Default::default(),
+ }
+ }
+}
+
+#[repr(C)]
+pub struct SurfaceCapabilities2KHR {
+ pub _type: StructureType,
+ pub _next: *mut c_void,
+ pub surface_capabilities: SurfaceCapabilitiesKHR,
+}
+
+impl Default for SurfaceCapabilities2KHR {
+ fn default() -> Self {
+ Self {
+ _type: StructureType::SurfaceCapabilities2Khr,
+ _next: core::ptr::null_mut(),
+ surface_capabilities: Default::default(),
+ }
+ }
+}
+
+#[repr(C)]
+pub struct SurfaceFormat2KHR {
+ pub _type: StructureType,
+ pub _next: *mut c_void,
+ pub surface_format: SurfaceFormatKHR,
+}
+
+impl Default for SurfaceFormat2KHR {
+ fn default() -> Self {
+ Self {
+ _type: StructureType::SurfaceFormat2Khr,
+ _next: core::ptr::null_mut(),
+ surface_format: Default::default(),
+ }
+ }
+}
+
#[cfg(test)]
mod test {
use super::*;