diff --git a/ash/src/extensions/khr/draw_indirect_count.rs b/ash/src/extensions/khr/draw_indirect_count.rs new file mode 100644 index 0000000..b911282 --- /dev/null +++ b/ash/src/extensions/khr/draw_indirect_count.rs @@ -0,0 +1,74 @@ +#![allow(dead_code)] +use crate::version::{DeviceV1_0, InstanceV1_0}; +use crate::vk; +use std::ffi::CStr; +use std::mem; + +#[derive(Clone)] +pub struct DrawIndirectCount { + handle: vk::Device, + draw_indirect_count_fn: vk::KhrDrawIndirectCountFn, +} + +impl DrawIndirectCount { + pub fn new(instance: &I, device: &D) -> DrawIndirectCount { + let draw_indirect_count_fn = vk::KhrDrawIndirectCountFn::load(|name| unsafe { + mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) + }); + + DrawIndirectCount { + handle: device.handle(), + draw_indirect_count_fn, + } + } + + pub fn name() -> &'static CStr { + vk::KhrDrawIndirectCountFn::name() + } + + #[doc = ""] + pub unsafe fn cmd_draw_indexed_indirect_count( + &self, + command_buffer: vk::CommandBuffer, + buffer: vk::Buffer, + offset: vk::DeviceSize, + count_buffer: vk::Buffer, + count_buffer_offset: vk::DeviceSize, + max_draw_count: u32, + stride: u32, + ) { + self.draw_indirect_count_fn + .cmd_draw_indexed_indirect_count_khr( + command_buffer, + buffer, + offset, + count_buffer, + count_buffer_offset, + max_draw_count, + stride, + ); + } + + #[doc = ""] + pub unsafe fn cmd_draw_indirect_count( + &self, + command_buffer: vk::CommandBuffer, + buffer: vk::Buffer, + offset: vk::DeviceSize, + count_buffer: vk::Buffer, + count_buffer_offset: vk::DeviceSize, + max_draw_count: u32, + stride: u32, + ) { + self.draw_indirect_count_fn + .cmd_draw_indexed_indirect_count_khr( + command_buffer, + buffer, + offset, + count_buffer, + count_buffer_offset, + max_draw_count, + stride, + ); + } +} diff --git a/ash/src/extensions/khr/mod.rs b/ash/src/extensions/khr/mod.rs index 31a40a7..6b5a788 100644 --- a/ash/src/extensions/khr/mod.rs +++ b/ash/src/extensions/khr/mod.rs @@ -1,6 +1,7 @@ pub use self::android_surface::AndroidSurface; pub use self::display::Display; pub use self::display_swapchain::DisplaySwapchain; +pub use self::draw_indirect_count::DrawIndirectCount; pub use self::external_memory_fd::ExternalMemoryFd; pub use self::push_descriptor::PushDescriptor; pub use self::ray_tracing::RayTracing; @@ -15,6 +16,7 @@ pub use self::xlib_surface::XlibSurface; mod android_surface; mod display; mod display_swapchain; +mod draw_indirect_count; mod external_memory_fd; mod push_descriptor; mod ray_tracing;