ash/extensions/ext/
image_drm_format_modifier.rs

1use crate::prelude::*;
2use crate::vk;
3use crate::{Device, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_drm_format_modifier.html>
8#[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html>
24    #[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}