|  | #![allow(clippy::trivially_copy_pass_by_ref)] | 
|  | use crate::prelude::*; | 
|  | use crate::vk; | 
|  | use crate::RawPtr; | 
|  | use std::mem; | 
|  | use std::os::raw::c_void; | 
|  | use std::ptr; | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDevice.html> | 
|  | #[derive(Clone)] | 
|  | pub struct Device { | 
|  | pub(crate) handle: vk::Device, | 
|  |  | 
|  | pub(crate) device_fn_1_0: vk::DeviceFnV1_0, | 
|  | pub(crate) device_fn_1_1: vk::DeviceFnV1_1, | 
|  | pub(crate) device_fn_1_2: vk::DeviceFnV1_2, | 
|  | pub(crate) device_fn_1_3: vk::DeviceFnV1_3, | 
|  | } | 
|  |  | 
|  | impl Device { | 
|  | pub unsafe fn load(instance_fn: &vk::InstanceFnV1_0, device: vk::Device) -> Self { | 
|  | let load_fn = |name: &std::ffi::CStr| { | 
|  | mem::transmute((instance_fn.get_device_proc_addr)(device, name.as_ptr())) | 
|  | }; | 
|  |  | 
|  | Self { | 
|  | handle: device, | 
|  |  | 
|  | device_fn_1_0: vk::DeviceFnV1_0::load(load_fn), | 
|  | device_fn_1_1: vk::DeviceFnV1_1::load(load_fn), | 
|  | device_fn_1_2: vk::DeviceFnV1_2::load(load_fn), | 
|  | device_fn_1_3: vk::DeviceFnV1_3::load(load_fn), | 
|  | } | 
|  | } | 
|  |  | 
|  | #[inline] | 
|  | pub fn handle(&self) -> vk::Device { | 
|  | self.handle | 
|  | } | 
|  | } | 
|  |  | 
|  | /// Vulkan core 1.3 | 
|  | #[allow(non_camel_case_types)] | 
|  | impl Device { | 
|  | #[inline] | 
|  | pub fn fp_v1_3(&self) -> &vk::DeviceFnV1_3 { | 
|  | &self.device_fn_1_3 | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePrivateDataSlot.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_private_data_slot( | 
|  | &self, | 
|  | create_info: &vk::PrivateDataSlotCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::PrivateDataSlot> { | 
|  | let mut private_data_slot = mem::zeroed(); | 
|  | (self.device_fn_1_3.create_private_data_slot)( | 
|  | self.handle, | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut private_data_slot, | 
|  | ) | 
|  | .result_with_success(private_data_slot) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPrivateDataSlot.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_private_data_slot( | 
|  | &self, | 
|  | private_data_slot: vk::PrivateDataSlot, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_3.destroy_private_data_slot)( | 
|  | self.handle, | 
|  | private_data_slot, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSetPrivateData.html> | 
|  | #[inline] | 
|  | pub unsafe fn set_private_data<T: vk::Handle>( | 
|  | &self, | 
|  | object: T, | 
|  | private_data_slot: vk::PrivateDataSlot, | 
|  | data: u64, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_3.set_private_data)( | 
|  | self.handle, | 
|  | T::TYPE, | 
|  | object.as_raw(), | 
|  | private_data_slot, | 
|  | data, | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPrivateData.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_private_data<T: vk::Handle>( | 
|  | &self, | 
|  | object: T, | 
|  | private_data_slot: vk::PrivateDataSlot, | 
|  | ) -> u64 { | 
|  | let mut data = mem::zeroed(); | 
|  | (self.device_fn_1_3.get_private_data)( | 
|  | self.handle, | 
|  | T::TYPE, | 
|  | object.as_raw(), | 
|  | private_data_slot, | 
|  | &mut data, | 
|  | ); | 
|  | data | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPipelineBarrier2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_pipeline_barrier2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | dependency_info: &vk::DependencyInfo, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_pipeline_barrier2)(command_buffer, dependency_info) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetEvent2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_reset_event2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | event: vk::Event, | 
|  | stage_mask: vk::PipelineStageFlags2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_reset_event2)(command_buffer, event, stage_mask) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetEvent2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_event2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | event: vk::Event, | 
|  | dependency_info: &vk::DependencyInfo, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_event2)(command_buffer, event, dependency_info) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWaitEvents2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_wait_events2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | events: &[vk::Event], | 
|  | dependency_infos: &[vk::DependencyInfo], | 
|  | ) { | 
|  | assert_eq!(events.len(), dependency_infos.len()); | 
|  | (self.device_fn_1_3.cmd_wait_events2)( | 
|  | command_buffer, | 
|  | events.len() as u32, | 
|  | events.as_ptr(), | 
|  | dependency_infos.as_ptr(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWriteTimestamp2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_write_timestamp2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | stage: vk::PipelineStageFlags2, | 
|  | query_pool: vk::QueryPool, | 
|  | query: u32, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_write_timestamp2)(command_buffer, stage, query_pool, query) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueSubmit2.html> | 
|  | #[inline] | 
|  | pub unsafe fn queue_submit2( | 
|  | &self, | 
|  | queue: vk::Queue, | 
|  | submits: &[vk::SubmitInfo2], | 
|  | fence: vk::Fence, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_3.queue_submit2)(queue, submits.len() as u32, submits.as_ptr(), fence) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBuffer2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_buffer2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | copy_buffer_info: &vk::CopyBufferInfo2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_copy_buffer2)(command_buffer, copy_buffer_info) | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImage2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_image2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | copy_image_info: &vk::CopyImageInfo2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_copy_image2)(command_buffer, copy_image_info) | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBufferToImage2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_buffer_to_image2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | copy_buffer_to_image_info: &vk::CopyBufferToImageInfo2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_copy_buffer_to_image2)(command_buffer, copy_buffer_to_image_info) | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImageToBuffer2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_image_to_buffer2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | copy_image_to_buffer_info: &vk::CopyImageToBufferInfo2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_copy_image_to_buffer2)(command_buffer, copy_image_to_buffer_info) | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBlitImage2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_blit_image2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | blit_image_info: &vk::BlitImageInfo2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_blit_image2)(command_buffer, blit_image_info) | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResolveImage2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_resolve_image2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | resolve_image_info: &vk::ResolveImageInfo2, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_resolve_image2)(command_buffer, resolve_image_info) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRendering.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_begin_rendering( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | rendering_info: &vk::RenderingInfo, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_begin_rendering)(command_buffer, rendering_info) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRendering.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_end_rendering(&self, command_buffer: vk::CommandBuffer) { | 
|  | (self.device_fn_1_3.cmd_end_rendering)(command_buffer) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCullMode.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_cull_mode( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | cull_mode: vk::CullModeFlags, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_cull_mode)(command_buffer, cull_mode) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetFrontFace.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_front_face( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | front_face: vk::FrontFace, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_front_face)(command_buffer, front_face) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPrimitiveTopology.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_primitive_topology( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | primitive_topology: vk::PrimitiveTopology, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_primitive_topology)(command_buffer, primitive_topology) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportWithCount.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_viewport_with_count( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | viewports: &[vk::Viewport], | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_viewport_with_count)( | 
|  | command_buffer, | 
|  | viewports.len() as u32, | 
|  | viewports.as_ptr(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetScissorWithCount.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_scissor_with_count( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | scissors: &[vk::Rect2D], | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_scissor_with_count)( | 
|  | command_buffer, | 
|  | scissors.len() as u32, | 
|  | scissors.as_ptr(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindVertexBuffers2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_bind_vertex_buffers2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | first_binding: u32, | 
|  | buffers: &[vk::Buffer], | 
|  | offsets: &[vk::DeviceSize], | 
|  | sizes: Option<&[vk::DeviceSize]>, | 
|  | strides: Option<&[vk::DeviceSize]>, | 
|  | ) { | 
|  | assert_eq!(offsets.len(), buffers.len()); | 
|  | let p_sizes = if let Some(sizes) = sizes { | 
|  | assert_eq!(sizes.len(), buffers.len()); | 
|  | sizes.as_ptr() | 
|  | } else { | 
|  | ptr::null() | 
|  | }; | 
|  | let p_strides = if let Some(strides) = strides { | 
|  | assert_eq!(strides.len(), buffers.len()); | 
|  | strides.as_ptr() | 
|  | } else { | 
|  | ptr::null() | 
|  | }; | 
|  | (self.device_fn_1_3.cmd_bind_vertex_buffers2)( | 
|  | command_buffer, | 
|  | first_binding, | 
|  | buffers.len() as u32, | 
|  | buffers.as_ptr(), | 
|  | offsets.as_ptr(), | 
|  | p_sizes, | 
|  | p_strides, | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthTestEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_test_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | depth_test_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_depth_test_enable)(command_buffer, depth_test_enable.into()) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthWriteEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_write_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | depth_write_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_depth_write_enable)(command_buffer, depth_write_enable.into()) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthCompareOp.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_compare_op( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | depth_compare_op: vk::CompareOp, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_depth_compare_op)(command_buffer, depth_compare_op) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBoundsTestEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_bounds_test_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | depth_bounds_test_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_depth_bounds_test_enable)( | 
|  | command_buffer, | 
|  | depth_bounds_test_enable.into(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilTestEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_stencil_test_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | stencil_test_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_stencil_test_enable)(command_buffer, stencil_test_enable.into()) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilOp.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_stencil_op( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | face_mask: vk::StencilFaceFlags, | 
|  | fail_op: vk::StencilOp, | 
|  | pass_op: vk::StencilOp, | 
|  | depth_fail_op: vk::StencilOp, | 
|  | compare_op: vk::CompareOp, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_stencil_op)( | 
|  | command_buffer, | 
|  | face_mask, | 
|  | fail_op, | 
|  | pass_op, | 
|  | depth_fail_op, | 
|  | compare_op, | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizerDiscardEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_rasterizer_discard_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | rasterizer_discard_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_rasterizer_discard_enable)( | 
|  | command_buffer, | 
|  | rasterizer_discard_enable.into(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBiasEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_bias_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | depth_bias_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_depth_bias_enable)(command_buffer, depth_bias_enable.into()) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPrimitiveRestartEnable.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_primitive_restart_enable( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | primitive_restart_enable: bool, | 
|  | ) { | 
|  | (self.device_fn_1_3.cmd_set_primitive_restart_enable)( | 
|  | command_buffer, | 
|  | primitive_restart_enable.into(), | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceBufferMemoryRequirements.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_buffer_memory_requirements( | 
|  | &self, | 
|  | memory_requirements: &vk::DeviceBufferMemoryRequirements, | 
|  | out: &mut vk::MemoryRequirements2, | 
|  | ) { | 
|  | (self.device_fn_1_3.get_device_buffer_memory_requirements)( | 
|  | self.handle, | 
|  | memory_requirements, | 
|  | out, | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageMemoryRequirements.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_image_memory_requirements( | 
|  | &self, | 
|  | memory_requirements: &vk::DeviceImageMemoryRequirements, | 
|  | out: &mut vk::MemoryRequirements2, | 
|  | ) { | 
|  | (self.device_fn_1_3.get_device_image_memory_requirements)( | 
|  | self.handle, | 
|  | memory_requirements, | 
|  | out, | 
|  | ) | 
|  | } | 
|  |  | 
|  | /// Retrieve the number of elements to pass to [`get_device_image_sparse_memory_requirements()`][Self::get_device_image_sparse_memory_requirements()] | 
|  | #[inline] | 
|  | pub unsafe fn get_device_image_sparse_memory_requirements_len( | 
|  | &self, | 
|  | memory_requirements: &vk::DeviceImageMemoryRequirements, | 
|  | ) -> usize { | 
|  | let mut count = 0; | 
|  | (self | 
|  | .device_fn_1_3 | 
|  | .get_device_image_sparse_memory_requirements)( | 
|  | self.handle, | 
|  | memory_requirements, | 
|  | &mut count, | 
|  | std::ptr::null_mut(), | 
|  | ); | 
|  | count as usize | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageSparseMemoryRequirements.html> | 
|  | /// | 
|  | /// Call [`get_device_image_sparse_memory_requirements_len()`][Self::get_device_image_sparse_memory_requirements_len()] to query the number of elements to pass to `out`. | 
|  | /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. | 
|  | #[inline] | 
|  | pub unsafe fn get_device_image_sparse_memory_requirements( | 
|  | &self, | 
|  | memory_requirements: &vk::DeviceImageMemoryRequirements, | 
|  | out: &mut [vk::SparseImageMemoryRequirements2], | 
|  | ) { | 
|  | let mut count = out.len() as u32; | 
|  | (self | 
|  | .device_fn_1_3 | 
|  | .get_device_image_sparse_memory_requirements)( | 
|  | self.handle, | 
|  | memory_requirements, | 
|  | &mut count, | 
|  | out.as_mut_ptr(), | 
|  | ); | 
|  | assert_eq!(count as usize, out.len()); | 
|  | } | 
|  | } | 
|  |  | 
|  | /// Vulkan core 1.2 | 
|  | #[allow(non_camel_case_types)] | 
|  | impl Device { | 
|  | #[inline] | 
|  | pub fn fp_v1_2(&self) -> &vk::DeviceFnV1_2 { | 
|  | &self.device_fn_1_2 | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndirectCount.html> | 
|  | #[inline] | 
|  | 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.device_fn_1_2.cmd_draw_indirect_count)( | 
|  | command_buffer, | 
|  | buffer, | 
|  | offset, | 
|  | count_buffer, | 
|  | count_buffer_offset, | 
|  | max_draw_count, | 
|  | stride, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexedIndirectCount.html> | 
|  | #[inline] | 
|  | 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.device_fn_1_2.cmd_draw_indexed_indirect_count)( | 
|  | command_buffer, | 
|  | buffer, | 
|  | offset, | 
|  | count_buffer, | 
|  | count_buffer_offset, | 
|  | max_draw_count, | 
|  | stride, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateRenderPass2.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_render_pass2( | 
|  | &self, | 
|  | create_info: &vk::RenderPassCreateInfo2, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::RenderPass> { | 
|  | let mut renderpass = mem::zeroed(); | 
|  | (self.device_fn_1_2.create_render_pass2)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut renderpass, | 
|  | ) | 
|  | .result_with_success(renderpass) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderPass2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_begin_render_pass2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | render_pass_begin_info: &vk::RenderPassBeginInfo, | 
|  | subpass_begin_info: &vk::SubpassBeginInfo, | 
|  | ) { | 
|  | (self.device_fn_1_2.cmd_begin_render_pass2)( | 
|  | command_buffer, | 
|  | render_pass_begin_info, | 
|  | subpass_begin_info, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdNextSubpass2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_next_subpass2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | subpass_begin_info: &vk::SubpassBeginInfo, | 
|  | subpass_end_info: &vk::SubpassEndInfo, | 
|  | ) { | 
|  | (self.device_fn_1_2.cmd_next_subpass2)( | 
|  | command_buffer, | 
|  | subpass_begin_info, | 
|  | subpass_end_info, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderPass2.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_end_render_pass2( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | subpass_end_info: &vk::SubpassEndInfo, | 
|  | ) { | 
|  | (self.device_fn_1_2.cmd_end_render_pass2)(command_buffer, subpass_end_info); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetQueryPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn reset_query_pool( | 
|  | &self, | 
|  | query_pool: vk::QueryPool, | 
|  | first_query: u32, | 
|  | query_count: u32, | 
|  | ) { | 
|  | (self.device_fn_1_2.reset_query_pool)(self.handle(), query_pool, first_query, query_count); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetSemaphoreCounterValue.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_semaphore_counter_value(&self, semaphore: vk::Semaphore) -> VkResult<u64> { | 
|  | let mut value = 0; | 
|  | (self.device_fn_1_2.get_semaphore_counter_value)(self.handle(), semaphore, &mut value) | 
|  | .result_with_success(value) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkWaitSemaphores.html> | 
|  | #[inline] | 
|  | pub unsafe fn wait_semaphores( | 
|  | &self, | 
|  | wait_info: &vk::SemaphoreWaitInfo, | 
|  | timeout: u64, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_2.wait_semaphores)(self.handle(), wait_info, timeout).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSignalSemaphore.html> | 
|  | #[inline] | 
|  | pub unsafe fn signal_semaphore(&self, signal_info: &vk::SemaphoreSignalInfo) -> VkResult<()> { | 
|  | (self.device_fn_1_2.signal_semaphore)(self.handle(), signal_info).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferDeviceAddress.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_buffer_device_address( | 
|  | &self, | 
|  | info: &vk::BufferDeviceAddressInfo, | 
|  | ) -> vk::DeviceAddress { | 
|  | (self.device_fn_1_2.get_buffer_device_address)(self.handle(), info) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferOpaqueCaptureAddress.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_buffer_opaque_capture_address( | 
|  | &self, | 
|  | info: &vk::BufferDeviceAddressInfo, | 
|  | ) -> u64 { | 
|  | (self.device_fn_1_2.get_buffer_opaque_capture_address)(self.handle(), info) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_memory_opaque_capture_address( | 
|  | &self, | 
|  | info: &vk::DeviceMemoryOpaqueCaptureAddressInfo, | 
|  | ) -> u64 { | 
|  | (self.device_fn_1_2.get_device_memory_opaque_capture_address)(self.handle(), info) | 
|  | } | 
|  | } | 
|  |  | 
|  | /// Vulkan core 1.1 | 
|  | #[allow(non_camel_case_types)] | 
|  | impl Device { | 
|  | #[inline] | 
|  | pub fn fp_v1_1(&self) -> &vk::DeviceFnV1_1 { | 
|  | &self.device_fn_1_1 | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindBufferMemory2.html> | 
|  | #[inline] | 
|  | pub unsafe fn bind_buffer_memory2( | 
|  | &self, | 
|  | bind_infos: &[vk::BindBufferMemoryInfo], | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_1.bind_buffer_memory2)( | 
|  | self.handle(), | 
|  | bind_infos.len() as _, | 
|  | bind_infos.as_ptr(), | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindImageMemory2.html> | 
|  | #[inline] | 
|  | pub unsafe fn bind_image_memory2( | 
|  | &self, | 
|  | bind_infos: &[vk::BindImageMemoryInfo], | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_1.bind_image_memory2)( | 
|  | self.handle(), | 
|  | bind_infos.len() as _, | 
|  | bind_infos.as_ptr(), | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceGroupPeerMemoryFeatures.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_group_peer_memory_features( | 
|  | &self, | 
|  | heap_index: u32, | 
|  | local_device_index: u32, | 
|  | remote_device_index: u32, | 
|  | ) -> vk::PeerMemoryFeatureFlags { | 
|  | let mut peer_memory_features = mem::zeroed(); | 
|  | (self.device_fn_1_1.get_device_group_peer_memory_features)( | 
|  | self.handle(), | 
|  | heap_index, | 
|  | local_device_index, | 
|  | remote_device_index, | 
|  | &mut peer_memory_features, | 
|  | ); | 
|  | peer_memory_features | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDeviceMask.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_device_mask(&self, command_buffer: vk::CommandBuffer, device_mask: u32) { | 
|  | (self.device_fn_1_1.cmd_set_device_mask)(command_buffer, device_mask); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatchBase.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_dispatch_base( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | base_group_x: u32, | 
|  | base_group_y: u32, | 
|  | base_group_z: u32, | 
|  | group_count_x: u32, | 
|  | group_count_y: u32, | 
|  | group_count_z: u32, | 
|  | ) { | 
|  | (self.device_fn_1_1.cmd_dispatch_base)( | 
|  | command_buffer, | 
|  | base_group_x, | 
|  | base_group_y, | 
|  | base_group_z, | 
|  | group_count_x, | 
|  | group_count_y, | 
|  | group_count_z, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageMemoryRequirements2.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_image_memory_requirements2( | 
|  | &self, | 
|  | info: &vk::ImageMemoryRequirementsInfo2, | 
|  | out: &mut vk::MemoryRequirements2, | 
|  | ) { | 
|  | (self.device_fn_1_1.get_image_memory_requirements2)(self.handle(), info, out); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferMemoryRequirements2.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_buffer_memory_requirements2( | 
|  | &self, | 
|  | info: &vk::BufferMemoryRequirementsInfo2, | 
|  | out: &mut vk::MemoryRequirements2, | 
|  | ) { | 
|  | (self.device_fn_1_1.get_buffer_memory_requirements2)(self.handle(), info, out); | 
|  | } | 
|  |  | 
|  | /// Retrieve the number of elements to pass to [`get_image_sparse_memory_requirements2()`][Self::get_image_sparse_memory_requirements2()] | 
|  | #[inline] | 
|  | pub unsafe fn get_image_sparse_memory_requirements2_len( | 
|  | &self, | 
|  | info: &vk::ImageSparseMemoryRequirementsInfo2, | 
|  | ) -> usize { | 
|  | let mut count = 0; | 
|  | (self.device_fn_1_1.get_image_sparse_memory_requirements2)( | 
|  | self.handle(), | 
|  | info, | 
|  | &mut count, | 
|  | ptr::null_mut(), | 
|  | ); | 
|  | count as usize | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSparseMemoryRequirements2.html> | 
|  | /// | 
|  | /// Call [`get_image_sparse_memory_requirements2_len()`][Self::get_image_sparse_memory_requirements2_len()] to query the number of elements to pass to `out`. | 
|  | /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. | 
|  | #[inline] | 
|  | pub unsafe fn get_image_sparse_memory_requirements2( | 
|  | &self, | 
|  | info: &vk::ImageSparseMemoryRequirementsInfo2, | 
|  | out: &mut [vk::SparseImageMemoryRequirements2], | 
|  | ) { | 
|  | let mut count = out.len() as u32; | 
|  | (self.device_fn_1_1.get_image_sparse_memory_requirements2)( | 
|  | self.handle(), | 
|  | info, | 
|  | &mut count, | 
|  | out.as_mut_ptr(), | 
|  | ); | 
|  | assert_eq!(count as usize, out.len()); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkTrimCommandPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn trim_command_pool( | 
|  | &self, | 
|  | command_pool: vk::CommandPool, | 
|  | flags: vk::CommandPoolTrimFlags, | 
|  | ) { | 
|  | (self.device_fn_1_1.trim_command_pool)(self.handle(), command_pool, flags); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceQueue2.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_queue2(&self, queue_info: &vk::DeviceQueueInfo2) -> vk::Queue { | 
|  | let mut queue = mem::zeroed(); | 
|  | (self.device_fn_1_1.get_device_queue2)(self.handle(), queue_info, &mut queue); | 
|  | queue | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSamplerYcbcrConversion.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_sampler_ycbcr_conversion( | 
|  | &self, | 
|  | create_info: &vk::SamplerYcbcrConversionCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::SamplerYcbcrConversion> { | 
|  | let mut ycbcr_conversion = mem::zeroed(); | 
|  | (self.device_fn_1_1.create_sampler_ycbcr_conversion)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut ycbcr_conversion, | 
|  | ) | 
|  | .result_with_success(ycbcr_conversion) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySamplerYcbcrConversion.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_sampler_ycbcr_conversion( | 
|  | &self, | 
|  | ycbcr_conversion: vk::SamplerYcbcrConversion, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_1.destroy_sampler_ycbcr_conversion)( | 
|  | self.handle(), | 
|  | ycbcr_conversion, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorUpdateTemplate.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_descriptor_update_template( | 
|  | &self, | 
|  | create_info: &vk::DescriptorUpdateTemplateCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::DescriptorUpdateTemplate> { | 
|  | let mut descriptor_update_template = mem::zeroed(); | 
|  | (self.device_fn_1_1.create_descriptor_update_template)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut descriptor_update_template, | 
|  | ) | 
|  | .result_with_success(descriptor_update_template) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorUpdateTemplate.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_descriptor_update_template( | 
|  | &self, | 
|  | descriptor_update_template: vk::DescriptorUpdateTemplate, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_1.destroy_descriptor_update_template)( | 
|  | self.handle(), | 
|  | descriptor_update_template, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUpdateDescriptorSetWithTemplate.html> | 
|  | #[inline] | 
|  | pub unsafe fn update_descriptor_set_with_template( | 
|  | &self, | 
|  | descriptor_set: vk::DescriptorSet, | 
|  | descriptor_update_template: vk::DescriptorUpdateTemplate, | 
|  | data: *const c_void, | 
|  | ) { | 
|  | (self.device_fn_1_1.update_descriptor_set_with_template)( | 
|  | self.handle(), | 
|  | descriptor_set, | 
|  | descriptor_update_template, | 
|  | data, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorSetLayoutSupport.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_descriptor_set_layout_support( | 
|  | &self, | 
|  | create_info: &vk::DescriptorSetLayoutCreateInfo, | 
|  | out: &mut vk::DescriptorSetLayoutSupport, | 
|  | ) { | 
|  | (self.device_fn_1_1.get_descriptor_set_layout_support)(self.handle(), create_info, out); | 
|  | } | 
|  | } | 
|  |  | 
|  | /// Vulkan core 1.0 | 
|  | #[allow(non_camel_case_types)] | 
|  | impl Device { | 
|  | #[inline] | 
|  | pub fn fp_v1_0(&self) -> &vk::DeviceFnV1_0 { | 
|  | &self.device_fn_1_0 | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDevice.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_device(&self, allocation_callbacks: Option<&vk::AllocationCallbacks>) { | 
|  | (self.device_fn_1_0.destroy_device)(self.handle(), allocation_callbacks.as_raw_ptr()); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySampler.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_sampler( | 
|  | &self, | 
|  | sampler: vk::Sampler, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_sampler)( | 
|  | self.handle(), | 
|  | sampler, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeMemory.html> | 
|  | #[inline] | 
|  | pub unsafe fn free_memory( | 
|  | &self, | 
|  | memory: vk::DeviceMemory, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.free_memory)(self.handle(), memory, allocation_callbacks.as_raw_ptr()); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeCommandBuffers.html> | 
|  | #[inline] | 
|  | pub unsafe fn free_command_buffers( | 
|  | &self, | 
|  | command_pool: vk::CommandPool, | 
|  | command_buffers: &[vk::CommandBuffer], | 
|  | ) { | 
|  | (self.device_fn_1_0.free_command_buffers)( | 
|  | self.handle(), | 
|  | command_pool, | 
|  | command_buffers.len() as u32, | 
|  | command_buffers.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateEvent.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_event( | 
|  | &self, | 
|  | create_info: &vk::EventCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Event> { | 
|  | let mut event = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_event)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut event, | 
|  | ) | 
|  | .result_with_success(event) | 
|  | } | 
|  |  | 
|  | /// Returns [`true`] if the event was set, and [`false`] if the event was reset, otherwise it will | 
|  | /// return the error code. | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetEventStatus.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_event_status(&self, event: vk::Event) -> VkResult<bool> { | 
|  | let err_code = (self.device_fn_1_0.get_event_status)(self.handle(), event); | 
|  | match err_code { | 
|  | vk::Result::EVENT_SET => Ok(true), | 
|  | vk::Result::EVENT_RESET => Ok(false), | 
|  | _ => Err(err_code), | 
|  | } | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSetEvent.html> | 
|  | #[inline] | 
|  | pub unsafe fn set_event(&self, event: vk::Event) -> VkResult<()> { | 
|  | (self.device_fn_1_0.set_event)(self.handle(), event).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetEvent.html> | 
|  | #[inline] | 
|  | pub unsafe fn reset_event(&self, event: vk::Event) -> VkResult<()> { | 
|  | (self.device_fn_1_0.reset_event)(self.handle(), event).result() | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetEvent.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_event( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | event: vk::Event, | 
|  | stage_mask: vk::PipelineStageFlags, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_event)(command_buffer, event, stage_mask); | 
|  | } | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetEvent.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_reset_event( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | event: vk::Event, | 
|  | stage_mask: vk::PipelineStageFlags, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_reset_event)(command_buffer, event, stage_mask); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWaitEvents.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_wait_events( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | events: &[vk::Event], | 
|  | src_stage_mask: vk::PipelineStageFlags, | 
|  | dst_stage_mask: vk::PipelineStageFlags, | 
|  | memory_barriers: &[vk::MemoryBarrier], | 
|  | buffer_memory_barriers: &[vk::BufferMemoryBarrier], | 
|  | image_memory_barriers: &[vk::ImageMemoryBarrier], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_wait_events)( | 
|  | command_buffer, | 
|  | events.len() as _, | 
|  | events.as_ptr(), | 
|  | src_stage_mask, | 
|  | dst_stage_mask, | 
|  | memory_barriers.len() as _, | 
|  | memory_barriers.as_ptr(), | 
|  | buffer_memory_barriers.len() as _, | 
|  | buffer_memory_barriers.as_ptr(), | 
|  | image_memory_barriers.len() as _, | 
|  | image_memory_barriers.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyFence.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_fence( | 
|  | &self, | 
|  | fence: vk::Fence, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_fence)(self.handle(), fence, allocation_callbacks.as_raw_ptr()); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyEvent.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_event( | 
|  | &self, | 
|  | event: vk::Event, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_event)(self.handle(), event, allocation_callbacks.as_raw_ptr()); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_image( | 
|  | &self, | 
|  | image: vk::Image, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_image)(self.handle(), image, allocation_callbacks.as_raw_ptr()); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyCommandPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_command_pool( | 
|  | &self, | 
|  | pool: vk::CommandPool, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_command_pool)( | 
|  | self.handle(), | 
|  | pool, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyImageView.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_image_view( | 
|  | &self, | 
|  | image_view: vk::ImageView, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_image_view)( | 
|  | self.handle(), | 
|  | image_view, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyRenderPass.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_render_pass( | 
|  | &self, | 
|  | renderpass: vk::RenderPass, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_render_pass)( | 
|  | self.handle(), | 
|  | renderpass, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyFramebuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_framebuffer( | 
|  | &self, | 
|  | framebuffer: vk::Framebuffer, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_framebuffer)( | 
|  | self.handle(), | 
|  | framebuffer, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipelineLayout.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_pipeline_layout( | 
|  | &self, | 
|  | pipeline_layout: vk::PipelineLayout, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_pipeline_layout)( | 
|  | self.handle(), | 
|  | pipeline_layout, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipelineCache.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_pipeline_cache( | 
|  | &self, | 
|  | pipeline_cache: vk::PipelineCache, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_pipeline_cache)( | 
|  | self.handle(), | 
|  | pipeline_cache, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_buffer( | 
|  | &self, | 
|  | buffer: vk::Buffer, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_buffer)( | 
|  | self.handle(), | 
|  | buffer, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyShaderModule.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_shader_module( | 
|  | &self, | 
|  | shader: vk::ShaderModule, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_shader_module)( | 
|  | self.handle(), | 
|  | shader, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipeline.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_pipeline( | 
|  | &self, | 
|  | pipeline: vk::Pipeline, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_pipeline)( | 
|  | self.handle(), | 
|  | pipeline, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySemaphore.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_semaphore( | 
|  | &self, | 
|  | semaphore: vk::Semaphore, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_semaphore)( | 
|  | self.handle(), | 
|  | semaphore, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_descriptor_pool( | 
|  | &self, | 
|  | pool: vk::DescriptorPool, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_descriptor_pool)( | 
|  | self.handle(), | 
|  | pool, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyQueryPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_query_pool( | 
|  | &self, | 
|  | pool: vk::QueryPool, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_query_pool)( | 
|  | self.handle(), | 
|  | pool, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorSetLayout.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_descriptor_set_layout( | 
|  | &self, | 
|  | layout: vk::DescriptorSetLayout, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_descriptor_set_layout)( | 
|  | self.handle(), | 
|  | layout, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeDescriptorSets.html> | 
|  | #[inline] | 
|  | pub unsafe fn free_descriptor_sets( | 
|  | &self, | 
|  | pool: vk::DescriptorPool, | 
|  | descriptor_sets: &[vk::DescriptorSet], | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.free_descriptor_sets)( | 
|  | self.handle(), | 
|  | pool, | 
|  | descriptor_sets.len() as u32, | 
|  | descriptor_sets.as_ptr(), | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUpdateDescriptorSets.html> | 
|  | #[inline] | 
|  | pub unsafe fn update_descriptor_sets( | 
|  | &self, | 
|  | descriptor_writes: &[vk::WriteDescriptorSet], | 
|  | descriptor_copies: &[vk::CopyDescriptorSet], | 
|  | ) { | 
|  | (self.device_fn_1_0.update_descriptor_sets)( | 
|  | self.handle(), | 
|  | descriptor_writes.len() as u32, | 
|  | descriptor_writes.as_ptr(), | 
|  | descriptor_copies.len() as u32, | 
|  | descriptor_copies.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSampler.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_sampler( | 
|  | &self, | 
|  | create_info: &vk::SamplerCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Sampler> { | 
|  | let mut sampler = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_sampler)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut sampler, | 
|  | ) | 
|  | .result_with_success(sampler) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBlitImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_blit_image( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_image: vk::Image, | 
|  | src_image_layout: vk::ImageLayout, | 
|  | dst_image: vk::Image, | 
|  | dst_image_layout: vk::ImageLayout, | 
|  | regions: &[vk::ImageBlit], | 
|  | filter: vk::Filter, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_blit_image)( | 
|  | command_buffer, | 
|  | src_image, | 
|  | src_image_layout, | 
|  | dst_image, | 
|  | dst_image_layout, | 
|  | regions.len() as _, | 
|  | regions.as_ptr(), | 
|  | filter, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResolveImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_resolve_image( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_image: vk::Image, | 
|  | src_image_layout: vk::ImageLayout, | 
|  | dst_image: vk::Image, | 
|  | dst_image_layout: vk::ImageLayout, | 
|  | regions: &[vk::ImageResolve], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_resolve_image)( | 
|  | command_buffer, | 
|  | src_image, | 
|  | src_image_layout, | 
|  | dst_image, | 
|  | dst_image_layout, | 
|  | regions.len() as u32, | 
|  | regions.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdFillBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_fill_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | buffer: vk::Buffer, | 
|  | offset: vk::DeviceSize, | 
|  | size: vk::DeviceSize, | 
|  | data: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_fill_buffer)(command_buffer, buffer, offset, size, data); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdUpdateBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_update_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | buffer: vk::Buffer, | 
|  | offset: vk::DeviceSize, | 
|  | data: &[u8], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_update_buffer)( | 
|  | command_buffer, | 
|  | buffer, | 
|  | offset, | 
|  | data.len() as u64, | 
|  | data.as_ptr() as _, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_buffer: vk::Buffer, | 
|  | dst_buffer: vk::Buffer, | 
|  | regions: &[vk::BufferCopy], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_copy_buffer)( | 
|  | command_buffer, | 
|  | src_buffer, | 
|  | dst_buffer, | 
|  | regions.len() as u32, | 
|  | regions.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImageToBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_image_to_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_image: vk::Image, | 
|  | src_image_layout: vk::ImageLayout, | 
|  | dst_buffer: vk::Buffer, | 
|  | regions: &[vk::BufferImageCopy], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_copy_image_to_buffer)( | 
|  | command_buffer, | 
|  | src_image, | 
|  | src_image_layout, | 
|  | dst_buffer, | 
|  | regions.len() as u32, | 
|  | regions.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBufferToImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_buffer_to_image( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_buffer: vk::Buffer, | 
|  | dst_image: vk::Image, | 
|  | dst_image_layout: vk::ImageLayout, | 
|  | regions: &[vk::BufferImageCopy], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_copy_buffer_to_image)( | 
|  | command_buffer, | 
|  | src_buffer, | 
|  | dst_image, | 
|  | dst_image_layout, | 
|  | regions.len() as u32, | 
|  | regions.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_image( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_image: vk::Image, | 
|  | src_image_layout: vk::ImageLayout, | 
|  | dst_image: vk::Image, | 
|  | dst_image_layout: vk::ImageLayout, | 
|  | regions: &[vk::ImageCopy], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_copy_image)( | 
|  | command_buffer, | 
|  | src_image, | 
|  | src_image_layout, | 
|  | dst_image, | 
|  | dst_image_layout, | 
|  | regions.len() as u32, | 
|  | regions.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateDescriptorSets.html> | 
|  | #[inline] | 
|  | pub unsafe fn allocate_descriptor_sets( | 
|  | &self, | 
|  | allocate_info: &vk::DescriptorSetAllocateInfo, | 
|  | ) -> VkResult<Vec<vk::DescriptorSet>> { | 
|  | let mut desc_set = Vec::with_capacity(allocate_info.descriptor_set_count as usize); | 
|  | (self.device_fn_1_0.allocate_descriptor_sets)( | 
|  | self.handle(), | 
|  | allocate_info, | 
|  | desc_set.as_mut_ptr(), | 
|  | ) | 
|  | .result()?; | 
|  |  | 
|  | desc_set.set_len(allocate_info.descriptor_set_count as usize); | 
|  | Ok(desc_set) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorSetLayout.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_descriptor_set_layout( | 
|  | &self, | 
|  | create_info: &vk::DescriptorSetLayoutCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::DescriptorSetLayout> { | 
|  | let mut layout = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_descriptor_set_layout)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut layout, | 
|  | ) | 
|  | .result_with_success(layout) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDeviceWaitIdle.html> | 
|  | #[inline] | 
|  | pub unsafe fn device_wait_idle(&self) -> VkResult<()> { | 
|  | (self.device_fn_1_0.device_wait_idle)(self.handle()).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_descriptor_pool( | 
|  | &self, | 
|  | create_info: &vk::DescriptorPoolCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::DescriptorPool> { | 
|  | let mut pool = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_descriptor_pool)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut pool, | 
|  | ) | 
|  | .result_with_success(pool) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetDescriptorPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn reset_descriptor_pool( | 
|  | &self, | 
|  | pool: vk::DescriptorPool, | 
|  | flags: vk::DescriptorPoolResetFlags, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.reset_descriptor_pool)(self.handle(), pool, flags).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetCommandPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn reset_command_pool( | 
|  | &self, | 
|  | command_pool: vk::CommandPool, | 
|  | flags: vk::CommandPoolResetFlags, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.reset_command_pool)(self.handle(), command_pool, flags).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetCommandBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn reset_command_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | flags: vk::CommandBufferResetFlags, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.reset_command_buffer)(command_buffer, flags).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetFences.html> | 
|  | #[inline] | 
|  | pub unsafe fn reset_fences(&self, fences: &[vk::Fence]) -> VkResult<()> { | 
|  | (self.device_fn_1_0.reset_fences)(self.handle(), fences.len() as u32, fences.as_ptr()) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindIndexBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_bind_index_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | buffer: vk::Buffer, | 
|  | offset: vk::DeviceSize, | 
|  | index_type: vk::IndexType, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_bind_index_buffer)(command_buffer, buffer, offset, index_type); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdClearColorImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_clear_color_image( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | image: vk::Image, | 
|  | image_layout: vk::ImageLayout, | 
|  | clear_color_value: &vk::ClearColorValue, | 
|  | ranges: &[vk::ImageSubresourceRange], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_clear_color_image)( | 
|  | command_buffer, | 
|  | image, | 
|  | image_layout, | 
|  | clear_color_value, | 
|  | ranges.len() as u32, | 
|  | ranges.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdClearDepthStencilImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_clear_depth_stencil_image( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | image: vk::Image, | 
|  | image_layout: vk::ImageLayout, | 
|  | clear_depth_stencil_value: &vk::ClearDepthStencilValue, | 
|  | ranges: &[vk::ImageSubresourceRange], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_clear_depth_stencil_image)( | 
|  | command_buffer, | 
|  | image, | 
|  | image_layout, | 
|  | clear_depth_stencil_value, | 
|  | ranges.len() as u32, | 
|  | ranges.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdClearAttachments.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_clear_attachments( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | attachments: &[vk::ClearAttachment], | 
|  | rects: &[vk::ClearRect], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_clear_attachments)( | 
|  | command_buffer, | 
|  | attachments.len() as u32, | 
|  | attachments.as_ptr(), | 
|  | rects.len() as u32, | 
|  | rects.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexed.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_draw_indexed( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | index_count: u32, | 
|  | instance_count: u32, | 
|  | first_index: u32, | 
|  | vertex_offset: i32, | 
|  | first_instance: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_draw_indexed)( | 
|  | command_buffer, | 
|  | index_count, | 
|  | instance_count, | 
|  | first_index, | 
|  | vertex_offset, | 
|  | first_instance, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexedIndirect.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_draw_indexed_indirect( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | buffer: vk::Buffer, | 
|  | offset: vk::DeviceSize, | 
|  | draw_count: u32, | 
|  | stride: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_draw_indexed_indirect)( | 
|  | command_buffer, | 
|  | buffer, | 
|  | offset, | 
|  | draw_count, | 
|  | stride, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdExecuteCommands.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_execute_commands( | 
|  | &self, | 
|  | primary_command_buffer: vk::CommandBuffer, | 
|  | secondary_command_buffers: &[vk::CommandBuffer], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_execute_commands)( | 
|  | primary_command_buffer, | 
|  | secondary_command_buffers.len() as u32, | 
|  | secondary_command_buffers.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindDescriptorSets.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_bind_descriptor_sets( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | pipeline_bind_point: vk::PipelineBindPoint, | 
|  | layout: vk::PipelineLayout, | 
|  | first_set: u32, | 
|  | descriptor_sets: &[vk::DescriptorSet], | 
|  | dynamic_offsets: &[u32], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_bind_descriptor_sets)( | 
|  | command_buffer, | 
|  | pipeline_bind_point, | 
|  | layout, | 
|  | first_set, | 
|  | descriptor_sets.len() as u32, | 
|  | descriptor_sets.as_ptr(), | 
|  | dynamic_offsets.len() as u32, | 
|  | dynamic_offsets.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyQueryPoolResults.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_copy_query_pool_results( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | query_pool: vk::QueryPool, | 
|  | first_query: u32, | 
|  | query_count: u32, | 
|  | dst_buffer: vk::Buffer, | 
|  | dst_offset: vk::DeviceSize, | 
|  | stride: vk::DeviceSize, | 
|  | flags: vk::QueryResultFlags, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_copy_query_pool_results)( | 
|  | command_buffer, | 
|  | query_pool, | 
|  | first_query, | 
|  | query_count, | 
|  | dst_buffer, | 
|  | dst_offset, | 
|  | stride, | 
|  | flags, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPushConstants.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_push_constants( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | layout: vk::PipelineLayout, | 
|  | stage_flags: vk::ShaderStageFlags, | 
|  | offset: u32, | 
|  | constants: &[u8], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_push_constants)( | 
|  | command_buffer, | 
|  | layout, | 
|  | stage_flags, | 
|  | offset, | 
|  | constants.len() as _, | 
|  | constants.as_ptr() as _, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderPass.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_begin_render_pass( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | render_pass_begin: &vk::RenderPassBeginInfo, | 
|  | contents: vk::SubpassContents, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_begin_render_pass)(command_buffer, render_pass_begin, contents); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdNextSubpass.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_next_subpass( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | contents: vk::SubpassContents, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_next_subpass)(command_buffer, contents); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindPipeline.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_bind_pipeline( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | pipeline_bind_point: vk::PipelineBindPoint, | 
|  | pipeline: vk::Pipeline, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_bind_pipeline)(command_buffer, pipeline_bind_point, pipeline); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetScissor.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_scissor( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | first_scissor: u32, | 
|  | scissors: &[vk::Rect2D], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_scissor)( | 
|  | command_buffer, | 
|  | first_scissor, | 
|  | scissors.len() as u32, | 
|  | scissors.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineWidth.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_line_width(&self, command_buffer: vk::CommandBuffer, line_width: f32) { | 
|  | (self.device_fn_1_0.cmd_set_line_width)(command_buffer, line_width); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindVertexBuffers.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_bind_vertex_buffers( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | first_binding: u32, | 
|  | buffers: &[vk::Buffer], | 
|  | offsets: &[vk::DeviceSize], | 
|  | ) { | 
|  | debug_assert_eq!(buffers.len(), offsets.len()); | 
|  | (self.device_fn_1_0.cmd_bind_vertex_buffers)( | 
|  | command_buffer, | 
|  | first_binding, | 
|  | buffers.len() as u32, | 
|  | buffers.as_ptr(), | 
|  | offsets.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderPass.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_end_render_pass(&self, command_buffer: vk::CommandBuffer) { | 
|  | (self.device_fn_1_0.cmd_end_render_pass)(command_buffer); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDraw.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_draw( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | vertex_count: u32, | 
|  | instance_count: u32, | 
|  | first_vertex: u32, | 
|  | first_instance: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_draw)( | 
|  | command_buffer, | 
|  | vertex_count, | 
|  | instance_count, | 
|  | first_vertex, | 
|  | first_instance, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndirect.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_draw_indirect( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | buffer: vk::Buffer, | 
|  | offset: vk::DeviceSize, | 
|  | draw_count: u32, | 
|  | stride: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_draw_indirect)(command_buffer, buffer, offset, draw_count, stride); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatch.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_dispatch( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | group_count_x: u32, | 
|  | group_count_y: u32, | 
|  | group_count_z: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_dispatch)( | 
|  | command_buffer, | 
|  | group_count_x, | 
|  | group_count_y, | 
|  | group_count_z, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatchIndirect.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_dispatch_indirect( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | buffer: vk::Buffer, | 
|  | offset: vk::DeviceSize, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_dispatch_indirect)(command_buffer, buffer, offset); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewport.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_viewport( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | first_viewport: u32, | 
|  | viewports: &[vk::Viewport], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_viewport)( | 
|  | command_buffer, | 
|  | first_viewport, | 
|  | viewports.len() as u32, | 
|  | viewports.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBias.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_bias( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | constant_factor: f32, | 
|  | clamp: f32, | 
|  | slope_factor: f32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_depth_bias)( | 
|  | command_buffer, | 
|  | constant_factor, | 
|  | clamp, | 
|  | slope_factor, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetBlendConstants.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_blend_constants( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | blend_constants: &[f32; 4], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_blend_constants)(command_buffer, blend_constants); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBounds.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_depth_bounds( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | min_depth_bounds: f32, | 
|  | max_depth_bounds: f32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_depth_bounds)( | 
|  | command_buffer, | 
|  | min_depth_bounds, | 
|  | max_depth_bounds, | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilCompareMask.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_stencil_compare_mask( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | face_mask: vk::StencilFaceFlags, | 
|  | compare_mask: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_stencil_compare_mask)(command_buffer, face_mask, compare_mask); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilWriteMask.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_stencil_write_mask( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | face_mask: vk::StencilFaceFlags, | 
|  | write_mask: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_stencil_write_mask)(command_buffer, face_mask, write_mask); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilReference.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_set_stencil_reference( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | face_mask: vk::StencilFaceFlags, | 
|  | reference: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_set_stencil_reference)(command_buffer, face_mask, reference); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetQueryPoolResults.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_query_pool_results<T>( | 
|  | &self, | 
|  | query_pool: vk::QueryPool, | 
|  | first_query: u32, | 
|  | query_count: u32, | 
|  | data: &mut [T], | 
|  | flags: vk::QueryResultFlags, | 
|  | ) -> VkResult<()> { | 
|  | let data_length = query_count as usize; | 
|  | assert!( | 
|  | data_length <= data.len(), | 
|  | "query_count was higher than the length of the slice" | 
|  | ); | 
|  | let data_size = mem::size_of::<T>() * data_length; | 
|  | (self.device_fn_1_0.get_query_pool_results)( | 
|  | self.handle(), | 
|  | query_pool, | 
|  | first_query, | 
|  | query_count, | 
|  | data_size, | 
|  | data.as_mut_ptr().cast(), | 
|  | mem::size_of::<T>() as _, | 
|  | flags, | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginQuery.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_begin_query( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | query_pool: vk::QueryPool, | 
|  | query: u32, | 
|  | flags: vk::QueryControlFlags, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_begin_query)(command_buffer, query_pool, query, flags); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndQuery.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_end_query( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | query_pool: vk::QueryPool, | 
|  | query: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_end_query)(command_buffer, query_pool, query); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetQueryPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_reset_query_pool( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | pool: vk::QueryPool, | 
|  | first_query: u32, | 
|  | query_count: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_reset_query_pool)(command_buffer, pool, first_query, query_count); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWriteTimestamp.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_write_timestamp( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | pipeline_stage: vk::PipelineStageFlags, | 
|  | query_pool: vk::QueryPool, | 
|  | query: u32, | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_write_timestamp)(command_buffer, pipeline_stage, query_pool, query); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSemaphore.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_semaphore( | 
|  | &self, | 
|  | create_info: &vk::SemaphoreCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Semaphore> { | 
|  | let mut semaphore = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_semaphore)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut semaphore, | 
|  | ) | 
|  | .result_with_success(semaphore) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateGraphicsPipelines.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_graphics_pipelines( | 
|  | &self, | 
|  | pipeline_cache: vk::PipelineCache, | 
|  | create_infos: &[vk::GraphicsPipelineCreateInfo], | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> Result<Vec<vk::Pipeline>, (Vec<vk::Pipeline>, vk::Result)> { | 
|  | let mut pipelines = Vec::with_capacity(create_infos.len()); | 
|  | let err_code = (self.device_fn_1_0.create_graphics_pipelines)( | 
|  | self.handle(), | 
|  | pipeline_cache, | 
|  | create_infos.len() as u32, | 
|  | create_infos.as_ptr(), | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | pipelines.as_mut_ptr(), | 
|  | ); | 
|  | pipelines.set_len(create_infos.len()); | 
|  | match err_code { | 
|  | vk::Result::SUCCESS => Ok(pipelines), | 
|  | _ => Err((pipelines, err_code)), | 
|  | } | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateComputePipelines.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_compute_pipelines( | 
|  | &self, | 
|  | pipeline_cache: vk::PipelineCache, | 
|  | create_infos: &[vk::ComputePipelineCreateInfo], | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> Result<Vec<vk::Pipeline>, (Vec<vk::Pipeline>, vk::Result)> { | 
|  | let mut pipelines = Vec::with_capacity(create_infos.len()); | 
|  | let err_code = (self.device_fn_1_0.create_compute_pipelines)( | 
|  | self.handle(), | 
|  | pipeline_cache, | 
|  | create_infos.len() as u32, | 
|  | create_infos.as_ptr(), | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | pipelines.as_mut_ptr(), | 
|  | ); | 
|  | pipelines.set_len(create_infos.len()); | 
|  | match err_code { | 
|  | vk::Result::SUCCESS => Ok(pipelines), | 
|  | _ => Err((pipelines, err_code)), | 
|  | } | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_buffer( | 
|  | &self, | 
|  | create_info: &vk::BufferCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Buffer> { | 
|  | let mut buffer = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_buffer)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut buffer, | 
|  | ) | 
|  | .result_with_success(buffer) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePipelineLayout.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_pipeline_layout( | 
|  | &self, | 
|  | create_info: &vk::PipelineLayoutCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::PipelineLayout> { | 
|  | let mut pipeline_layout = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_pipeline_layout)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut pipeline_layout, | 
|  | ) | 
|  | .result_with_success(pipeline_layout) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePipelineCache.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_pipeline_cache( | 
|  | &self, | 
|  | create_info: &vk::PipelineCacheCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::PipelineCache> { | 
|  | let mut pipeline_cache = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_pipeline_cache)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut pipeline_cache, | 
|  | ) | 
|  | .result_with_success(pipeline_cache) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPipelineCacheData.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_pipeline_cache_data( | 
|  | &self, | 
|  | pipeline_cache: vk::PipelineCache, | 
|  | ) -> VkResult<Vec<u8>> { | 
|  | read_into_uninitialized_vector(|count, data| { | 
|  | (self.device_fn_1_0.get_pipeline_cache_data)( | 
|  | self.handle(), | 
|  | pipeline_cache, | 
|  | count, | 
|  | data as _, | 
|  | ) | 
|  | }) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkMergePipelineCaches.html> | 
|  | #[inline] | 
|  | pub unsafe fn merge_pipeline_caches( | 
|  | &self, | 
|  | dst_cache: vk::PipelineCache, | 
|  | src_caches: &[vk::PipelineCache], | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.merge_pipeline_caches)( | 
|  | self.handle(), | 
|  | dst_cache, | 
|  | src_caches.len() as u32, | 
|  | src_caches.as_ptr(), | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkMapMemory.html> | 
|  | #[inline] | 
|  | pub unsafe fn map_memory( | 
|  | &self, | 
|  | memory: vk::DeviceMemory, | 
|  | offset: vk::DeviceSize, | 
|  | size: vk::DeviceSize, | 
|  | flags: vk::MemoryMapFlags, | 
|  | ) -> VkResult<*mut c_void> { | 
|  | let mut data: *mut c_void = ptr::null_mut(); | 
|  | (self.device_fn_1_0.map_memory)(self.handle(), memory, offset, size, flags, &mut data) | 
|  | .result_with_success(data) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUnmapMemory.html> | 
|  | #[inline] | 
|  | pub unsafe fn unmap_memory(&self, memory: vk::DeviceMemory) { | 
|  | (self.device_fn_1_0.unmap_memory)(self.handle(), memory); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkInvalidateMappedMemoryRanges.html> | 
|  | #[inline] | 
|  | pub unsafe fn invalidate_mapped_memory_ranges( | 
|  | &self, | 
|  | ranges: &[vk::MappedMemoryRange], | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.invalidate_mapped_memory_ranges)( | 
|  | self.handle(), | 
|  | ranges.len() as u32, | 
|  | ranges.as_ptr(), | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFlushMappedMemoryRanges.html> | 
|  | #[inline] | 
|  | pub unsafe fn flush_mapped_memory_ranges( | 
|  | &self, | 
|  | ranges: &[vk::MappedMemoryRange], | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.flush_mapped_memory_ranges)( | 
|  | self.handle(), | 
|  | ranges.len() as u32, | 
|  | ranges.as_ptr(), | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateFramebuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_framebuffer( | 
|  | &self, | 
|  | create_info: &vk::FramebufferCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Framebuffer> { | 
|  | let mut framebuffer = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_framebuffer)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut framebuffer, | 
|  | ) | 
|  | .result_with_success(framebuffer) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceQueue.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_queue(&self, queue_family_index: u32, queue_index: u32) -> vk::Queue { | 
|  | let mut queue = mem::zeroed(); | 
|  | (self.device_fn_1_0.get_device_queue)( | 
|  | self.handle(), | 
|  | queue_family_index, | 
|  | queue_index, | 
|  | &mut queue, | 
|  | ); | 
|  | queue | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPipelineBarrier.html> | 
|  | #[inline] | 
|  | pub unsafe fn cmd_pipeline_barrier( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | src_stage_mask: vk::PipelineStageFlags, | 
|  | dst_stage_mask: vk::PipelineStageFlags, | 
|  | dependency_flags: vk::DependencyFlags, | 
|  | memory_barriers: &[vk::MemoryBarrier], | 
|  | buffer_memory_barriers: &[vk::BufferMemoryBarrier], | 
|  | image_memory_barriers: &[vk::ImageMemoryBarrier], | 
|  | ) { | 
|  | (self.device_fn_1_0.cmd_pipeline_barrier)( | 
|  | command_buffer, | 
|  | src_stage_mask, | 
|  | dst_stage_mask, | 
|  | dependency_flags, | 
|  | memory_barriers.len() as u32, | 
|  | memory_barriers.as_ptr(), | 
|  | buffer_memory_barriers.len() as u32, | 
|  | buffer_memory_barriers.as_ptr(), | 
|  | image_memory_barriers.len() as u32, | 
|  | image_memory_barriers.as_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateRenderPass.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_render_pass( | 
|  | &self, | 
|  | create_info: &vk::RenderPassCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::RenderPass> { | 
|  | let mut renderpass = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_render_pass)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut renderpass, | 
|  | ) | 
|  | .result_with_success(renderpass) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBeginCommandBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn begin_command_buffer( | 
|  | &self, | 
|  | command_buffer: vk::CommandBuffer, | 
|  | begin_info: &vk::CommandBufferBeginInfo, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.begin_command_buffer)(command_buffer, begin_info).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkEndCommandBuffer.html> | 
|  | #[inline] | 
|  | pub unsafe fn end_command_buffer(&self, command_buffer: vk::CommandBuffer) -> VkResult<()> { | 
|  | (self.device_fn_1_0.end_command_buffer)(command_buffer).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkWaitForFences.html> | 
|  | #[inline] | 
|  | pub unsafe fn wait_for_fences( | 
|  | &self, | 
|  | fences: &[vk::Fence], | 
|  | wait_all: bool, | 
|  | timeout: u64, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.wait_for_fences)( | 
|  | self.handle(), | 
|  | fences.len() as u32, | 
|  | fences.as_ptr(), | 
|  | wait_all as u32, | 
|  | timeout, | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetFenceStatus.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_fence_status(&self, fence: vk::Fence) -> VkResult<bool> { | 
|  | let err_code = (self.device_fn_1_0.get_fence_status)(self.handle(), fence); | 
|  | match err_code { | 
|  | vk::Result::SUCCESS => Ok(true), | 
|  | vk::Result::NOT_READY => Ok(false), | 
|  | _ => Err(err_code), | 
|  | } | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueWaitIdle.html> | 
|  | #[inline] | 
|  | pub unsafe fn queue_wait_idle(&self, queue: vk::Queue) -> VkResult<()> { | 
|  | (self.device_fn_1_0.queue_wait_idle)(queue).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueSubmit.html> | 
|  | #[inline] | 
|  | pub unsafe fn queue_submit( | 
|  | &self, | 
|  | queue: vk::Queue, | 
|  | submits: &[vk::SubmitInfo], | 
|  | fence: vk::Fence, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.queue_submit)(queue, submits.len() as u32, submits.as_ptr(), fence) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueBindSparse.html> | 
|  | #[inline] | 
|  | pub unsafe fn queue_bind_sparse( | 
|  | &self, | 
|  | queue: vk::Queue, | 
|  | bind_info: &[vk::BindSparseInfo], | 
|  | fence: vk::Fence, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.queue_bind_sparse)( | 
|  | queue, | 
|  | bind_info.len() as u32, | 
|  | bind_info.as_ptr(), | 
|  | fence, | 
|  | ) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateBufferView.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_buffer_view( | 
|  | &self, | 
|  | create_info: &vk::BufferViewCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::BufferView> { | 
|  | let mut buffer_view = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_buffer_view)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut buffer_view, | 
|  | ) | 
|  | .result_with_success(buffer_view) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyBufferView.html> | 
|  | #[inline] | 
|  | pub unsafe fn destroy_buffer_view( | 
|  | &self, | 
|  | buffer_view: vk::BufferView, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) { | 
|  | (self.device_fn_1_0.destroy_buffer_view)( | 
|  | self.handle(), | 
|  | buffer_view, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | ); | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateImageView.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_image_view( | 
|  | &self, | 
|  | create_info: &vk::ImageViewCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::ImageView> { | 
|  | let mut image_view = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_image_view)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut image_view, | 
|  | ) | 
|  | .result_with_success(image_view) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateCommandBuffers.html> | 
|  | #[inline] | 
|  | pub unsafe fn allocate_command_buffers( | 
|  | &self, | 
|  | allocate_info: &vk::CommandBufferAllocateInfo, | 
|  | ) -> VkResult<Vec<vk::CommandBuffer>> { | 
|  | let mut buffers = Vec::with_capacity(allocate_info.command_buffer_count as usize); | 
|  | (self.device_fn_1_0.allocate_command_buffers)( | 
|  | self.handle(), | 
|  | allocate_info, | 
|  | buffers.as_mut_ptr(), | 
|  | ) | 
|  | .result()?; | 
|  | buffers.set_len(allocate_info.command_buffer_count as usize); | 
|  | Ok(buffers) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateCommandPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_command_pool( | 
|  | &self, | 
|  | create_info: &vk::CommandPoolCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::CommandPool> { | 
|  | let mut pool = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_command_pool)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut pool, | 
|  | ) | 
|  | .result_with_success(pool) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateQueryPool.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_query_pool( | 
|  | &self, | 
|  | create_info: &vk::QueryPoolCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::QueryPool> { | 
|  | let mut pool = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_query_pool)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut pool, | 
|  | ) | 
|  | .result_with_success(pool) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateImage.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_image( | 
|  | &self, | 
|  | create_info: &vk::ImageCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Image> { | 
|  | let mut image = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_image)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut image, | 
|  | ) | 
|  | .result_with_success(image) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSubresourceLayout.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_image_subresource_layout( | 
|  | &self, | 
|  | image: vk::Image, | 
|  | subresource: vk::ImageSubresource, | 
|  | ) -> vk::SubresourceLayout { | 
|  | let mut layout = mem::zeroed(); | 
|  | (self.device_fn_1_0.get_image_subresource_layout)( | 
|  | self.handle(), | 
|  | image, | 
|  | &subresource, | 
|  | &mut layout, | 
|  | ); | 
|  | layout | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageMemoryRequirements.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_image_memory_requirements(&self, image: vk::Image) -> vk::MemoryRequirements { | 
|  | let mut mem_req = mem::zeroed(); | 
|  | (self.device_fn_1_0.get_image_memory_requirements)(self.handle(), image, &mut mem_req); | 
|  | mem_req | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferMemoryRequirements.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_buffer_memory_requirements( | 
|  | &self, | 
|  | buffer: vk::Buffer, | 
|  | ) -> vk::MemoryRequirements { | 
|  | let mut mem_req = mem::zeroed(); | 
|  | (self.device_fn_1_0.get_buffer_memory_requirements)(self.handle(), buffer, &mut mem_req); | 
|  | mem_req | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateMemory.html> | 
|  | #[inline] | 
|  | pub unsafe fn allocate_memory( | 
|  | &self, | 
|  | allocate_info: &vk::MemoryAllocateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::DeviceMemory> { | 
|  | let mut memory = mem::zeroed(); | 
|  | (self.device_fn_1_0.allocate_memory)( | 
|  | self.handle(), | 
|  | allocate_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut memory, | 
|  | ) | 
|  | .result_with_success(memory) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateShaderModule.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_shader_module( | 
|  | &self, | 
|  | create_info: &vk::ShaderModuleCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::ShaderModule> { | 
|  | let mut shader = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_shader_module)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut shader, | 
|  | ) | 
|  | .result_with_success(shader) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateFence.html> | 
|  | #[inline] | 
|  | pub unsafe fn create_fence( | 
|  | &self, | 
|  | create_info: &vk::FenceCreateInfo, | 
|  | allocation_callbacks: Option<&vk::AllocationCallbacks>, | 
|  | ) -> VkResult<vk::Fence> { | 
|  | let mut fence = mem::zeroed(); | 
|  | (self.device_fn_1_0.create_fence)( | 
|  | self.handle(), | 
|  | create_info, | 
|  | allocation_callbacks.as_raw_ptr(), | 
|  | &mut fence, | 
|  | ) | 
|  | .result_with_success(fence) | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindBufferMemory.html> | 
|  | #[inline] | 
|  | pub unsafe fn bind_buffer_memory( | 
|  | &self, | 
|  | buffer: vk::Buffer, | 
|  | device_memory: vk::DeviceMemory, | 
|  | offset: vk::DeviceSize, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.bind_buffer_memory)(self.handle(), buffer, device_memory, offset) | 
|  | .result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindImageMemory.html> | 
|  | #[inline] | 
|  | pub unsafe fn bind_image_memory( | 
|  | &self, | 
|  | image: vk::Image, | 
|  | device_memory: vk::DeviceMemory, | 
|  | offset: vk::DeviceSize, | 
|  | ) -> VkResult<()> { | 
|  | (self.device_fn_1_0.bind_image_memory)(self.handle(), image, device_memory, offset).result() | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetRenderAreaGranularity.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_render_area_granularity(&self, render_pass: vk::RenderPass) -> vk::Extent2D { | 
|  | let mut granularity = mem::zeroed(); | 
|  | (self.device_fn_1_0.get_render_area_granularity)( | 
|  | self.handle(), | 
|  | render_pass, | 
|  | &mut granularity, | 
|  | ); | 
|  | granularity | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceMemoryCommitment.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_device_memory_commitment(&self, memory: vk::DeviceMemory) -> vk::DeviceSize { | 
|  | let mut committed_memory_in_bytes = 0; | 
|  | (self.device_fn_1_0.get_device_memory_commitment)( | 
|  | self.handle(), | 
|  | memory, | 
|  | &mut committed_memory_in_bytes, | 
|  | ); | 
|  | committed_memory_in_bytes | 
|  | } | 
|  |  | 
|  | /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSparseMemoryRequirements.html> | 
|  | #[inline] | 
|  | pub unsafe fn get_image_sparse_memory_requirements( | 
|  | &self, | 
|  | image: vk::Image, | 
|  | ) -> Vec<vk::SparseImageMemoryRequirements> { | 
|  | read_into_uninitialized_vector(|count, data| { | 
|  | (self.device_fn_1_0.get_image_sparse_memory_requirements)( | 
|  | self.handle(), | 
|  | image, | 
|  | count, | 
|  | data, | 
|  | ); | 
|  | vk::Result::SUCCESS | 
|  | }) | 
|  | // The closure always returns SUCCESS | 
|  | .unwrap() | 
|  | } | 
|  | } |