use crate::vk;
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
#[derive(Clone)]
pub struct SampleLocations {
fp: vk::ExtSampleLocationsFn,
}
impl SampleLocations {
pub fn new(entry: &Entry, instance: &Instance) -> Self {
let fp = vk::ExtSampleLocationsFn::load(|name| unsafe {
mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
});
Self { fp }
}
#[inline]
pub unsafe fn get_physical_device_multisample_properties(
&self,
physical_device: vk::PhysicalDevice,
samples: vk::SampleCountFlags,
multisample_properties: &mut vk::MultisamplePropertiesEXT,
) {
(self.fp.get_physical_device_multisample_properties_ext)(
physical_device,
samples,
multisample_properties,
)
}
#[inline]
pub unsafe fn cmd_set_sample_locations(
&self,
command_buffer: vk::CommandBuffer,
sample_locations_info: &vk::SampleLocationsInfoEXT,
) {
(self.fp.cmd_set_sample_locations_ext)(command_buffer, sample_locations_info)
}
#[inline]
pub const fn name() -> &'static CStr {
vk::ExtSampleLocationsFn::name()
}
#[inline]
pub fn fp(&self) -> &vk::ExtSampleLocationsFn {
&self.fp
}
}