• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::vk;
2 use crate::{Device, 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_image_compression_control.html>
7 #[derive(Clone)]
8 pub struct ImageCompressionControl {
9     handle: vk::Device,
10     fp: vk::ExtImageCompressionControlFn,
11 }
12 
13 impl ImageCompressionControl {
new(instance: &Instance, device: &Device) -> Self14     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]
get_image_subresource_layout2( &self, image: vk::Image, subresource: &vk::ImageSubresource2EXT, layout: &mut vk::SubresourceLayout2EXT, )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]
name() -> &'static CStr34     pub const fn name() -> &'static CStr {
35         vk::ExtImageCompressionControlFn::name()
36     }
37 
38     #[inline]
fp(&self) -> &vk::ExtImageCompressionControlFn39     pub fn fp(&self) -> &vk::ExtImageCompressionControlFn {
40         &self.fp
41     }
42 
43     #[inline]
device(&self) -> vk::Device44     pub fn device(&self) -> vk::Device {
45         self.handle
46     }
47 }
48