1 use crate::vk; 2 use crate::{Entry, Instance}; 3 use std::ffi::CStr; 4 use std::mem; 5 6 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_sample_locations.html> 7 #[derive(Clone)] 8 pub struct SampleLocations { 9 fp: vk::ExtSampleLocationsFn, 10 } 11 12 impl SampleLocations { new(entry: &Entry, instance: &Instance) -> Self13 pub fn new(entry: &Entry, instance: &Instance) -> Self { 14 let fp = vk::ExtSampleLocationsFn::load(|name| unsafe { 15 mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr())) 16 }); 17 Self { fp } 18 } 19 20 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html> 21 #[inline] get_physical_device_multisample_properties( &self, physical_device: vk::PhysicalDevice, samples: vk::SampleCountFlags, multisample_properties: &mut vk::MultisamplePropertiesEXT, )22 pub unsafe fn get_physical_device_multisample_properties( 23 &self, 24 physical_device: vk::PhysicalDevice, 25 samples: vk::SampleCountFlags, 26 multisample_properties: &mut vk::MultisamplePropertiesEXT, 27 ) { 28 (self.fp.get_physical_device_multisample_properties_ext)( 29 physical_device, 30 samples, 31 multisample_properties, 32 ) 33 } 34 35 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleLocationsEXT.html> 36 #[inline] cmd_set_sample_locations( &self, command_buffer: vk::CommandBuffer, sample_locations_info: &vk::SampleLocationsInfoEXT, )37 pub unsafe fn cmd_set_sample_locations( 38 &self, 39 command_buffer: vk::CommandBuffer, 40 sample_locations_info: &vk::SampleLocationsInfoEXT, 41 ) { 42 (self.fp.cmd_set_sample_locations_ext)(command_buffer, sample_locations_info) 43 } 44 45 #[inline] name() -> &'static CStr46 pub const fn name() -> &'static CStr { 47 vk::ExtSampleLocationsFn::name() 48 } 49 50 #[inline] fp(&self) -> &vk::ExtSampleLocationsFn51 pub fn fp(&self) -> &vk::ExtSampleLocationsFn { 52 &self.fp 53 } 54 } 55