1 use crate::prelude::*; 2 use crate::vk; 3 use crate::{Entry, Instance}; 4 use std::ffi::CStr; 5 use std::mem; 6 use std::ptr; 7 8 #[derive(Clone)] 9 pub struct GetPhysicalDeviceProperties2 { 10 fp: vk::KhrGetPhysicalDeviceProperties2Fn, 11 } 12 13 impl GetPhysicalDeviceProperties2 { new(entry: &Entry, instance: &Instance) -> Self14 pub fn new(entry: &Entry, instance: &Instance) -> Self { 15 let fp = vk::KhrGetPhysicalDeviceProperties2Fn::load(|name| unsafe { 16 mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr())) 17 }); 18 Self { fp } 19 } 20 21 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceFeatures2KHR.html> 22 #[inline] get_physical_device_features2( &self, physical_device: vk::PhysicalDevice, features: &mut vk::PhysicalDeviceFeatures2KHR, )23 pub unsafe fn get_physical_device_features2( 24 &self, 25 physical_device: vk::PhysicalDevice, 26 features: &mut vk::PhysicalDeviceFeatures2KHR, 27 ) { 28 (self.fp.get_physical_device_features2_khr)(physical_device, features); 29 } 30 31 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html> 32 #[inline] get_physical_device_format_properties2( &self, physical_device: vk::PhysicalDevice, format: vk::Format, format_properties: &mut vk::FormatProperties2KHR, )33 pub unsafe fn get_physical_device_format_properties2( 34 &self, 35 physical_device: vk::PhysicalDevice, 36 format: vk::Format, 37 format_properties: &mut vk::FormatProperties2KHR, 38 ) { 39 (self.fp.get_physical_device_format_properties2_khr)( 40 physical_device, 41 format, 42 format_properties, 43 ); 44 } 45 46 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html> 47 #[inline] get_physical_device_image_format_properties2( &self, physical_device: vk::PhysicalDevice, image_format_info: &vk::PhysicalDeviceImageFormatInfo2KHR, image_format_properties: &mut vk::ImageFormatProperties2KHR, ) -> VkResult<()>48 pub unsafe fn get_physical_device_image_format_properties2( 49 &self, 50 physical_device: vk::PhysicalDevice, 51 image_format_info: &vk::PhysicalDeviceImageFormatInfo2KHR, 52 image_format_properties: &mut vk::ImageFormatProperties2KHR, 53 ) -> VkResult<()> { 54 (self.fp.get_physical_device_image_format_properties2_khr)( 55 physical_device, 56 image_format_info, 57 image_format_properties, 58 ) 59 .result() 60 } 61 62 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html> 63 #[inline] get_physical_device_memory_properties2( &self, physical_device: vk::PhysicalDevice, memory_properties: &mut vk::PhysicalDeviceMemoryProperties2KHR, )64 pub unsafe fn get_physical_device_memory_properties2( 65 &self, 66 physical_device: vk::PhysicalDevice, 67 memory_properties: &mut vk::PhysicalDeviceMemoryProperties2KHR, 68 ) { 69 (self.fp.get_physical_device_memory_properties2_khr)(physical_device, memory_properties); 70 } 71 72 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceProperties2KHR.html> 73 #[inline] get_physical_device_properties2( &self, physical_device: vk::PhysicalDevice, properties: &mut vk::PhysicalDeviceProperties2KHR, )74 pub unsafe fn get_physical_device_properties2( 75 &self, 76 physical_device: vk::PhysicalDevice, 77 properties: &mut vk::PhysicalDeviceProperties2KHR, 78 ) { 79 (self.fp.get_physical_device_properties2_khr)(physical_device, properties); 80 } 81 82 /// Retrieve the number of elements to pass to [`get_physical_device_queue_family_properties2()`][Self::get_physical_device_queue_family_properties2()] 83 #[inline] get_physical_device_queue_family_properties2_len( &self, physical_device: vk::PhysicalDevice, ) -> usize84 pub unsafe fn get_physical_device_queue_family_properties2_len( 85 &self, 86 physical_device: vk::PhysicalDevice, 87 ) -> usize { 88 let mut count = 0; 89 (self.fp.get_physical_device_queue_family_properties2_khr)( 90 physical_device, 91 &mut count, 92 ptr::null_mut(), 93 ); 94 count as usize 95 } 96 97 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html> 98 /// 99 /// Call [`get_physical_device_queue_family_properties2_len()`][Self::get_physical_device_queue_family_properties2_len()] to query the number of elements to pass to `out`. 100 /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. 101 #[inline] get_physical_device_queue_family_properties2( &self, physical_device: vk::PhysicalDevice, out: &mut [vk::QueueFamilyProperties2KHR], )102 pub unsafe fn get_physical_device_queue_family_properties2( 103 &self, 104 physical_device: vk::PhysicalDevice, 105 out: &mut [vk::QueueFamilyProperties2KHR], 106 ) { 107 let mut count = out.len() as u32; 108 (self.fp.get_physical_device_queue_family_properties2_khr)( 109 physical_device, 110 &mut count, 111 out.as_mut_ptr(), 112 ); 113 assert_eq!(count as usize, out.len()); 114 } 115 116 /// Retrieve the number of elements to pass to [`get_physical_device_sparse_image_format_properties2()`][Self::get_physical_device_sparse_image_format_properties2()] 117 #[inline] get_physical_device_sparse_image_format_properties2_len( &self, physical_device: vk::PhysicalDevice, format_info: &vk::PhysicalDeviceSparseImageFormatInfo2KHR, ) -> usize118 pub unsafe fn get_physical_device_sparse_image_format_properties2_len( 119 &self, 120 physical_device: vk::PhysicalDevice, 121 format_info: &vk::PhysicalDeviceSparseImageFormatInfo2KHR, 122 ) -> usize { 123 let mut count = 0; 124 (self 125 .fp 126 .get_physical_device_sparse_image_format_properties2_khr)( 127 physical_device, 128 format_info, 129 &mut count, 130 ptr::null_mut(), 131 ); 132 count as usize 133 } 134 135 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html> 136 /// 137 /// Call [`get_physical_device_sparse_image_format_properties2_len()`][Self::get_physical_device_sparse_image_format_properties2_len()] to query the number of elements to pass to `out`. 138 /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. 139 #[inline] get_physical_device_sparse_image_format_properties2( &self, physical_device: vk::PhysicalDevice, format_info: &vk::PhysicalDeviceSparseImageFormatInfo2KHR, out: &mut [vk::SparseImageFormatProperties2KHR], )140 pub unsafe fn get_physical_device_sparse_image_format_properties2( 141 &self, 142 physical_device: vk::PhysicalDevice, 143 format_info: &vk::PhysicalDeviceSparseImageFormatInfo2KHR, 144 out: &mut [vk::SparseImageFormatProperties2KHR], 145 ) { 146 let mut count = out.len() as u32; 147 (self 148 .fp 149 .get_physical_device_sparse_image_format_properties2_khr)( 150 physical_device, 151 format_info, 152 &mut count, 153 out.as_mut_ptr(), 154 ); 155 assert_eq!(count as usize, out.len()); 156 } 157 158 #[inline] name() -> &'static CStr159 pub const fn name() -> &'static CStr { 160 vk::KhrGetPhysicalDeviceProperties2Fn::name() 161 } 162 163 #[inline] fp(&self) -> &vk::KhrGetPhysicalDeviceProperties2Fn164 pub fn fp(&self) -> &vk::KhrGetPhysicalDeviceProperties2Fn { 165 &self.fp 166 } 167 } 168