]> git.nega.tv - josh/narcissus/commitdiff
vulkan-sys: Add `VK_KHR_get_surface_capabilities2`
authorJoshua Simmons <josh@nega.tv>
Fri, 5 Apr 2024 22:40:21 +0000 (00:40 +0200)
committerJoshua Simmons <josh@nega.tv>
Fri, 5 Apr 2024 22:40:21 +0000 (00:40 +0200)
external/vulkan-sys/src/functions.rs
external/vulkan-sys/src/lib.rs
external/vulkan-sys/src/structs.rs

index f4ff7b651afeb0ca991007ae16b41c9a2559b63a..e22a7115fa1663767e843e6b41062b168e11490d 100644 (file)
@@ -926,3 +926,16 @@ pub type FnAcquireNextImage2KHR = extern "system" fn(
     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;
index 260f6597be300ef8c88476ab104155a1724a4bc1..c5221769b84b4fed62c2a96269071adb878ce748 100644 (file)
@@ -2678,3 +2678,59 @@ impl SwapchainKHRFunctions {
         (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,
+        )
+    }
+}
index 3b539500eda21b9641c6795548f1b4a2c86d93d2..2d46a600eac8807b40ae9a325a4c2fbf5a2b4a17 100644 (file)
@@ -2667,6 +2667,57 @@ impl Default for PhysicalDeviceVulkan13Properties {
     }
 }
 
+#[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::*;