Implement VK_KHR_draw_indirect_count
This commit is contained in:
parent
e575b233e5
commit
1f7dd9114d
74
ash/src/extensions/khr/draw_indirect_count.rs
Normal file
74
ash/src/extensions/khr/draw_indirect_count.rs
Normal file
|
@ -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<I: InstanceV1_0, D: DeviceV1_0>(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 = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdDrawIndexedIndirectCountKHR.html>"]
|
||||
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 = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdDrawIndirectCountKHR.html>"]
|
||||
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,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue