ash/extensions/ext/
image_drm_format_modifier.rs1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
9pub struct ImageDrmFormatModifier {
10 handle: vk::Device,
11 fp: vk::ExtImageDrmFormatModifierFn,
12}
13
14impl ImageDrmFormatModifier {
15 pub fn new(instance: &Instance, device: &Device) -> Self {
16 let handle = device.handle();
17 let fp = vk::ExtImageDrmFormatModifierFn::load(|name| unsafe {
18 mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
19 });
20 Self { handle, fp }
21 }
22
23 #[inline]
25 pub unsafe fn get_image_drm_format_modifier_properties(
26 &self,
27 image: vk::Image,
28 properties: &mut vk::ImageDrmFormatModifierPropertiesEXT,
29 ) -> VkResult<()> {
30 (self.fp.get_image_drm_format_modifier_properties_ext)(self.handle, image, properties)
31 .result()
32 }
33
34 #[inline]
35 pub const fn name() -> &'static CStr {
36 vk::ExtImageDrmFormatModifierFn::name()
37 }
38
39 #[inline]
40 pub fn fp(&self) -> &vk::ExtImageDrmFormatModifierFn {
41 &self.fp
42 }
43
44 #[inline]
45 pub fn device(&self) -> vk::Device {
46 self.handle
47 }
48}