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