#![allow(unused_imports)]
use crate::{vk::Result as VkResult, vk::*, *};
use core::ffi::{CStr, c_char, c_int, c_void};
use core::mem::transmute;
use core::ptr;
pub const EXTENSION_NAME: &CStr = c"VK_KHR_descriptor_update_template";
pub(super) mod defs {
#![allow(non_camel_case_types, unused_imports)]
use crate::{vk::*, *};
use core::ffi::{CStr, c_char, c_int, c_void};
use core::fmt;
use core::marker::PhantomData;
use core::ptr;
pub type DescriptorUpdateTemplateTypeKHR = DescriptorUpdateTemplateType;
pub type DescriptorUpdateTemplateKHR = DescriptorUpdateTemplate;
pub type DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry;
pub type DescriptorUpdateTemplateCreateInfoKHR<'a> = DescriptorUpdateTemplateCreateInfo<'a>;
pub type DescriptorUpdateTemplateCreateFlagsKHR = DescriptorUpdateTemplateCreateFlags;
pub type PFN_vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplate;
pub type PFN_vkDestroyDescriptorUpdateTemplateKHR = PFN_vkDestroyDescriptorUpdateTemplate;
pub type PFN_vkUpdateDescriptorSetWithTemplateKHR = PFN_vkUpdateDescriptorSetWithTemplate;
}
#[cfg(feature = "ffi")]
pub(super) mod ffi {
#![allow(non_camel_case_types)]
use super::defs::*;
pub type VkDescriptorUpdateTemplateTypeKHR = DescriptorUpdateTemplateTypeKHR;
pub type VkDescriptorUpdateTemplateKHR = DescriptorUpdateTemplateKHR;
pub type VkDescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntryKHR;
pub type VkDescriptorUpdateTemplateCreateInfoKHR =
DescriptorUpdateTemplateCreateInfoKHR<'static>;
pub type VkDescriptorUpdateTemplateCreateFlagsKHR = DescriptorUpdateTemplateCreateFlagsKHR;
}
pub struct DeviceFn {
create_descriptor_update_template: PFN_vkCreateDescriptorUpdateTemplate,
destroy_descriptor_update_template: PFN_vkDestroyDescriptorUpdateTemplate,
update_descriptor_set_with_template: PFN_vkUpdateDescriptorSetWithTemplate,
cmd_push_descriptor_set_with_template: Option<PFN_vkCmdPushDescriptorSetWithTemplate>,
}
impl LoadDeviceFn for DeviceFn {
unsafe fn load_with(
load: impl Fn(&CStr) -> Option<PFN_vkVoidFunction>,
) -> core::result::Result<Self, MissingEntryPointError> {
unsafe {
Ok(Self {
create_descriptor_update_template: transmute(
load(c"vkCreateDescriptorUpdateTemplateKHR").ok_or(MissingEntryPointError)?,
),
destroy_descriptor_update_template: transmute(
load(c"vkDestroyDescriptorUpdateTemplateKHR").ok_or(MissingEntryPointError)?,
),
update_descriptor_set_with_template: transmute(
load(c"vkUpdateDescriptorSetWithTemplateKHR").ok_or(MissingEntryPointError)?,
),
cmd_push_descriptor_set_with_template: transmute(load(
c"vkCmdPushDescriptorSetWithTemplateKHR",
)),
})
}
}
}
impl DeviceFn {
#[inline]
pub unsafe fn create_descriptor_update_template(
&self,
device: Device,
create_info: &DescriptorUpdateTemplateCreateInfo<'_>,
allocator: Option<&AllocationCallbacks<'_>>,
) -> crate::Result<DescriptorUpdateTemplate> {
unsafe {
let mut descriptor_update_template = core::mem::MaybeUninit::uninit();
let result = (self.create_descriptor_update_template)(
device,
create_info,
allocator.to_raw_ptr(),
descriptor_update_template.as_mut_ptr(),
);
match result {
VkResult::SUCCESS => Ok(descriptor_update_template.assume_init()),
err => Err(err),
}
}
}
#[inline]
pub unsafe fn destroy_descriptor_update_template(
&self,
device: Device,
descriptor_update_template: DescriptorUpdateTemplate,
allocator: Option<&AllocationCallbacks<'_>>,
) {
unsafe {
(self.destroy_descriptor_update_template)(
device,
descriptor_update_template,
allocator.to_raw_ptr(),
)
}
}
#[inline]
pub unsafe fn update_descriptor_set_with_template(
&self,
device: Device,
descriptor_set: DescriptorSet,
descriptor_update_template: DescriptorUpdateTemplate,
data: *const c_void,
) {
unsafe {
(self.update_descriptor_set_with_template)(
device,
descriptor_set,
descriptor_update_template,
data,
)
}
}
#[inline]
pub unsafe fn cmd_push_descriptor_set_with_template(
&self,
command_buffer: CommandBuffer,
descriptor_update_template: DescriptorUpdateTemplate,
layout: PipelineLayout,
set: u32,
data: *const c_void,
) {
unsafe {
(self.cmd_push_descriptor_set_with_template.unwrap())(
command_buffer,
descriptor_update_template,
layout,
set,
data,
)
}
}
}