From e7942967393f0e439b4703c940445a3ff739ee98 Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Tue, 10 May 2022 15:18:13 +0200 Subject: [PATCH] extensions/ext: Add VK_EXT_pipeline_properties device extension --- Changelog.md | 1 + ash/src/extensions/ext/mod.rs | 2 + ash/src/extensions/ext/pipeline_properties.rs | 52 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 ash/src/extensions/ext/pipeline_properties.rs diff --git a/Changelog.md b/Changelog.md index c58d3168f..873cdcc16 100644 --- a/Changelog.md +++ b/Changelog.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `VK_NV_coverage_reduction_mode` device extension (#617) - Added `VK_KHR_ray_tracing_maintenance1` device extension (#620) - Added `VK_EXT_image_compression_control` device extension (#621) +- Added `VK_EXT_pipeline_properties` device extension (#622) - Added new functions to `VK_KHR_swapchain`, available since Vulkan 1.1 (#629) - Added `VK_KHR_device_group_creation` instance extension (#630) - Added `VK_KHR_device_group` device extension (#631) diff --git a/ash/src/extensions/ext/mod.rs b/ash/src/extensions/ext/mod.rs index 477eb817a..afc9ded73 100644 --- a/ash/src/extensions/ext/mod.rs +++ b/ash/src/extensions/ext/mod.rs @@ -13,6 +13,7 @@ pub use self::image_compression_control::ImageCompressionControl; pub use self::image_drm_format_modifier::ImageDrmFormatModifier; pub use self::metal_surface::MetalSurface; pub use self::physical_device_drm::PhysicalDeviceDrm; +pub use self::pipeline_properties::PipelineProperties; pub use self::private_data::PrivateData; pub use self::sample_locations::SampleLocations; pub use self::tooling_info::ToolingInfo; @@ -32,6 +33,7 @@ mod image_compression_control; mod image_drm_format_modifier; mod metal_surface; mod physical_device_drm; +mod pipeline_properties; mod private_data; mod sample_locations; mod tooling_info; diff --git a/ash/src/extensions/ext/pipeline_properties.rs b/ash/src/extensions/ext/pipeline_properties.rs new file mode 100644 index 000000000..5f9035200 --- /dev/null +++ b/ash/src/extensions/ext/pipeline_properties.rs @@ -0,0 +1,52 @@ +use crate::prelude::*; +use crate::vk; +use crate::{Device, Instance}; +use std::ffi::CStr; +use std::mem; + +/// +#[derive(Clone)] +pub struct PipelineProperties { + handle: vk::Device, + fp: vk::ExtPipelinePropertiesFn, +} + +impl PipelineProperties { + pub fn new(instance: &Instance, device: &Device) -> Self { + let handle = device.handle(); + let fp = vk::ExtPipelinePropertiesFn::load(|name| unsafe { + mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr())) + }); + Self { handle, fp } + } + + /// + /// + /// TODO: Currently only accepts [`vk::PipelinePropertiesIdentifierEXT`] + #[inline] + pub unsafe fn get_pipeline_properties( + &self, + pipeline_info: &vk::PipelineInfoEXT, + // TODO: https://github.com/krolli/vk-parse/pull/24 + pipeline_properties: *mut vk::BaseOutStructure, + ) -> VkResult<()> { + todo!("https://github.com/krolli/vk-parse/pull/24") + // (self.fp.get_pipeline_properties_ext)(self.handle, pipeline_info, pipeline_properties) + // .result() + } + + #[inline] + pub const fn name() -> &'static CStr { + vk::ExtPipelinePropertiesFn::name() + } + + #[inline] + pub fn fp(&self) -> &vk::ExtPipelinePropertiesFn { + &self.fp + } + + #[inline] + pub fn device(&self) -> vk::Device { + self.handle + } +}