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::android_surface::AndroidSurface;
|
||||||
pub use self::display::Display;
|
pub use self::display::Display;
|
||||||
pub use self::display_swapchain::DisplaySwapchain;
|
pub use self::display_swapchain::DisplaySwapchain;
|
||||||
|
pub use self::draw_indirect_count::DrawIndirectCount;
|
||||||
pub use self::external_memory_fd::ExternalMemoryFd;
|
pub use self::external_memory_fd::ExternalMemoryFd;
|
||||||
pub use self::push_descriptor::PushDescriptor;
|
pub use self::push_descriptor::PushDescriptor;
|
||||||
pub use self::ray_tracing::RayTracing;
|
pub use self::ray_tracing::RayTracing;
|
||||||
|
@ -15,6 +16,7 @@ pub use self::xlib_surface::XlibSurface;
|
||||||
mod android_surface;
|
mod android_surface;
|
||||||
mod display;
|
mod display;
|
||||||
mod display_swapchain;
|
mod display_swapchain;
|
||||||
|
mod draw_indirect_count;
|
||||||
mod external_memory_fd;
|
mod external_memory_fd;
|
||||||
mod push_descriptor;
|
mod push_descriptor;
|
||||||
mod ray_tracing;
|
mod ray_tracing;
|
||||||
|
|
Loading…
Reference in a new issue