ash/extensions/ext/
tooling_info.rs

1use crate::prelude::*;
2use crate::vk;
3use crate::{Entry, Instance};
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct ToolingInfo {
9    fp: vk::ExtToolingInfoFn,
10}
11
12impl ToolingInfo {
13    pub fn new(entry: &Entry, instance: &Instance) -> Self {
14        let fp = vk::ExtToolingInfoFn::load(|name| unsafe {
15            mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
16        });
17        Self { fp }
18    }
19
20    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html>
21    pub unsafe fn get_physical_device_tool_properties(
22        &self,
23        physical_device: vk::PhysicalDevice,
24    ) -> VkResult<Vec<vk::PhysicalDeviceToolPropertiesEXT>> {
25        read_into_defaulted_vector(|count, data| {
26            (self.fp.get_physical_device_tool_properties_ext)(physical_device, count, data)
27        })
28    }
29
30    pub const fn name() -> &'static CStr {
31        vk::ExtToolingInfoFn::name()
32    }
33
34    pub fn fp(&self) -> &vk::ExtToolingInfoFn {
35        &self.fp
36    }
37}