• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::prelude::*;
2 use crate::vk;
3 use crate::{Device, Instance};
4 use std::ffi::CStr;
5 use std::mem;
6 
7 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_pipeline_properties.html>
8 #[derive(Clone)]
9 pub struct PipelineProperties {
10     handle: vk::Device,
11     fp: vk::ExtPipelinePropertiesFn,
12 }
13 
14 impl PipelineProperties {
new(instance: &Instance, device: &Device) -> Self15     pub fn new(instance: &Instance, device: &Device) -> Self {
16         let handle = device.handle();
17         let fp = vk::ExtPipelinePropertiesFn::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/vkGetPipelinePropertiesEXT.html>
24     #[inline]
get_pipeline_properties( &self, pipeline_info: &vk::PipelineInfoEXT, pipeline_properties: &mut impl vk::GetPipelinePropertiesEXTParamPipelineProperties, ) -> VkResult<()>25     pub unsafe fn get_pipeline_properties(
26         &self,
27         pipeline_info: &vk::PipelineInfoEXT,
28         pipeline_properties: &mut impl vk::GetPipelinePropertiesEXTParamPipelineProperties,
29     ) -> VkResult<()> {
30         (self.fp.get_pipeline_properties_ext)(
31             self.handle,
32             pipeline_info,
33             <*mut _>::cast(pipeline_properties),
34         )
35         .result()
36     }
37 
38     #[inline]
name() -> &'static CStr39     pub const fn name() -> &'static CStr {
40         vk::ExtPipelinePropertiesFn::name()
41     }
42 
43     #[inline]
fp(&self) -> &vk::ExtPipelinePropertiesFn44     pub fn fp(&self) -> &vk::ExtPipelinePropertiesFn {
45         &self.fp
46     }
47 
48     #[inline]
device(&self) -> vk::Device49     pub fn device(&self) -> vk::Device {
50         self.handle
51     }
52 }
53