ash/extensions/ext/
image_compression_control.rs

1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::CStr;
4use std::mem;
5
6/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_compression_control.html>
7#[derive(Clone)]
8pub struct ImageCompressionControl {
9    handle: vk::Device,
10    fp: vk::ExtImageCompressionControlFn,
11}
12
13impl ImageCompressionControl {
14    pub fn new(instance: &Instance, device: &Device) -> Self {
15        let handle = device.handle();
16        let fp = vk::ExtImageCompressionControlFn::load(|name| unsafe {
17            mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
18        });
19        Self { handle, fp }
20    }
21
22    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSubresourceLayout2EXT.html>
23    #[inline]
24    pub unsafe fn get_image_subresource_layout2(
25        &self,
26        image: vk::Image,
27        subresource: &vk::ImageSubresource2EXT,
28        layout: &mut vk::SubresourceLayout2EXT,
29    ) {
30        (self.fp.get_image_subresource_layout2_ext)(self.handle, image, subresource, layout)
31    }
32
33    #[inline]
34    pub const fn name() -> &'static CStr {
35        vk::ExtImageCompressionControlFn::name()
36    }
37
38    #[inline]
39    pub fn fp(&self) -> &vk::ExtImageCompressionControlFn {
40        &self.fp
41    }
42
43    #[inline]
44    pub fn device(&self) -> vk::Device {
45        self.handle
46    }
47}