1 #![allow(clippy::trivially_copy_pass_by_ref)] 2 use crate::prelude::*; 3 use crate::vk; 4 use crate::RawPtr; 5 use std::mem; 6 use std::os::raw::c_void; 7 use std::ptr; 8 9 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDevice.html> 10 #[derive(Clone)] 11 pub struct Device { 12 pub(crate) handle: vk::Device, 13 14 pub(crate) device_fn_1_0: vk::DeviceFnV1_0, 15 pub(crate) device_fn_1_1: vk::DeviceFnV1_1, 16 pub(crate) device_fn_1_2: vk::DeviceFnV1_2, 17 pub(crate) device_fn_1_3: vk::DeviceFnV1_3, 18 } 19 20 impl Device { load(instance_fn: &vk::InstanceFnV1_0, device: vk::Device) -> Self21 pub unsafe fn load(instance_fn: &vk::InstanceFnV1_0, device: vk::Device) -> Self { 22 let load_fn = |name: &std::ffi::CStr| { 23 mem::transmute((instance_fn.get_device_proc_addr)(device, name.as_ptr())) 24 }; 25 26 Self { 27 handle: device, 28 29 device_fn_1_0: vk::DeviceFnV1_0::load(load_fn), 30 device_fn_1_1: vk::DeviceFnV1_1::load(load_fn), 31 device_fn_1_2: vk::DeviceFnV1_2::load(load_fn), 32 device_fn_1_3: vk::DeviceFnV1_3::load(load_fn), 33 } 34 } 35 36 #[inline] handle(&self) -> vk::Device37 pub fn handle(&self) -> vk::Device { 38 self.handle 39 } 40 } 41 42 /// Vulkan core 1.3 43 #[allow(non_camel_case_types)] 44 impl Device { 45 #[inline] fp_v1_3(&self) -> &vk::DeviceFnV1_346 pub fn fp_v1_3(&self) -> &vk::DeviceFnV1_3 { 47 &self.device_fn_1_3 48 } 49 50 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePrivateDataSlot.html> 51 #[inline] create_private_data_slot( &self, create_info: &vk::PrivateDataSlotCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::PrivateDataSlot>52 pub unsafe fn create_private_data_slot( 53 &self, 54 create_info: &vk::PrivateDataSlotCreateInfo, 55 allocation_callbacks: Option<&vk::AllocationCallbacks>, 56 ) -> VkResult<vk::PrivateDataSlot> { 57 let mut private_data_slot = mem::zeroed(); 58 (self.device_fn_1_3.create_private_data_slot)( 59 self.handle, 60 create_info, 61 allocation_callbacks.as_raw_ptr(), 62 &mut private_data_slot, 63 ) 64 .result_with_success(private_data_slot) 65 } 66 67 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPrivateDataSlot.html> 68 #[inline] destroy_private_data_slot( &self, private_data_slot: vk::PrivateDataSlot, allocation_callbacks: Option<&vk::AllocationCallbacks>, )69 pub unsafe fn destroy_private_data_slot( 70 &self, 71 private_data_slot: vk::PrivateDataSlot, 72 allocation_callbacks: Option<&vk::AllocationCallbacks>, 73 ) { 74 (self.device_fn_1_3.destroy_private_data_slot)( 75 self.handle, 76 private_data_slot, 77 allocation_callbacks.as_raw_ptr(), 78 ) 79 } 80 81 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSetPrivateData.html> 82 #[inline] set_private_data<T: vk::Handle>( &self, object: T, private_data_slot: vk::PrivateDataSlot, data: u64, ) -> VkResult<()>83 pub unsafe fn set_private_data<T: vk::Handle>( 84 &self, 85 object: T, 86 private_data_slot: vk::PrivateDataSlot, 87 data: u64, 88 ) -> VkResult<()> { 89 (self.device_fn_1_3.set_private_data)( 90 self.handle, 91 T::TYPE, 92 object.as_raw(), 93 private_data_slot, 94 data, 95 ) 96 .result() 97 } 98 99 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPrivateData.html> 100 #[inline] get_private_data<T: vk::Handle>( &self, object: T, private_data_slot: vk::PrivateDataSlot, ) -> u64101 pub unsafe fn get_private_data<T: vk::Handle>( 102 &self, 103 object: T, 104 private_data_slot: vk::PrivateDataSlot, 105 ) -> u64 { 106 let mut data = mem::zeroed(); 107 (self.device_fn_1_3.get_private_data)( 108 self.handle, 109 T::TYPE, 110 object.as_raw(), 111 private_data_slot, 112 &mut data, 113 ); 114 data 115 } 116 117 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPipelineBarrier2.html> 118 #[inline] cmd_pipeline_barrier2( &self, command_buffer: vk::CommandBuffer, dependency_info: &vk::DependencyInfo, )119 pub unsafe fn cmd_pipeline_barrier2( 120 &self, 121 command_buffer: vk::CommandBuffer, 122 dependency_info: &vk::DependencyInfo, 123 ) { 124 (self.device_fn_1_3.cmd_pipeline_barrier2)(command_buffer, dependency_info) 125 } 126 127 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetEvent2.html> 128 #[inline] cmd_reset_event2( &self, command_buffer: vk::CommandBuffer, event: vk::Event, stage_mask: vk::PipelineStageFlags2, )129 pub unsafe fn cmd_reset_event2( 130 &self, 131 command_buffer: vk::CommandBuffer, 132 event: vk::Event, 133 stage_mask: vk::PipelineStageFlags2, 134 ) { 135 (self.device_fn_1_3.cmd_reset_event2)(command_buffer, event, stage_mask) 136 } 137 138 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetEvent2.html> 139 #[inline] cmd_set_event2( &self, command_buffer: vk::CommandBuffer, event: vk::Event, dependency_info: &vk::DependencyInfo, )140 pub unsafe fn cmd_set_event2( 141 &self, 142 command_buffer: vk::CommandBuffer, 143 event: vk::Event, 144 dependency_info: &vk::DependencyInfo, 145 ) { 146 (self.device_fn_1_3.cmd_set_event2)(command_buffer, event, dependency_info) 147 } 148 149 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWaitEvents2.html> 150 #[inline] cmd_wait_events2( &self, command_buffer: vk::CommandBuffer, events: &[vk::Event], dependency_infos: &[vk::DependencyInfo], )151 pub unsafe fn cmd_wait_events2( 152 &self, 153 command_buffer: vk::CommandBuffer, 154 events: &[vk::Event], 155 dependency_infos: &[vk::DependencyInfo], 156 ) { 157 assert_eq!(events.len(), dependency_infos.len()); 158 (self.device_fn_1_3.cmd_wait_events2)( 159 command_buffer, 160 events.len() as u32, 161 events.as_ptr(), 162 dependency_infos.as_ptr(), 163 ) 164 } 165 166 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWriteTimestamp2.html> 167 #[inline] cmd_write_timestamp2( &self, command_buffer: vk::CommandBuffer, stage: vk::PipelineStageFlags2, query_pool: vk::QueryPool, query: u32, )168 pub unsafe fn cmd_write_timestamp2( 169 &self, 170 command_buffer: vk::CommandBuffer, 171 stage: vk::PipelineStageFlags2, 172 query_pool: vk::QueryPool, 173 query: u32, 174 ) { 175 (self.device_fn_1_3.cmd_write_timestamp2)(command_buffer, stage, query_pool, query) 176 } 177 178 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueSubmit2.html> 179 #[inline] queue_submit2( &self, queue: vk::Queue, submits: &[vk::SubmitInfo2], fence: vk::Fence, ) -> VkResult<()>180 pub unsafe fn queue_submit2( 181 &self, 182 queue: vk::Queue, 183 submits: &[vk::SubmitInfo2], 184 fence: vk::Fence, 185 ) -> VkResult<()> { 186 (self.device_fn_1_3.queue_submit2)(queue, submits.len() as u32, submits.as_ptr(), fence) 187 .result() 188 } 189 190 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBuffer2.html> 191 #[inline] cmd_copy_buffer2( &self, command_buffer: vk::CommandBuffer, copy_buffer_info: &vk::CopyBufferInfo2, )192 pub unsafe fn cmd_copy_buffer2( 193 &self, 194 command_buffer: vk::CommandBuffer, 195 copy_buffer_info: &vk::CopyBufferInfo2, 196 ) { 197 (self.device_fn_1_3.cmd_copy_buffer2)(command_buffer, copy_buffer_info) 198 } 199 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImage2.html> 200 #[inline] cmd_copy_image2( &self, command_buffer: vk::CommandBuffer, copy_image_info: &vk::CopyImageInfo2, )201 pub unsafe fn cmd_copy_image2( 202 &self, 203 command_buffer: vk::CommandBuffer, 204 copy_image_info: &vk::CopyImageInfo2, 205 ) { 206 (self.device_fn_1_3.cmd_copy_image2)(command_buffer, copy_image_info) 207 } 208 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBufferToImage2.html> 209 #[inline] cmd_copy_buffer_to_image2( &self, command_buffer: vk::CommandBuffer, copy_buffer_to_image_info: &vk::CopyBufferToImageInfo2, )210 pub unsafe fn cmd_copy_buffer_to_image2( 211 &self, 212 command_buffer: vk::CommandBuffer, 213 copy_buffer_to_image_info: &vk::CopyBufferToImageInfo2, 214 ) { 215 (self.device_fn_1_3.cmd_copy_buffer_to_image2)(command_buffer, copy_buffer_to_image_info) 216 } 217 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImageToBuffer2.html> 218 #[inline] cmd_copy_image_to_buffer2( &self, command_buffer: vk::CommandBuffer, copy_image_to_buffer_info: &vk::CopyImageToBufferInfo2, )219 pub unsafe fn cmd_copy_image_to_buffer2( 220 &self, 221 command_buffer: vk::CommandBuffer, 222 copy_image_to_buffer_info: &vk::CopyImageToBufferInfo2, 223 ) { 224 (self.device_fn_1_3.cmd_copy_image_to_buffer2)(command_buffer, copy_image_to_buffer_info) 225 } 226 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBlitImage2.html> 227 #[inline] cmd_blit_image2( &self, command_buffer: vk::CommandBuffer, blit_image_info: &vk::BlitImageInfo2, )228 pub unsafe fn cmd_blit_image2( 229 &self, 230 command_buffer: vk::CommandBuffer, 231 blit_image_info: &vk::BlitImageInfo2, 232 ) { 233 (self.device_fn_1_3.cmd_blit_image2)(command_buffer, blit_image_info) 234 } 235 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResolveImage2.html> 236 #[inline] cmd_resolve_image2( &self, command_buffer: vk::CommandBuffer, resolve_image_info: &vk::ResolveImageInfo2, )237 pub unsafe fn cmd_resolve_image2( 238 &self, 239 command_buffer: vk::CommandBuffer, 240 resolve_image_info: &vk::ResolveImageInfo2, 241 ) { 242 (self.device_fn_1_3.cmd_resolve_image2)(command_buffer, resolve_image_info) 243 } 244 245 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRendering.html> 246 #[inline] cmd_begin_rendering( &self, command_buffer: vk::CommandBuffer, rendering_info: &vk::RenderingInfo, )247 pub unsafe fn cmd_begin_rendering( 248 &self, 249 command_buffer: vk::CommandBuffer, 250 rendering_info: &vk::RenderingInfo, 251 ) { 252 (self.device_fn_1_3.cmd_begin_rendering)(command_buffer, rendering_info) 253 } 254 255 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRendering.html> 256 #[inline] cmd_end_rendering(&self, command_buffer: vk::CommandBuffer)257 pub unsafe fn cmd_end_rendering(&self, command_buffer: vk::CommandBuffer) { 258 (self.device_fn_1_3.cmd_end_rendering)(command_buffer) 259 } 260 261 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCullMode.html> 262 #[inline] cmd_set_cull_mode( &self, command_buffer: vk::CommandBuffer, cull_mode: vk::CullModeFlags, )263 pub unsafe fn cmd_set_cull_mode( 264 &self, 265 command_buffer: vk::CommandBuffer, 266 cull_mode: vk::CullModeFlags, 267 ) { 268 (self.device_fn_1_3.cmd_set_cull_mode)(command_buffer, cull_mode) 269 } 270 271 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetFrontFace.html> 272 #[inline] cmd_set_front_face( &self, command_buffer: vk::CommandBuffer, front_face: vk::FrontFace, )273 pub unsafe fn cmd_set_front_face( 274 &self, 275 command_buffer: vk::CommandBuffer, 276 front_face: vk::FrontFace, 277 ) { 278 (self.device_fn_1_3.cmd_set_front_face)(command_buffer, front_face) 279 } 280 281 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPrimitiveTopology.html> 282 #[inline] cmd_set_primitive_topology( &self, command_buffer: vk::CommandBuffer, primitive_topology: vk::PrimitiveTopology, )283 pub unsafe fn cmd_set_primitive_topology( 284 &self, 285 command_buffer: vk::CommandBuffer, 286 primitive_topology: vk::PrimitiveTopology, 287 ) { 288 (self.device_fn_1_3.cmd_set_primitive_topology)(command_buffer, primitive_topology) 289 } 290 291 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportWithCount.html> 292 #[inline] cmd_set_viewport_with_count( &self, command_buffer: vk::CommandBuffer, viewports: &[vk::Viewport], )293 pub unsafe fn cmd_set_viewport_with_count( 294 &self, 295 command_buffer: vk::CommandBuffer, 296 viewports: &[vk::Viewport], 297 ) { 298 (self.device_fn_1_3.cmd_set_viewport_with_count)( 299 command_buffer, 300 viewports.len() as u32, 301 viewports.as_ptr(), 302 ) 303 } 304 305 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetScissorWithCount.html> 306 #[inline] cmd_set_scissor_with_count( &self, command_buffer: vk::CommandBuffer, scissors: &[vk::Rect2D], )307 pub unsafe fn cmd_set_scissor_with_count( 308 &self, 309 command_buffer: vk::CommandBuffer, 310 scissors: &[vk::Rect2D], 311 ) { 312 (self.device_fn_1_3.cmd_set_scissor_with_count)( 313 command_buffer, 314 scissors.len() as u32, 315 scissors.as_ptr(), 316 ) 317 } 318 319 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindVertexBuffers2.html> 320 #[inline] 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]>, )321 pub unsafe fn cmd_bind_vertex_buffers2( 322 &self, 323 command_buffer: vk::CommandBuffer, 324 first_binding: u32, 325 buffers: &[vk::Buffer], 326 offsets: &[vk::DeviceSize], 327 sizes: Option<&[vk::DeviceSize]>, 328 strides: Option<&[vk::DeviceSize]>, 329 ) { 330 assert_eq!(offsets.len(), buffers.len()); 331 let p_sizes = if let Some(sizes) = sizes { 332 assert_eq!(sizes.len(), buffers.len()); 333 sizes.as_ptr() 334 } else { 335 ptr::null() 336 }; 337 let p_strides = if let Some(strides) = strides { 338 assert_eq!(strides.len(), buffers.len()); 339 strides.as_ptr() 340 } else { 341 ptr::null() 342 }; 343 (self.device_fn_1_3.cmd_bind_vertex_buffers2)( 344 command_buffer, 345 first_binding, 346 buffers.len() as u32, 347 buffers.as_ptr(), 348 offsets.as_ptr(), 349 p_sizes, 350 p_strides, 351 ) 352 } 353 354 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthTestEnable.html> 355 #[inline] cmd_set_depth_test_enable( &self, command_buffer: vk::CommandBuffer, depth_test_enable: bool, )356 pub unsafe fn cmd_set_depth_test_enable( 357 &self, 358 command_buffer: vk::CommandBuffer, 359 depth_test_enable: bool, 360 ) { 361 (self.device_fn_1_3.cmd_set_depth_test_enable)(command_buffer, depth_test_enable.into()) 362 } 363 364 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthWriteEnable.html> 365 #[inline] cmd_set_depth_write_enable( &self, command_buffer: vk::CommandBuffer, depth_write_enable: bool, )366 pub unsafe fn cmd_set_depth_write_enable( 367 &self, 368 command_buffer: vk::CommandBuffer, 369 depth_write_enable: bool, 370 ) { 371 (self.device_fn_1_3.cmd_set_depth_write_enable)(command_buffer, depth_write_enable.into()) 372 } 373 374 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthCompareOp.html> 375 #[inline] cmd_set_depth_compare_op( &self, command_buffer: vk::CommandBuffer, depth_compare_op: vk::CompareOp, )376 pub unsafe fn cmd_set_depth_compare_op( 377 &self, 378 command_buffer: vk::CommandBuffer, 379 depth_compare_op: vk::CompareOp, 380 ) { 381 (self.device_fn_1_3.cmd_set_depth_compare_op)(command_buffer, depth_compare_op) 382 } 383 384 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBoundsTestEnable.html> 385 #[inline] cmd_set_depth_bounds_test_enable( &self, command_buffer: vk::CommandBuffer, depth_bounds_test_enable: bool, )386 pub unsafe fn cmd_set_depth_bounds_test_enable( 387 &self, 388 command_buffer: vk::CommandBuffer, 389 depth_bounds_test_enable: bool, 390 ) { 391 (self.device_fn_1_3.cmd_set_depth_bounds_test_enable)( 392 command_buffer, 393 depth_bounds_test_enable.into(), 394 ) 395 } 396 397 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilTestEnable.html> 398 #[inline] cmd_set_stencil_test_enable( &self, command_buffer: vk::CommandBuffer, stencil_test_enable: bool, )399 pub unsafe fn cmd_set_stencil_test_enable( 400 &self, 401 command_buffer: vk::CommandBuffer, 402 stencil_test_enable: bool, 403 ) { 404 (self.device_fn_1_3.cmd_set_stencil_test_enable)(command_buffer, stencil_test_enable.into()) 405 } 406 407 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilOp.html> 408 #[inline] 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, )409 pub unsafe fn cmd_set_stencil_op( 410 &self, 411 command_buffer: vk::CommandBuffer, 412 face_mask: vk::StencilFaceFlags, 413 fail_op: vk::StencilOp, 414 pass_op: vk::StencilOp, 415 depth_fail_op: vk::StencilOp, 416 compare_op: vk::CompareOp, 417 ) { 418 (self.device_fn_1_3.cmd_set_stencil_op)( 419 command_buffer, 420 face_mask, 421 fail_op, 422 pass_op, 423 depth_fail_op, 424 compare_op, 425 ) 426 } 427 428 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizerDiscardEnable.html> 429 #[inline] cmd_set_rasterizer_discard_enable( &self, command_buffer: vk::CommandBuffer, rasterizer_discard_enable: bool, )430 pub unsafe fn cmd_set_rasterizer_discard_enable( 431 &self, 432 command_buffer: vk::CommandBuffer, 433 rasterizer_discard_enable: bool, 434 ) { 435 (self.device_fn_1_3.cmd_set_rasterizer_discard_enable)( 436 command_buffer, 437 rasterizer_discard_enable.into(), 438 ) 439 } 440 441 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBiasEnable.html> 442 #[inline] cmd_set_depth_bias_enable( &self, command_buffer: vk::CommandBuffer, depth_bias_enable: bool, )443 pub unsafe fn cmd_set_depth_bias_enable( 444 &self, 445 command_buffer: vk::CommandBuffer, 446 depth_bias_enable: bool, 447 ) { 448 (self.device_fn_1_3.cmd_set_depth_bias_enable)(command_buffer, depth_bias_enable.into()) 449 } 450 451 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPrimitiveRestartEnable.html> 452 #[inline] cmd_set_primitive_restart_enable( &self, command_buffer: vk::CommandBuffer, primitive_restart_enable: bool, )453 pub unsafe fn cmd_set_primitive_restart_enable( 454 &self, 455 command_buffer: vk::CommandBuffer, 456 primitive_restart_enable: bool, 457 ) { 458 (self.device_fn_1_3.cmd_set_primitive_restart_enable)( 459 command_buffer, 460 primitive_restart_enable.into(), 461 ) 462 } 463 464 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceBufferMemoryRequirements.html> 465 #[inline] get_device_buffer_memory_requirements( &self, memory_requirements: &vk::DeviceBufferMemoryRequirements, out: &mut vk::MemoryRequirements2, )466 pub unsafe fn get_device_buffer_memory_requirements( 467 &self, 468 memory_requirements: &vk::DeviceBufferMemoryRequirements, 469 out: &mut vk::MemoryRequirements2, 470 ) { 471 (self.device_fn_1_3.get_device_buffer_memory_requirements)( 472 self.handle, 473 memory_requirements, 474 out, 475 ) 476 } 477 478 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageMemoryRequirements.html> 479 #[inline] get_device_image_memory_requirements( &self, memory_requirements: &vk::DeviceImageMemoryRequirements, out: &mut vk::MemoryRequirements2, )480 pub unsafe fn get_device_image_memory_requirements( 481 &self, 482 memory_requirements: &vk::DeviceImageMemoryRequirements, 483 out: &mut vk::MemoryRequirements2, 484 ) { 485 (self.device_fn_1_3.get_device_image_memory_requirements)( 486 self.handle, 487 memory_requirements, 488 out, 489 ) 490 } 491 492 /// Retrieve the number of elements to pass to [`get_device_image_sparse_memory_requirements()`][Self::get_device_image_sparse_memory_requirements()] 493 #[inline] get_device_image_sparse_memory_requirements_len( &self, memory_requirements: &vk::DeviceImageMemoryRequirements, ) -> usize494 pub unsafe fn get_device_image_sparse_memory_requirements_len( 495 &self, 496 memory_requirements: &vk::DeviceImageMemoryRequirements, 497 ) -> usize { 498 let mut count = 0; 499 (self 500 .device_fn_1_3 501 .get_device_image_sparse_memory_requirements)( 502 self.handle, 503 memory_requirements, 504 &mut count, 505 std::ptr::null_mut(), 506 ); 507 count as usize 508 } 509 510 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceImageSparseMemoryRequirements.html> 511 /// 512 /// 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`. 513 /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. 514 #[inline] get_device_image_sparse_memory_requirements( &self, memory_requirements: &vk::DeviceImageMemoryRequirements, out: &mut [vk::SparseImageMemoryRequirements2], )515 pub unsafe fn get_device_image_sparse_memory_requirements( 516 &self, 517 memory_requirements: &vk::DeviceImageMemoryRequirements, 518 out: &mut [vk::SparseImageMemoryRequirements2], 519 ) { 520 let mut count = out.len() as u32; 521 (self 522 .device_fn_1_3 523 .get_device_image_sparse_memory_requirements)( 524 self.handle, 525 memory_requirements, 526 &mut count, 527 out.as_mut_ptr(), 528 ); 529 assert_eq!(count as usize, out.len()); 530 } 531 } 532 533 /// Vulkan core 1.2 534 #[allow(non_camel_case_types)] 535 impl Device { 536 #[inline] fp_v1_2(&self) -> &vk::DeviceFnV1_2537 pub fn fp_v1_2(&self) -> &vk::DeviceFnV1_2 { 538 &self.device_fn_1_2 539 } 540 541 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndirectCount.html> 542 #[inline] 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, )543 pub unsafe fn cmd_draw_indirect_count( 544 &self, 545 command_buffer: vk::CommandBuffer, 546 buffer: vk::Buffer, 547 offset: vk::DeviceSize, 548 count_buffer: vk::Buffer, 549 count_buffer_offset: vk::DeviceSize, 550 max_draw_count: u32, 551 stride: u32, 552 ) { 553 (self.device_fn_1_2.cmd_draw_indirect_count)( 554 command_buffer, 555 buffer, 556 offset, 557 count_buffer, 558 count_buffer_offset, 559 max_draw_count, 560 stride, 561 ); 562 } 563 564 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexedIndirectCount.html> 565 #[inline] 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, )566 pub unsafe fn cmd_draw_indexed_indirect_count( 567 &self, 568 command_buffer: vk::CommandBuffer, 569 buffer: vk::Buffer, 570 offset: vk::DeviceSize, 571 count_buffer: vk::Buffer, 572 count_buffer_offset: vk::DeviceSize, 573 max_draw_count: u32, 574 stride: u32, 575 ) { 576 (self.device_fn_1_2.cmd_draw_indexed_indirect_count)( 577 command_buffer, 578 buffer, 579 offset, 580 count_buffer, 581 count_buffer_offset, 582 max_draw_count, 583 stride, 584 ); 585 } 586 587 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateRenderPass2.html> 588 #[inline] create_render_pass2( &self, create_info: &vk::RenderPassCreateInfo2, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::RenderPass>589 pub unsafe fn create_render_pass2( 590 &self, 591 create_info: &vk::RenderPassCreateInfo2, 592 allocation_callbacks: Option<&vk::AllocationCallbacks>, 593 ) -> VkResult<vk::RenderPass> { 594 let mut renderpass = mem::zeroed(); 595 (self.device_fn_1_2.create_render_pass2)( 596 self.handle(), 597 create_info, 598 allocation_callbacks.as_raw_ptr(), 599 &mut renderpass, 600 ) 601 .result_with_success(renderpass) 602 } 603 604 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderPass2.html> 605 #[inline] cmd_begin_render_pass2( &self, command_buffer: vk::CommandBuffer, render_pass_begin_info: &vk::RenderPassBeginInfo, subpass_begin_info: &vk::SubpassBeginInfo, )606 pub unsafe fn cmd_begin_render_pass2( 607 &self, 608 command_buffer: vk::CommandBuffer, 609 render_pass_begin_info: &vk::RenderPassBeginInfo, 610 subpass_begin_info: &vk::SubpassBeginInfo, 611 ) { 612 (self.device_fn_1_2.cmd_begin_render_pass2)( 613 command_buffer, 614 render_pass_begin_info, 615 subpass_begin_info, 616 ); 617 } 618 619 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdNextSubpass2.html> 620 #[inline] cmd_next_subpass2( &self, command_buffer: vk::CommandBuffer, subpass_begin_info: &vk::SubpassBeginInfo, subpass_end_info: &vk::SubpassEndInfo, )621 pub unsafe fn cmd_next_subpass2( 622 &self, 623 command_buffer: vk::CommandBuffer, 624 subpass_begin_info: &vk::SubpassBeginInfo, 625 subpass_end_info: &vk::SubpassEndInfo, 626 ) { 627 (self.device_fn_1_2.cmd_next_subpass2)( 628 command_buffer, 629 subpass_begin_info, 630 subpass_end_info, 631 ); 632 } 633 634 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderPass2.html> 635 #[inline] cmd_end_render_pass2( &self, command_buffer: vk::CommandBuffer, subpass_end_info: &vk::SubpassEndInfo, )636 pub unsafe fn cmd_end_render_pass2( 637 &self, 638 command_buffer: vk::CommandBuffer, 639 subpass_end_info: &vk::SubpassEndInfo, 640 ) { 641 (self.device_fn_1_2.cmd_end_render_pass2)(command_buffer, subpass_end_info); 642 } 643 644 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetQueryPool.html> 645 #[inline] reset_query_pool( &self, query_pool: vk::QueryPool, first_query: u32, query_count: u32, )646 pub unsafe fn reset_query_pool( 647 &self, 648 query_pool: vk::QueryPool, 649 first_query: u32, 650 query_count: u32, 651 ) { 652 (self.device_fn_1_2.reset_query_pool)(self.handle(), query_pool, first_query, query_count); 653 } 654 655 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetSemaphoreCounterValue.html> 656 #[inline] get_semaphore_counter_value(&self, semaphore: vk::Semaphore) -> VkResult<u64>657 pub unsafe fn get_semaphore_counter_value(&self, semaphore: vk::Semaphore) -> VkResult<u64> { 658 let mut value = 0; 659 (self.device_fn_1_2.get_semaphore_counter_value)(self.handle(), semaphore, &mut value) 660 .result_with_success(value) 661 } 662 663 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkWaitSemaphores.html> 664 #[inline] wait_semaphores( &self, wait_info: &vk::SemaphoreWaitInfo, timeout: u64, ) -> VkResult<()>665 pub unsafe fn wait_semaphores( 666 &self, 667 wait_info: &vk::SemaphoreWaitInfo, 668 timeout: u64, 669 ) -> VkResult<()> { 670 (self.device_fn_1_2.wait_semaphores)(self.handle(), wait_info, timeout).result() 671 } 672 673 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSignalSemaphore.html> 674 #[inline] signal_semaphore(&self, signal_info: &vk::SemaphoreSignalInfo) -> VkResult<()>675 pub unsafe fn signal_semaphore(&self, signal_info: &vk::SemaphoreSignalInfo) -> VkResult<()> { 676 (self.device_fn_1_2.signal_semaphore)(self.handle(), signal_info).result() 677 } 678 679 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferDeviceAddress.html> 680 #[inline] get_buffer_device_address( &self, info: &vk::BufferDeviceAddressInfo, ) -> vk::DeviceAddress681 pub unsafe fn get_buffer_device_address( 682 &self, 683 info: &vk::BufferDeviceAddressInfo, 684 ) -> vk::DeviceAddress { 685 (self.device_fn_1_2.get_buffer_device_address)(self.handle(), info) 686 } 687 688 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferOpaqueCaptureAddress.html> 689 #[inline] get_buffer_opaque_capture_address( &self, info: &vk::BufferDeviceAddressInfo, ) -> u64690 pub unsafe fn get_buffer_opaque_capture_address( 691 &self, 692 info: &vk::BufferDeviceAddressInfo, 693 ) -> u64 { 694 (self.device_fn_1_2.get_buffer_opaque_capture_address)(self.handle(), info) 695 } 696 697 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html> 698 #[inline] get_device_memory_opaque_capture_address( &self, info: &vk::DeviceMemoryOpaqueCaptureAddressInfo, ) -> u64699 pub unsafe fn get_device_memory_opaque_capture_address( 700 &self, 701 info: &vk::DeviceMemoryOpaqueCaptureAddressInfo, 702 ) -> u64 { 703 (self.device_fn_1_2.get_device_memory_opaque_capture_address)(self.handle(), info) 704 } 705 } 706 707 /// Vulkan core 1.1 708 #[allow(non_camel_case_types)] 709 impl Device { 710 #[inline] fp_v1_1(&self) -> &vk::DeviceFnV1_1711 pub fn fp_v1_1(&self) -> &vk::DeviceFnV1_1 { 712 &self.device_fn_1_1 713 } 714 715 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindBufferMemory2.html> 716 #[inline] bind_buffer_memory2( &self, bind_infos: &[vk::BindBufferMemoryInfo], ) -> VkResult<()>717 pub unsafe fn bind_buffer_memory2( 718 &self, 719 bind_infos: &[vk::BindBufferMemoryInfo], 720 ) -> VkResult<()> { 721 (self.device_fn_1_1.bind_buffer_memory2)( 722 self.handle(), 723 bind_infos.len() as _, 724 bind_infos.as_ptr(), 725 ) 726 .result() 727 } 728 729 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindImageMemory2.html> 730 #[inline] bind_image_memory2( &self, bind_infos: &[vk::BindImageMemoryInfo], ) -> VkResult<()>731 pub unsafe fn bind_image_memory2( 732 &self, 733 bind_infos: &[vk::BindImageMemoryInfo], 734 ) -> VkResult<()> { 735 (self.device_fn_1_1.bind_image_memory2)( 736 self.handle(), 737 bind_infos.len() as _, 738 bind_infos.as_ptr(), 739 ) 740 .result() 741 } 742 743 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceGroupPeerMemoryFeatures.html> 744 #[inline] get_device_group_peer_memory_features( &self, heap_index: u32, local_device_index: u32, remote_device_index: u32, ) -> vk::PeerMemoryFeatureFlags745 pub unsafe fn get_device_group_peer_memory_features( 746 &self, 747 heap_index: u32, 748 local_device_index: u32, 749 remote_device_index: u32, 750 ) -> vk::PeerMemoryFeatureFlags { 751 let mut peer_memory_features = mem::zeroed(); 752 (self.device_fn_1_1.get_device_group_peer_memory_features)( 753 self.handle(), 754 heap_index, 755 local_device_index, 756 remote_device_index, 757 &mut peer_memory_features, 758 ); 759 peer_memory_features 760 } 761 762 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDeviceMask.html> 763 #[inline] cmd_set_device_mask(&self, command_buffer: vk::CommandBuffer, device_mask: u32)764 pub unsafe fn cmd_set_device_mask(&self, command_buffer: vk::CommandBuffer, device_mask: u32) { 765 (self.device_fn_1_1.cmd_set_device_mask)(command_buffer, device_mask); 766 } 767 768 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatchBase.html> 769 #[inline] 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, )770 pub unsafe fn cmd_dispatch_base( 771 &self, 772 command_buffer: vk::CommandBuffer, 773 base_group_x: u32, 774 base_group_y: u32, 775 base_group_z: u32, 776 group_count_x: u32, 777 group_count_y: u32, 778 group_count_z: u32, 779 ) { 780 (self.device_fn_1_1.cmd_dispatch_base)( 781 command_buffer, 782 base_group_x, 783 base_group_y, 784 base_group_z, 785 group_count_x, 786 group_count_y, 787 group_count_z, 788 ); 789 } 790 791 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageMemoryRequirements2.html> 792 #[inline] get_image_memory_requirements2( &self, info: &vk::ImageMemoryRequirementsInfo2, out: &mut vk::MemoryRequirements2, )793 pub unsafe fn get_image_memory_requirements2( 794 &self, 795 info: &vk::ImageMemoryRequirementsInfo2, 796 out: &mut vk::MemoryRequirements2, 797 ) { 798 (self.device_fn_1_1.get_image_memory_requirements2)(self.handle(), info, out); 799 } 800 801 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferMemoryRequirements2.html> 802 #[inline] get_buffer_memory_requirements2( &self, info: &vk::BufferMemoryRequirementsInfo2, out: &mut vk::MemoryRequirements2, )803 pub unsafe fn get_buffer_memory_requirements2( 804 &self, 805 info: &vk::BufferMemoryRequirementsInfo2, 806 out: &mut vk::MemoryRequirements2, 807 ) { 808 (self.device_fn_1_1.get_buffer_memory_requirements2)(self.handle(), info, out); 809 } 810 811 /// Retrieve the number of elements to pass to [`get_image_sparse_memory_requirements2()`][Self::get_image_sparse_memory_requirements2()] 812 #[inline] get_image_sparse_memory_requirements2_len( &self, info: &vk::ImageSparseMemoryRequirementsInfo2, ) -> usize813 pub unsafe fn get_image_sparse_memory_requirements2_len( 814 &self, 815 info: &vk::ImageSparseMemoryRequirementsInfo2, 816 ) -> usize { 817 let mut count = 0; 818 (self.device_fn_1_1.get_image_sparse_memory_requirements2)( 819 self.handle(), 820 info, 821 &mut count, 822 ptr::null_mut(), 823 ); 824 count as usize 825 } 826 827 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSparseMemoryRequirements2.html> 828 /// 829 /// Call [`get_image_sparse_memory_requirements2_len()`][Self::get_image_sparse_memory_requirements2_len()] to query the number of elements to pass to `out`. 830 /// Be sure to [`Default::default()`]-initialize these elements and optionally set their `p_next` pointer. 831 #[inline] get_image_sparse_memory_requirements2( &self, info: &vk::ImageSparseMemoryRequirementsInfo2, out: &mut [vk::SparseImageMemoryRequirements2], )832 pub unsafe fn get_image_sparse_memory_requirements2( 833 &self, 834 info: &vk::ImageSparseMemoryRequirementsInfo2, 835 out: &mut [vk::SparseImageMemoryRequirements2], 836 ) { 837 let mut count = out.len() as u32; 838 (self.device_fn_1_1.get_image_sparse_memory_requirements2)( 839 self.handle(), 840 info, 841 &mut count, 842 out.as_mut_ptr(), 843 ); 844 assert_eq!(count as usize, out.len()); 845 } 846 847 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkTrimCommandPool.html> 848 #[inline] trim_command_pool( &self, command_pool: vk::CommandPool, flags: vk::CommandPoolTrimFlags, )849 pub unsafe fn trim_command_pool( 850 &self, 851 command_pool: vk::CommandPool, 852 flags: vk::CommandPoolTrimFlags, 853 ) { 854 (self.device_fn_1_1.trim_command_pool)(self.handle(), command_pool, flags); 855 } 856 857 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceQueue2.html> 858 #[inline] get_device_queue2(&self, queue_info: &vk::DeviceQueueInfo2) -> vk::Queue859 pub unsafe fn get_device_queue2(&self, queue_info: &vk::DeviceQueueInfo2) -> vk::Queue { 860 let mut queue = mem::zeroed(); 861 (self.device_fn_1_1.get_device_queue2)(self.handle(), queue_info, &mut queue); 862 queue 863 } 864 865 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSamplerYcbcrConversion.html> 866 #[inline] create_sampler_ycbcr_conversion( &self, create_info: &vk::SamplerYcbcrConversionCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::SamplerYcbcrConversion>867 pub unsafe fn create_sampler_ycbcr_conversion( 868 &self, 869 create_info: &vk::SamplerYcbcrConversionCreateInfo, 870 allocation_callbacks: Option<&vk::AllocationCallbacks>, 871 ) -> VkResult<vk::SamplerYcbcrConversion> { 872 let mut ycbcr_conversion = mem::zeroed(); 873 (self.device_fn_1_1.create_sampler_ycbcr_conversion)( 874 self.handle(), 875 create_info, 876 allocation_callbacks.as_raw_ptr(), 877 &mut ycbcr_conversion, 878 ) 879 .result_with_success(ycbcr_conversion) 880 } 881 882 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySamplerYcbcrConversion.html> 883 #[inline] destroy_sampler_ycbcr_conversion( &self, ycbcr_conversion: vk::SamplerYcbcrConversion, allocation_callbacks: Option<&vk::AllocationCallbacks>, )884 pub unsafe fn destroy_sampler_ycbcr_conversion( 885 &self, 886 ycbcr_conversion: vk::SamplerYcbcrConversion, 887 allocation_callbacks: Option<&vk::AllocationCallbacks>, 888 ) { 889 (self.device_fn_1_1.destroy_sampler_ycbcr_conversion)( 890 self.handle(), 891 ycbcr_conversion, 892 allocation_callbacks.as_raw_ptr(), 893 ); 894 } 895 896 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorUpdateTemplate.html> 897 #[inline] create_descriptor_update_template( &self, create_info: &vk::DescriptorUpdateTemplateCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DescriptorUpdateTemplate>898 pub unsafe fn create_descriptor_update_template( 899 &self, 900 create_info: &vk::DescriptorUpdateTemplateCreateInfo, 901 allocation_callbacks: Option<&vk::AllocationCallbacks>, 902 ) -> VkResult<vk::DescriptorUpdateTemplate> { 903 let mut descriptor_update_template = mem::zeroed(); 904 (self.device_fn_1_1.create_descriptor_update_template)( 905 self.handle(), 906 create_info, 907 allocation_callbacks.as_raw_ptr(), 908 &mut descriptor_update_template, 909 ) 910 .result_with_success(descriptor_update_template) 911 } 912 913 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorUpdateTemplate.html> 914 #[inline] destroy_descriptor_update_template( &self, descriptor_update_template: vk::DescriptorUpdateTemplate, allocation_callbacks: Option<&vk::AllocationCallbacks>, )915 pub unsafe fn destroy_descriptor_update_template( 916 &self, 917 descriptor_update_template: vk::DescriptorUpdateTemplate, 918 allocation_callbacks: Option<&vk::AllocationCallbacks>, 919 ) { 920 (self.device_fn_1_1.destroy_descriptor_update_template)( 921 self.handle(), 922 descriptor_update_template, 923 allocation_callbacks.as_raw_ptr(), 924 ); 925 } 926 927 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUpdateDescriptorSetWithTemplate.html> 928 #[inline] update_descriptor_set_with_template( &self, descriptor_set: vk::DescriptorSet, descriptor_update_template: vk::DescriptorUpdateTemplate, data: *const c_void, )929 pub unsafe fn update_descriptor_set_with_template( 930 &self, 931 descriptor_set: vk::DescriptorSet, 932 descriptor_update_template: vk::DescriptorUpdateTemplate, 933 data: *const c_void, 934 ) { 935 (self.device_fn_1_1.update_descriptor_set_with_template)( 936 self.handle(), 937 descriptor_set, 938 descriptor_update_template, 939 data, 940 ); 941 } 942 943 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorSetLayoutSupport.html> 944 #[inline] get_descriptor_set_layout_support( &self, create_info: &vk::DescriptorSetLayoutCreateInfo, out: &mut vk::DescriptorSetLayoutSupport, )945 pub unsafe fn get_descriptor_set_layout_support( 946 &self, 947 create_info: &vk::DescriptorSetLayoutCreateInfo, 948 out: &mut vk::DescriptorSetLayoutSupport, 949 ) { 950 (self.device_fn_1_1.get_descriptor_set_layout_support)(self.handle(), create_info, out); 951 } 952 } 953 954 /// Vulkan core 1.0 955 #[allow(non_camel_case_types)] 956 impl Device { 957 #[inline] fp_v1_0(&self) -> &vk::DeviceFnV1_0958 pub fn fp_v1_0(&self) -> &vk::DeviceFnV1_0 { 959 &self.device_fn_1_0 960 } 961 962 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDevice.html> 963 #[inline] destroy_device(&self, allocation_callbacks: Option<&vk::AllocationCallbacks>)964 pub unsafe fn destroy_device(&self, allocation_callbacks: Option<&vk::AllocationCallbacks>) { 965 (self.device_fn_1_0.destroy_device)(self.handle(), allocation_callbacks.as_raw_ptr()); 966 } 967 968 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySampler.html> 969 #[inline] destroy_sampler( &self, sampler: vk::Sampler, allocation_callbacks: Option<&vk::AllocationCallbacks>, )970 pub unsafe fn destroy_sampler( 971 &self, 972 sampler: vk::Sampler, 973 allocation_callbacks: Option<&vk::AllocationCallbacks>, 974 ) { 975 (self.device_fn_1_0.destroy_sampler)( 976 self.handle(), 977 sampler, 978 allocation_callbacks.as_raw_ptr(), 979 ); 980 } 981 982 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeMemory.html> 983 #[inline] free_memory( &self, memory: vk::DeviceMemory, allocation_callbacks: Option<&vk::AllocationCallbacks>, )984 pub unsafe fn free_memory( 985 &self, 986 memory: vk::DeviceMemory, 987 allocation_callbacks: Option<&vk::AllocationCallbacks>, 988 ) { 989 (self.device_fn_1_0.free_memory)(self.handle(), memory, allocation_callbacks.as_raw_ptr()); 990 } 991 992 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeCommandBuffers.html> 993 #[inline] free_command_buffers( &self, command_pool: vk::CommandPool, command_buffers: &[vk::CommandBuffer], )994 pub unsafe fn free_command_buffers( 995 &self, 996 command_pool: vk::CommandPool, 997 command_buffers: &[vk::CommandBuffer], 998 ) { 999 (self.device_fn_1_0.free_command_buffers)( 1000 self.handle(), 1001 command_pool, 1002 command_buffers.len() as u32, 1003 command_buffers.as_ptr(), 1004 ); 1005 } 1006 1007 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateEvent.html> 1008 #[inline] create_event( &self, create_info: &vk::EventCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Event>1009 pub unsafe fn create_event( 1010 &self, 1011 create_info: &vk::EventCreateInfo, 1012 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1013 ) -> VkResult<vk::Event> { 1014 let mut event = mem::zeroed(); 1015 (self.device_fn_1_0.create_event)( 1016 self.handle(), 1017 create_info, 1018 allocation_callbacks.as_raw_ptr(), 1019 &mut event, 1020 ) 1021 .result_with_success(event) 1022 } 1023 1024 /// Returns [`true`] if the event was set, and [`false`] if the event was reset, otherwise it will 1025 /// return the error code. 1026 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetEventStatus.html> 1027 #[inline] get_event_status(&self, event: vk::Event) -> VkResult<bool>1028 pub unsafe fn get_event_status(&self, event: vk::Event) -> VkResult<bool> { 1029 let err_code = (self.device_fn_1_0.get_event_status)(self.handle(), event); 1030 match err_code { 1031 vk::Result::EVENT_SET => Ok(true), 1032 vk::Result::EVENT_RESET => Ok(false), 1033 _ => Err(err_code), 1034 } 1035 } 1036 1037 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkSetEvent.html> 1038 #[inline] set_event(&self, event: vk::Event) -> VkResult<()>1039 pub unsafe fn set_event(&self, event: vk::Event) -> VkResult<()> { 1040 (self.device_fn_1_0.set_event)(self.handle(), event).result() 1041 } 1042 1043 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetEvent.html> 1044 #[inline] reset_event(&self, event: vk::Event) -> VkResult<()>1045 pub unsafe fn reset_event(&self, event: vk::Event) -> VkResult<()> { 1046 (self.device_fn_1_0.reset_event)(self.handle(), event).result() 1047 } 1048 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetEvent.html> 1049 #[inline] cmd_set_event( &self, command_buffer: vk::CommandBuffer, event: vk::Event, stage_mask: vk::PipelineStageFlags, )1050 pub unsafe fn cmd_set_event( 1051 &self, 1052 command_buffer: vk::CommandBuffer, 1053 event: vk::Event, 1054 stage_mask: vk::PipelineStageFlags, 1055 ) { 1056 (self.device_fn_1_0.cmd_set_event)(command_buffer, event, stage_mask); 1057 } 1058 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetEvent.html> 1059 #[inline] cmd_reset_event( &self, command_buffer: vk::CommandBuffer, event: vk::Event, stage_mask: vk::PipelineStageFlags, )1060 pub unsafe fn cmd_reset_event( 1061 &self, 1062 command_buffer: vk::CommandBuffer, 1063 event: vk::Event, 1064 stage_mask: vk::PipelineStageFlags, 1065 ) { 1066 (self.device_fn_1_0.cmd_reset_event)(command_buffer, event, stage_mask); 1067 } 1068 1069 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWaitEvents.html> 1070 #[inline] 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], )1071 pub unsafe fn cmd_wait_events( 1072 &self, 1073 command_buffer: vk::CommandBuffer, 1074 events: &[vk::Event], 1075 src_stage_mask: vk::PipelineStageFlags, 1076 dst_stage_mask: vk::PipelineStageFlags, 1077 memory_barriers: &[vk::MemoryBarrier], 1078 buffer_memory_barriers: &[vk::BufferMemoryBarrier], 1079 image_memory_barriers: &[vk::ImageMemoryBarrier], 1080 ) { 1081 (self.device_fn_1_0.cmd_wait_events)( 1082 command_buffer, 1083 events.len() as _, 1084 events.as_ptr(), 1085 src_stage_mask, 1086 dst_stage_mask, 1087 memory_barriers.len() as _, 1088 memory_barriers.as_ptr(), 1089 buffer_memory_barriers.len() as _, 1090 buffer_memory_barriers.as_ptr(), 1091 image_memory_barriers.len() as _, 1092 image_memory_barriers.as_ptr(), 1093 ); 1094 } 1095 1096 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyFence.html> 1097 #[inline] destroy_fence( &self, fence: vk::Fence, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1098 pub unsafe fn destroy_fence( 1099 &self, 1100 fence: vk::Fence, 1101 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1102 ) { 1103 (self.device_fn_1_0.destroy_fence)(self.handle(), fence, allocation_callbacks.as_raw_ptr()); 1104 } 1105 1106 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyEvent.html> 1107 #[inline] destroy_event( &self, event: vk::Event, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1108 pub unsafe fn destroy_event( 1109 &self, 1110 event: vk::Event, 1111 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1112 ) { 1113 (self.device_fn_1_0.destroy_event)(self.handle(), event, allocation_callbacks.as_raw_ptr()); 1114 } 1115 1116 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyImage.html> 1117 #[inline] destroy_image( &self, image: vk::Image, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1118 pub unsafe fn destroy_image( 1119 &self, 1120 image: vk::Image, 1121 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1122 ) { 1123 (self.device_fn_1_0.destroy_image)(self.handle(), image, allocation_callbacks.as_raw_ptr()); 1124 } 1125 1126 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyCommandPool.html> 1127 #[inline] destroy_command_pool( &self, pool: vk::CommandPool, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1128 pub unsafe fn destroy_command_pool( 1129 &self, 1130 pool: vk::CommandPool, 1131 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1132 ) { 1133 (self.device_fn_1_0.destroy_command_pool)( 1134 self.handle(), 1135 pool, 1136 allocation_callbacks.as_raw_ptr(), 1137 ); 1138 } 1139 1140 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyImageView.html> 1141 #[inline] destroy_image_view( &self, image_view: vk::ImageView, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1142 pub unsafe fn destroy_image_view( 1143 &self, 1144 image_view: vk::ImageView, 1145 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1146 ) { 1147 (self.device_fn_1_0.destroy_image_view)( 1148 self.handle(), 1149 image_view, 1150 allocation_callbacks.as_raw_ptr(), 1151 ); 1152 } 1153 1154 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyRenderPass.html> 1155 #[inline] destroy_render_pass( &self, renderpass: vk::RenderPass, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1156 pub unsafe fn destroy_render_pass( 1157 &self, 1158 renderpass: vk::RenderPass, 1159 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1160 ) { 1161 (self.device_fn_1_0.destroy_render_pass)( 1162 self.handle(), 1163 renderpass, 1164 allocation_callbacks.as_raw_ptr(), 1165 ); 1166 } 1167 1168 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyFramebuffer.html> 1169 #[inline] destroy_framebuffer( &self, framebuffer: vk::Framebuffer, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1170 pub unsafe fn destroy_framebuffer( 1171 &self, 1172 framebuffer: vk::Framebuffer, 1173 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1174 ) { 1175 (self.device_fn_1_0.destroy_framebuffer)( 1176 self.handle(), 1177 framebuffer, 1178 allocation_callbacks.as_raw_ptr(), 1179 ); 1180 } 1181 1182 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipelineLayout.html> 1183 #[inline] destroy_pipeline_layout( &self, pipeline_layout: vk::PipelineLayout, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1184 pub unsafe fn destroy_pipeline_layout( 1185 &self, 1186 pipeline_layout: vk::PipelineLayout, 1187 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1188 ) { 1189 (self.device_fn_1_0.destroy_pipeline_layout)( 1190 self.handle(), 1191 pipeline_layout, 1192 allocation_callbacks.as_raw_ptr(), 1193 ); 1194 } 1195 1196 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipelineCache.html> 1197 #[inline] destroy_pipeline_cache( &self, pipeline_cache: vk::PipelineCache, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1198 pub unsafe fn destroy_pipeline_cache( 1199 &self, 1200 pipeline_cache: vk::PipelineCache, 1201 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1202 ) { 1203 (self.device_fn_1_0.destroy_pipeline_cache)( 1204 self.handle(), 1205 pipeline_cache, 1206 allocation_callbacks.as_raw_ptr(), 1207 ); 1208 } 1209 1210 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyBuffer.html> 1211 #[inline] destroy_buffer( &self, buffer: vk::Buffer, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1212 pub unsafe fn destroy_buffer( 1213 &self, 1214 buffer: vk::Buffer, 1215 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1216 ) { 1217 (self.device_fn_1_0.destroy_buffer)( 1218 self.handle(), 1219 buffer, 1220 allocation_callbacks.as_raw_ptr(), 1221 ); 1222 } 1223 1224 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyShaderModule.html> 1225 #[inline] destroy_shader_module( &self, shader: vk::ShaderModule, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1226 pub unsafe fn destroy_shader_module( 1227 &self, 1228 shader: vk::ShaderModule, 1229 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1230 ) { 1231 (self.device_fn_1_0.destroy_shader_module)( 1232 self.handle(), 1233 shader, 1234 allocation_callbacks.as_raw_ptr(), 1235 ); 1236 } 1237 1238 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyPipeline.html> 1239 #[inline] destroy_pipeline( &self, pipeline: vk::Pipeline, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1240 pub unsafe fn destroy_pipeline( 1241 &self, 1242 pipeline: vk::Pipeline, 1243 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1244 ) { 1245 (self.device_fn_1_0.destroy_pipeline)( 1246 self.handle(), 1247 pipeline, 1248 allocation_callbacks.as_raw_ptr(), 1249 ); 1250 } 1251 1252 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroySemaphore.html> 1253 #[inline] destroy_semaphore( &self, semaphore: vk::Semaphore, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1254 pub unsafe fn destroy_semaphore( 1255 &self, 1256 semaphore: vk::Semaphore, 1257 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1258 ) { 1259 (self.device_fn_1_0.destroy_semaphore)( 1260 self.handle(), 1261 semaphore, 1262 allocation_callbacks.as_raw_ptr(), 1263 ); 1264 } 1265 1266 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorPool.html> 1267 #[inline] destroy_descriptor_pool( &self, pool: vk::DescriptorPool, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1268 pub unsafe fn destroy_descriptor_pool( 1269 &self, 1270 pool: vk::DescriptorPool, 1271 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1272 ) { 1273 (self.device_fn_1_0.destroy_descriptor_pool)( 1274 self.handle(), 1275 pool, 1276 allocation_callbacks.as_raw_ptr(), 1277 ); 1278 } 1279 1280 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyQueryPool.html> 1281 #[inline] destroy_query_pool( &self, pool: vk::QueryPool, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1282 pub unsafe fn destroy_query_pool( 1283 &self, 1284 pool: vk::QueryPool, 1285 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1286 ) { 1287 (self.device_fn_1_0.destroy_query_pool)( 1288 self.handle(), 1289 pool, 1290 allocation_callbacks.as_raw_ptr(), 1291 ); 1292 } 1293 1294 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyDescriptorSetLayout.html> 1295 #[inline] destroy_descriptor_set_layout( &self, layout: vk::DescriptorSetLayout, allocation_callbacks: Option<&vk::AllocationCallbacks>, )1296 pub unsafe fn destroy_descriptor_set_layout( 1297 &self, 1298 layout: vk::DescriptorSetLayout, 1299 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1300 ) { 1301 (self.device_fn_1_0.destroy_descriptor_set_layout)( 1302 self.handle(), 1303 layout, 1304 allocation_callbacks.as_raw_ptr(), 1305 ); 1306 } 1307 1308 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFreeDescriptorSets.html> 1309 #[inline] free_descriptor_sets( &self, pool: vk::DescriptorPool, descriptor_sets: &[vk::DescriptorSet], ) -> VkResult<()>1310 pub unsafe fn free_descriptor_sets( 1311 &self, 1312 pool: vk::DescriptorPool, 1313 descriptor_sets: &[vk::DescriptorSet], 1314 ) -> VkResult<()> { 1315 (self.device_fn_1_0.free_descriptor_sets)( 1316 self.handle(), 1317 pool, 1318 descriptor_sets.len() as u32, 1319 descriptor_sets.as_ptr(), 1320 ) 1321 .result() 1322 } 1323 1324 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUpdateDescriptorSets.html> 1325 #[inline] update_descriptor_sets( &self, descriptor_writes: &[vk::WriteDescriptorSet], descriptor_copies: &[vk::CopyDescriptorSet], )1326 pub unsafe fn update_descriptor_sets( 1327 &self, 1328 descriptor_writes: &[vk::WriteDescriptorSet], 1329 descriptor_copies: &[vk::CopyDescriptorSet], 1330 ) { 1331 (self.device_fn_1_0.update_descriptor_sets)( 1332 self.handle(), 1333 descriptor_writes.len() as u32, 1334 descriptor_writes.as_ptr(), 1335 descriptor_copies.len() as u32, 1336 descriptor_copies.as_ptr(), 1337 ); 1338 } 1339 1340 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSampler.html> 1341 #[inline] create_sampler( &self, create_info: &vk::SamplerCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Sampler>1342 pub unsafe fn create_sampler( 1343 &self, 1344 create_info: &vk::SamplerCreateInfo, 1345 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1346 ) -> VkResult<vk::Sampler> { 1347 let mut sampler = mem::zeroed(); 1348 (self.device_fn_1_0.create_sampler)( 1349 self.handle(), 1350 create_info, 1351 allocation_callbacks.as_raw_ptr(), 1352 &mut sampler, 1353 ) 1354 .result_with_success(sampler) 1355 } 1356 1357 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBlitImage.html> 1358 #[inline] 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, )1359 pub unsafe fn cmd_blit_image( 1360 &self, 1361 command_buffer: vk::CommandBuffer, 1362 src_image: vk::Image, 1363 src_image_layout: vk::ImageLayout, 1364 dst_image: vk::Image, 1365 dst_image_layout: vk::ImageLayout, 1366 regions: &[vk::ImageBlit], 1367 filter: vk::Filter, 1368 ) { 1369 (self.device_fn_1_0.cmd_blit_image)( 1370 command_buffer, 1371 src_image, 1372 src_image_layout, 1373 dst_image, 1374 dst_image_layout, 1375 regions.len() as _, 1376 regions.as_ptr(), 1377 filter, 1378 ); 1379 } 1380 1381 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResolveImage.html> 1382 #[inline] 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], )1383 pub unsafe fn cmd_resolve_image( 1384 &self, 1385 command_buffer: vk::CommandBuffer, 1386 src_image: vk::Image, 1387 src_image_layout: vk::ImageLayout, 1388 dst_image: vk::Image, 1389 dst_image_layout: vk::ImageLayout, 1390 regions: &[vk::ImageResolve], 1391 ) { 1392 (self.device_fn_1_0.cmd_resolve_image)( 1393 command_buffer, 1394 src_image, 1395 src_image_layout, 1396 dst_image, 1397 dst_image_layout, 1398 regions.len() as u32, 1399 regions.as_ptr(), 1400 ); 1401 } 1402 1403 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdFillBuffer.html> 1404 #[inline] cmd_fill_buffer( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, size: vk::DeviceSize, data: u32, )1405 pub unsafe fn cmd_fill_buffer( 1406 &self, 1407 command_buffer: vk::CommandBuffer, 1408 buffer: vk::Buffer, 1409 offset: vk::DeviceSize, 1410 size: vk::DeviceSize, 1411 data: u32, 1412 ) { 1413 (self.device_fn_1_0.cmd_fill_buffer)(command_buffer, buffer, offset, size, data); 1414 } 1415 1416 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdUpdateBuffer.html> 1417 #[inline] cmd_update_buffer( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, data: &[u8], )1418 pub unsafe fn cmd_update_buffer( 1419 &self, 1420 command_buffer: vk::CommandBuffer, 1421 buffer: vk::Buffer, 1422 offset: vk::DeviceSize, 1423 data: &[u8], 1424 ) { 1425 (self.device_fn_1_0.cmd_update_buffer)( 1426 command_buffer, 1427 buffer, 1428 offset, 1429 data.len() as u64, 1430 data.as_ptr() as _, 1431 ); 1432 } 1433 1434 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBuffer.html> 1435 #[inline] cmd_copy_buffer( &self, command_buffer: vk::CommandBuffer, src_buffer: vk::Buffer, dst_buffer: vk::Buffer, regions: &[vk::BufferCopy], )1436 pub unsafe fn cmd_copy_buffer( 1437 &self, 1438 command_buffer: vk::CommandBuffer, 1439 src_buffer: vk::Buffer, 1440 dst_buffer: vk::Buffer, 1441 regions: &[vk::BufferCopy], 1442 ) { 1443 (self.device_fn_1_0.cmd_copy_buffer)( 1444 command_buffer, 1445 src_buffer, 1446 dst_buffer, 1447 regions.len() as u32, 1448 regions.as_ptr(), 1449 ); 1450 } 1451 1452 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImageToBuffer.html> 1453 #[inline] 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], )1454 pub unsafe fn cmd_copy_image_to_buffer( 1455 &self, 1456 command_buffer: vk::CommandBuffer, 1457 src_image: vk::Image, 1458 src_image_layout: vk::ImageLayout, 1459 dst_buffer: vk::Buffer, 1460 regions: &[vk::BufferImageCopy], 1461 ) { 1462 (self.device_fn_1_0.cmd_copy_image_to_buffer)( 1463 command_buffer, 1464 src_image, 1465 src_image_layout, 1466 dst_buffer, 1467 regions.len() as u32, 1468 regions.as_ptr(), 1469 ); 1470 } 1471 1472 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyBufferToImage.html> 1473 #[inline] 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], )1474 pub unsafe fn cmd_copy_buffer_to_image( 1475 &self, 1476 command_buffer: vk::CommandBuffer, 1477 src_buffer: vk::Buffer, 1478 dst_image: vk::Image, 1479 dst_image_layout: vk::ImageLayout, 1480 regions: &[vk::BufferImageCopy], 1481 ) { 1482 (self.device_fn_1_0.cmd_copy_buffer_to_image)( 1483 command_buffer, 1484 src_buffer, 1485 dst_image, 1486 dst_image_layout, 1487 regions.len() as u32, 1488 regions.as_ptr(), 1489 ); 1490 } 1491 1492 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyImage.html> 1493 #[inline] 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], )1494 pub unsafe fn cmd_copy_image( 1495 &self, 1496 command_buffer: vk::CommandBuffer, 1497 src_image: vk::Image, 1498 src_image_layout: vk::ImageLayout, 1499 dst_image: vk::Image, 1500 dst_image_layout: vk::ImageLayout, 1501 regions: &[vk::ImageCopy], 1502 ) { 1503 (self.device_fn_1_0.cmd_copy_image)( 1504 command_buffer, 1505 src_image, 1506 src_image_layout, 1507 dst_image, 1508 dst_image_layout, 1509 regions.len() as u32, 1510 regions.as_ptr(), 1511 ); 1512 } 1513 1514 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateDescriptorSets.html> 1515 #[inline] allocate_descriptor_sets( &self, allocate_info: &vk::DescriptorSetAllocateInfo, ) -> VkResult<Vec<vk::DescriptorSet>>1516 pub unsafe fn allocate_descriptor_sets( 1517 &self, 1518 allocate_info: &vk::DescriptorSetAllocateInfo, 1519 ) -> VkResult<Vec<vk::DescriptorSet>> { 1520 let mut desc_set = Vec::with_capacity(allocate_info.descriptor_set_count as usize); 1521 (self.device_fn_1_0.allocate_descriptor_sets)( 1522 self.handle(), 1523 allocate_info, 1524 desc_set.as_mut_ptr(), 1525 ) 1526 .result()?; 1527 1528 desc_set.set_len(allocate_info.descriptor_set_count as usize); 1529 Ok(desc_set) 1530 } 1531 1532 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorSetLayout.html> 1533 #[inline] create_descriptor_set_layout( &self, create_info: &vk::DescriptorSetLayoutCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DescriptorSetLayout>1534 pub unsafe fn create_descriptor_set_layout( 1535 &self, 1536 create_info: &vk::DescriptorSetLayoutCreateInfo, 1537 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1538 ) -> VkResult<vk::DescriptorSetLayout> { 1539 let mut layout = mem::zeroed(); 1540 (self.device_fn_1_0.create_descriptor_set_layout)( 1541 self.handle(), 1542 create_info, 1543 allocation_callbacks.as_raw_ptr(), 1544 &mut layout, 1545 ) 1546 .result_with_success(layout) 1547 } 1548 1549 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDeviceWaitIdle.html> 1550 #[inline] device_wait_idle(&self) -> VkResult<()>1551 pub unsafe fn device_wait_idle(&self) -> VkResult<()> { 1552 (self.device_fn_1_0.device_wait_idle)(self.handle()).result() 1553 } 1554 1555 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateDescriptorPool.html> 1556 #[inline] create_descriptor_pool( &self, create_info: &vk::DescriptorPoolCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DescriptorPool>1557 pub unsafe fn create_descriptor_pool( 1558 &self, 1559 create_info: &vk::DescriptorPoolCreateInfo, 1560 allocation_callbacks: Option<&vk::AllocationCallbacks>, 1561 ) -> VkResult<vk::DescriptorPool> { 1562 let mut pool = mem::zeroed(); 1563 (self.device_fn_1_0.create_descriptor_pool)( 1564 self.handle(), 1565 create_info, 1566 allocation_callbacks.as_raw_ptr(), 1567 &mut pool, 1568 ) 1569 .result_with_success(pool) 1570 } 1571 1572 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetDescriptorPool.html> 1573 #[inline] reset_descriptor_pool( &self, pool: vk::DescriptorPool, flags: vk::DescriptorPoolResetFlags, ) -> VkResult<()>1574 pub unsafe fn reset_descriptor_pool( 1575 &self, 1576 pool: vk::DescriptorPool, 1577 flags: vk::DescriptorPoolResetFlags, 1578 ) -> VkResult<()> { 1579 (self.device_fn_1_0.reset_descriptor_pool)(self.handle(), pool, flags).result() 1580 } 1581 1582 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetCommandPool.html> 1583 #[inline] reset_command_pool( &self, command_pool: vk::CommandPool, flags: vk::CommandPoolResetFlags, ) -> VkResult<()>1584 pub unsafe fn reset_command_pool( 1585 &self, 1586 command_pool: vk::CommandPool, 1587 flags: vk::CommandPoolResetFlags, 1588 ) -> VkResult<()> { 1589 (self.device_fn_1_0.reset_command_pool)(self.handle(), command_pool, flags).result() 1590 } 1591 1592 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetCommandBuffer.html> 1593 #[inline] reset_command_buffer( &self, command_buffer: vk::CommandBuffer, flags: vk::CommandBufferResetFlags, ) -> VkResult<()>1594 pub unsafe fn reset_command_buffer( 1595 &self, 1596 command_buffer: vk::CommandBuffer, 1597 flags: vk::CommandBufferResetFlags, 1598 ) -> VkResult<()> { 1599 (self.device_fn_1_0.reset_command_buffer)(command_buffer, flags).result() 1600 } 1601 1602 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkResetFences.html> 1603 #[inline] reset_fences(&self, fences: &[vk::Fence]) -> VkResult<()>1604 pub unsafe fn reset_fences(&self, fences: &[vk::Fence]) -> VkResult<()> { 1605 (self.device_fn_1_0.reset_fences)(self.handle(), fences.len() as u32, fences.as_ptr()) 1606 .result() 1607 } 1608 1609 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindIndexBuffer.html> 1610 #[inline] cmd_bind_index_buffer( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, index_type: vk::IndexType, )1611 pub unsafe fn cmd_bind_index_buffer( 1612 &self, 1613 command_buffer: vk::CommandBuffer, 1614 buffer: vk::Buffer, 1615 offset: vk::DeviceSize, 1616 index_type: vk::IndexType, 1617 ) { 1618 (self.device_fn_1_0.cmd_bind_index_buffer)(command_buffer, buffer, offset, index_type); 1619 } 1620 1621 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdClearColorImage.html> 1622 #[inline] cmd_clear_color_image( &self, command_buffer: vk::CommandBuffer, image: vk::Image, image_layout: vk::ImageLayout, clear_color_value: &vk::ClearColorValue, ranges: &[vk::ImageSubresourceRange], )1623 pub unsafe fn cmd_clear_color_image( 1624 &self, 1625 command_buffer: vk::CommandBuffer, 1626 image: vk::Image, 1627 image_layout: vk::ImageLayout, 1628 clear_color_value: &vk::ClearColorValue, 1629 ranges: &[vk::ImageSubresourceRange], 1630 ) { 1631 (self.device_fn_1_0.cmd_clear_color_image)( 1632 command_buffer, 1633 image, 1634 image_layout, 1635 clear_color_value, 1636 ranges.len() as u32, 1637 ranges.as_ptr(), 1638 ); 1639 } 1640 1641 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdClearDepthStencilImage.html> 1642 #[inline] 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], )1643 pub unsafe fn cmd_clear_depth_stencil_image( 1644 &self, 1645 command_buffer: vk::CommandBuffer, 1646 image: vk::Image, 1647 image_layout: vk::ImageLayout, 1648 clear_depth_stencil_value: &vk::ClearDepthStencilValue, 1649 ranges: &[vk::ImageSubresourceRange], 1650 ) { 1651 (self.device_fn_1_0.cmd_clear_depth_stencil_image)( 1652 command_buffer, 1653 image, 1654 image_layout, 1655 clear_depth_stencil_value, 1656 ranges.len() as u32, 1657 ranges.as_ptr(), 1658 ); 1659 } 1660 1661 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdClearAttachments.html> 1662 #[inline] cmd_clear_attachments( &self, command_buffer: vk::CommandBuffer, attachments: &[vk::ClearAttachment], rects: &[vk::ClearRect], )1663 pub unsafe fn cmd_clear_attachments( 1664 &self, 1665 command_buffer: vk::CommandBuffer, 1666 attachments: &[vk::ClearAttachment], 1667 rects: &[vk::ClearRect], 1668 ) { 1669 (self.device_fn_1_0.cmd_clear_attachments)( 1670 command_buffer, 1671 attachments.len() as u32, 1672 attachments.as_ptr(), 1673 rects.len() as u32, 1674 rects.as_ptr(), 1675 ); 1676 } 1677 1678 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexed.html> 1679 #[inline] cmd_draw_indexed( &self, command_buffer: vk::CommandBuffer, index_count: u32, instance_count: u32, first_index: u32, vertex_offset: i32, first_instance: u32, )1680 pub unsafe fn cmd_draw_indexed( 1681 &self, 1682 command_buffer: vk::CommandBuffer, 1683 index_count: u32, 1684 instance_count: u32, 1685 first_index: u32, 1686 vertex_offset: i32, 1687 first_instance: u32, 1688 ) { 1689 (self.device_fn_1_0.cmd_draw_indexed)( 1690 command_buffer, 1691 index_count, 1692 instance_count, 1693 first_index, 1694 vertex_offset, 1695 first_instance, 1696 ); 1697 } 1698 1699 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexedIndirect.html> 1700 #[inline] cmd_draw_indexed_indirect( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, draw_count: u32, stride: u32, )1701 pub unsafe fn cmd_draw_indexed_indirect( 1702 &self, 1703 command_buffer: vk::CommandBuffer, 1704 buffer: vk::Buffer, 1705 offset: vk::DeviceSize, 1706 draw_count: u32, 1707 stride: u32, 1708 ) { 1709 (self.device_fn_1_0.cmd_draw_indexed_indirect)( 1710 command_buffer, 1711 buffer, 1712 offset, 1713 draw_count, 1714 stride, 1715 ); 1716 } 1717 1718 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdExecuteCommands.html> 1719 #[inline] cmd_execute_commands( &self, primary_command_buffer: vk::CommandBuffer, secondary_command_buffers: &[vk::CommandBuffer], )1720 pub unsafe fn cmd_execute_commands( 1721 &self, 1722 primary_command_buffer: vk::CommandBuffer, 1723 secondary_command_buffers: &[vk::CommandBuffer], 1724 ) { 1725 (self.device_fn_1_0.cmd_execute_commands)( 1726 primary_command_buffer, 1727 secondary_command_buffers.len() as u32, 1728 secondary_command_buffers.as_ptr(), 1729 ); 1730 } 1731 1732 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindDescriptorSets.html> 1733 #[inline] 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], )1734 pub unsafe fn cmd_bind_descriptor_sets( 1735 &self, 1736 command_buffer: vk::CommandBuffer, 1737 pipeline_bind_point: vk::PipelineBindPoint, 1738 layout: vk::PipelineLayout, 1739 first_set: u32, 1740 descriptor_sets: &[vk::DescriptorSet], 1741 dynamic_offsets: &[u32], 1742 ) { 1743 (self.device_fn_1_0.cmd_bind_descriptor_sets)( 1744 command_buffer, 1745 pipeline_bind_point, 1746 layout, 1747 first_set, 1748 descriptor_sets.len() as u32, 1749 descriptor_sets.as_ptr(), 1750 dynamic_offsets.len() as u32, 1751 dynamic_offsets.as_ptr(), 1752 ); 1753 } 1754 1755 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyQueryPoolResults.html> 1756 #[inline] 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, )1757 pub unsafe fn cmd_copy_query_pool_results( 1758 &self, 1759 command_buffer: vk::CommandBuffer, 1760 query_pool: vk::QueryPool, 1761 first_query: u32, 1762 query_count: u32, 1763 dst_buffer: vk::Buffer, 1764 dst_offset: vk::DeviceSize, 1765 stride: vk::DeviceSize, 1766 flags: vk::QueryResultFlags, 1767 ) { 1768 (self.device_fn_1_0.cmd_copy_query_pool_results)( 1769 command_buffer, 1770 query_pool, 1771 first_query, 1772 query_count, 1773 dst_buffer, 1774 dst_offset, 1775 stride, 1776 flags, 1777 ); 1778 } 1779 1780 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPushConstants.html> 1781 #[inline] cmd_push_constants( &self, command_buffer: vk::CommandBuffer, layout: vk::PipelineLayout, stage_flags: vk::ShaderStageFlags, offset: u32, constants: &[u8], )1782 pub unsafe fn cmd_push_constants( 1783 &self, 1784 command_buffer: vk::CommandBuffer, 1785 layout: vk::PipelineLayout, 1786 stage_flags: vk::ShaderStageFlags, 1787 offset: u32, 1788 constants: &[u8], 1789 ) { 1790 (self.device_fn_1_0.cmd_push_constants)( 1791 command_buffer, 1792 layout, 1793 stage_flags, 1794 offset, 1795 constants.len() as _, 1796 constants.as_ptr() as _, 1797 ); 1798 } 1799 1800 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderPass.html> 1801 #[inline] cmd_begin_render_pass( &self, command_buffer: vk::CommandBuffer, render_pass_begin: &vk::RenderPassBeginInfo, contents: vk::SubpassContents, )1802 pub unsafe fn cmd_begin_render_pass( 1803 &self, 1804 command_buffer: vk::CommandBuffer, 1805 render_pass_begin: &vk::RenderPassBeginInfo, 1806 contents: vk::SubpassContents, 1807 ) { 1808 (self.device_fn_1_0.cmd_begin_render_pass)(command_buffer, render_pass_begin, contents); 1809 } 1810 1811 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdNextSubpass.html> 1812 #[inline] cmd_next_subpass( &self, command_buffer: vk::CommandBuffer, contents: vk::SubpassContents, )1813 pub unsafe fn cmd_next_subpass( 1814 &self, 1815 command_buffer: vk::CommandBuffer, 1816 contents: vk::SubpassContents, 1817 ) { 1818 (self.device_fn_1_0.cmd_next_subpass)(command_buffer, contents); 1819 } 1820 1821 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindPipeline.html> 1822 #[inline] cmd_bind_pipeline( &self, command_buffer: vk::CommandBuffer, pipeline_bind_point: vk::PipelineBindPoint, pipeline: vk::Pipeline, )1823 pub unsafe fn cmd_bind_pipeline( 1824 &self, 1825 command_buffer: vk::CommandBuffer, 1826 pipeline_bind_point: vk::PipelineBindPoint, 1827 pipeline: vk::Pipeline, 1828 ) { 1829 (self.device_fn_1_0.cmd_bind_pipeline)(command_buffer, pipeline_bind_point, pipeline); 1830 } 1831 1832 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetScissor.html> 1833 #[inline] cmd_set_scissor( &self, command_buffer: vk::CommandBuffer, first_scissor: u32, scissors: &[vk::Rect2D], )1834 pub unsafe fn cmd_set_scissor( 1835 &self, 1836 command_buffer: vk::CommandBuffer, 1837 first_scissor: u32, 1838 scissors: &[vk::Rect2D], 1839 ) { 1840 (self.device_fn_1_0.cmd_set_scissor)( 1841 command_buffer, 1842 first_scissor, 1843 scissors.len() as u32, 1844 scissors.as_ptr(), 1845 ); 1846 } 1847 1848 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineWidth.html> 1849 #[inline] cmd_set_line_width(&self, command_buffer: vk::CommandBuffer, line_width: f32)1850 pub unsafe fn cmd_set_line_width(&self, command_buffer: vk::CommandBuffer, line_width: f32) { 1851 (self.device_fn_1_0.cmd_set_line_width)(command_buffer, line_width); 1852 } 1853 1854 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindVertexBuffers.html> 1855 #[inline] cmd_bind_vertex_buffers( &self, command_buffer: vk::CommandBuffer, first_binding: u32, buffers: &[vk::Buffer], offsets: &[vk::DeviceSize], )1856 pub unsafe fn cmd_bind_vertex_buffers( 1857 &self, 1858 command_buffer: vk::CommandBuffer, 1859 first_binding: u32, 1860 buffers: &[vk::Buffer], 1861 offsets: &[vk::DeviceSize], 1862 ) { 1863 debug_assert_eq!(buffers.len(), offsets.len()); 1864 (self.device_fn_1_0.cmd_bind_vertex_buffers)( 1865 command_buffer, 1866 first_binding, 1867 buffers.len() as u32, 1868 buffers.as_ptr(), 1869 offsets.as_ptr(), 1870 ); 1871 } 1872 1873 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderPass.html> 1874 #[inline] cmd_end_render_pass(&self, command_buffer: vk::CommandBuffer)1875 pub unsafe fn cmd_end_render_pass(&self, command_buffer: vk::CommandBuffer) { 1876 (self.device_fn_1_0.cmd_end_render_pass)(command_buffer); 1877 } 1878 1879 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDraw.html> 1880 #[inline] cmd_draw( &self, command_buffer: vk::CommandBuffer, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32, )1881 pub unsafe fn cmd_draw( 1882 &self, 1883 command_buffer: vk::CommandBuffer, 1884 vertex_count: u32, 1885 instance_count: u32, 1886 first_vertex: u32, 1887 first_instance: u32, 1888 ) { 1889 (self.device_fn_1_0.cmd_draw)( 1890 command_buffer, 1891 vertex_count, 1892 instance_count, 1893 first_vertex, 1894 first_instance, 1895 ); 1896 } 1897 1898 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndirect.html> 1899 #[inline] cmd_draw_indirect( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, draw_count: u32, stride: u32, )1900 pub unsafe fn cmd_draw_indirect( 1901 &self, 1902 command_buffer: vk::CommandBuffer, 1903 buffer: vk::Buffer, 1904 offset: vk::DeviceSize, 1905 draw_count: u32, 1906 stride: u32, 1907 ) { 1908 (self.device_fn_1_0.cmd_draw_indirect)(command_buffer, buffer, offset, draw_count, stride); 1909 } 1910 1911 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatch.html> 1912 #[inline] cmd_dispatch( &self, command_buffer: vk::CommandBuffer, group_count_x: u32, group_count_y: u32, group_count_z: u32, )1913 pub unsafe fn cmd_dispatch( 1914 &self, 1915 command_buffer: vk::CommandBuffer, 1916 group_count_x: u32, 1917 group_count_y: u32, 1918 group_count_z: u32, 1919 ) { 1920 (self.device_fn_1_0.cmd_dispatch)( 1921 command_buffer, 1922 group_count_x, 1923 group_count_y, 1924 group_count_z, 1925 ); 1926 } 1927 1928 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDispatchIndirect.html> 1929 #[inline] cmd_dispatch_indirect( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, )1930 pub unsafe fn cmd_dispatch_indirect( 1931 &self, 1932 command_buffer: vk::CommandBuffer, 1933 buffer: vk::Buffer, 1934 offset: vk::DeviceSize, 1935 ) { 1936 (self.device_fn_1_0.cmd_dispatch_indirect)(command_buffer, buffer, offset); 1937 } 1938 1939 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewport.html> 1940 #[inline] cmd_set_viewport( &self, command_buffer: vk::CommandBuffer, first_viewport: u32, viewports: &[vk::Viewport], )1941 pub unsafe fn cmd_set_viewport( 1942 &self, 1943 command_buffer: vk::CommandBuffer, 1944 first_viewport: u32, 1945 viewports: &[vk::Viewport], 1946 ) { 1947 (self.device_fn_1_0.cmd_set_viewport)( 1948 command_buffer, 1949 first_viewport, 1950 viewports.len() as u32, 1951 viewports.as_ptr(), 1952 ); 1953 } 1954 1955 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBias.html> 1956 #[inline] cmd_set_depth_bias( &self, command_buffer: vk::CommandBuffer, constant_factor: f32, clamp: f32, slope_factor: f32, )1957 pub unsafe fn cmd_set_depth_bias( 1958 &self, 1959 command_buffer: vk::CommandBuffer, 1960 constant_factor: f32, 1961 clamp: f32, 1962 slope_factor: f32, 1963 ) { 1964 (self.device_fn_1_0.cmd_set_depth_bias)( 1965 command_buffer, 1966 constant_factor, 1967 clamp, 1968 slope_factor, 1969 ); 1970 } 1971 1972 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetBlendConstants.html> 1973 #[inline] cmd_set_blend_constants( &self, command_buffer: vk::CommandBuffer, blend_constants: &[f32; 4], )1974 pub unsafe fn cmd_set_blend_constants( 1975 &self, 1976 command_buffer: vk::CommandBuffer, 1977 blend_constants: &[f32; 4], 1978 ) { 1979 (self.device_fn_1_0.cmd_set_blend_constants)(command_buffer, blend_constants); 1980 } 1981 1982 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBounds.html> 1983 #[inline] cmd_set_depth_bounds( &self, command_buffer: vk::CommandBuffer, min_depth_bounds: f32, max_depth_bounds: f32, )1984 pub unsafe fn cmd_set_depth_bounds( 1985 &self, 1986 command_buffer: vk::CommandBuffer, 1987 min_depth_bounds: f32, 1988 max_depth_bounds: f32, 1989 ) { 1990 (self.device_fn_1_0.cmd_set_depth_bounds)( 1991 command_buffer, 1992 min_depth_bounds, 1993 max_depth_bounds, 1994 ); 1995 } 1996 1997 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilCompareMask.html> 1998 #[inline] cmd_set_stencil_compare_mask( &self, command_buffer: vk::CommandBuffer, face_mask: vk::StencilFaceFlags, compare_mask: u32, )1999 pub unsafe fn cmd_set_stencil_compare_mask( 2000 &self, 2001 command_buffer: vk::CommandBuffer, 2002 face_mask: vk::StencilFaceFlags, 2003 compare_mask: u32, 2004 ) { 2005 (self.device_fn_1_0.cmd_set_stencil_compare_mask)(command_buffer, face_mask, compare_mask); 2006 } 2007 2008 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilWriteMask.html> 2009 #[inline] cmd_set_stencil_write_mask( &self, command_buffer: vk::CommandBuffer, face_mask: vk::StencilFaceFlags, write_mask: u32, )2010 pub unsafe fn cmd_set_stencil_write_mask( 2011 &self, 2012 command_buffer: vk::CommandBuffer, 2013 face_mask: vk::StencilFaceFlags, 2014 write_mask: u32, 2015 ) { 2016 (self.device_fn_1_0.cmd_set_stencil_write_mask)(command_buffer, face_mask, write_mask); 2017 } 2018 2019 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetStencilReference.html> 2020 #[inline] cmd_set_stencil_reference( &self, command_buffer: vk::CommandBuffer, face_mask: vk::StencilFaceFlags, reference: u32, )2021 pub unsafe fn cmd_set_stencil_reference( 2022 &self, 2023 command_buffer: vk::CommandBuffer, 2024 face_mask: vk::StencilFaceFlags, 2025 reference: u32, 2026 ) { 2027 (self.device_fn_1_0.cmd_set_stencil_reference)(command_buffer, face_mask, reference); 2028 } 2029 2030 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetQueryPoolResults.html> 2031 #[inline] get_query_pool_results<T>( &self, query_pool: vk::QueryPool, first_query: u32, query_count: u32, data: &mut [T], flags: vk::QueryResultFlags, ) -> VkResult<()>2032 pub unsafe fn get_query_pool_results<T>( 2033 &self, 2034 query_pool: vk::QueryPool, 2035 first_query: u32, 2036 query_count: u32, 2037 data: &mut [T], 2038 flags: vk::QueryResultFlags, 2039 ) -> VkResult<()> { 2040 let data_length = query_count as usize; 2041 assert!( 2042 data_length <= data.len(), 2043 "query_count was higher than the length of the slice" 2044 ); 2045 let data_size = mem::size_of::<T>() * data_length; 2046 (self.device_fn_1_0.get_query_pool_results)( 2047 self.handle(), 2048 query_pool, 2049 first_query, 2050 query_count, 2051 data_size, 2052 data.as_mut_ptr().cast(), 2053 mem::size_of::<T>() as _, 2054 flags, 2055 ) 2056 .result() 2057 } 2058 2059 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginQuery.html> 2060 #[inline] cmd_begin_query( &self, command_buffer: vk::CommandBuffer, query_pool: vk::QueryPool, query: u32, flags: vk::QueryControlFlags, )2061 pub unsafe fn cmd_begin_query( 2062 &self, 2063 command_buffer: vk::CommandBuffer, 2064 query_pool: vk::QueryPool, 2065 query: u32, 2066 flags: vk::QueryControlFlags, 2067 ) { 2068 (self.device_fn_1_0.cmd_begin_query)(command_buffer, query_pool, query, flags); 2069 } 2070 2071 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndQuery.html> 2072 #[inline] cmd_end_query( &self, command_buffer: vk::CommandBuffer, query_pool: vk::QueryPool, query: u32, )2073 pub unsafe fn cmd_end_query( 2074 &self, 2075 command_buffer: vk::CommandBuffer, 2076 query_pool: vk::QueryPool, 2077 query: u32, 2078 ) { 2079 (self.device_fn_1_0.cmd_end_query)(command_buffer, query_pool, query); 2080 } 2081 2082 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdResetQueryPool.html> 2083 #[inline] cmd_reset_query_pool( &self, command_buffer: vk::CommandBuffer, pool: vk::QueryPool, first_query: u32, query_count: u32, )2084 pub unsafe fn cmd_reset_query_pool( 2085 &self, 2086 command_buffer: vk::CommandBuffer, 2087 pool: vk::QueryPool, 2088 first_query: u32, 2089 query_count: u32, 2090 ) { 2091 (self.device_fn_1_0.cmd_reset_query_pool)(command_buffer, pool, first_query, query_count); 2092 } 2093 2094 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdWriteTimestamp.html> 2095 #[inline] cmd_write_timestamp( &self, command_buffer: vk::CommandBuffer, pipeline_stage: vk::PipelineStageFlags, query_pool: vk::QueryPool, query: u32, )2096 pub unsafe fn cmd_write_timestamp( 2097 &self, 2098 command_buffer: vk::CommandBuffer, 2099 pipeline_stage: vk::PipelineStageFlags, 2100 query_pool: vk::QueryPool, 2101 query: u32, 2102 ) { 2103 (self.device_fn_1_0.cmd_write_timestamp)(command_buffer, pipeline_stage, query_pool, query); 2104 } 2105 2106 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateSemaphore.html> 2107 #[inline] create_semaphore( &self, create_info: &vk::SemaphoreCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Semaphore>2108 pub unsafe fn create_semaphore( 2109 &self, 2110 create_info: &vk::SemaphoreCreateInfo, 2111 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2112 ) -> VkResult<vk::Semaphore> { 2113 let mut semaphore = mem::zeroed(); 2114 (self.device_fn_1_0.create_semaphore)( 2115 self.handle(), 2116 create_info, 2117 allocation_callbacks.as_raw_ptr(), 2118 &mut semaphore, 2119 ) 2120 .result_with_success(semaphore) 2121 } 2122 2123 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateGraphicsPipelines.html> 2124 #[inline] 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)>2125 pub unsafe fn create_graphics_pipelines( 2126 &self, 2127 pipeline_cache: vk::PipelineCache, 2128 create_infos: &[vk::GraphicsPipelineCreateInfo], 2129 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2130 ) -> Result<Vec<vk::Pipeline>, (Vec<vk::Pipeline>, vk::Result)> { 2131 let mut pipelines = Vec::with_capacity(create_infos.len()); 2132 let err_code = (self.device_fn_1_0.create_graphics_pipelines)( 2133 self.handle(), 2134 pipeline_cache, 2135 create_infos.len() as u32, 2136 create_infos.as_ptr(), 2137 allocation_callbacks.as_raw_ptr(), 2138 pipelines.as_mut_ptr(), 2139 ); 2140 pipelines.set_len(create_infos.len()); 2141 match err_code { 2142 vk::Result::SUCCESS => Ok(pipelines), 2143 _ => Err((pipelines, err_code)), 2144 } 2145 } 2146 2147 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateComputePipelines.html> 2148 #[inline] 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)>2149 pub unsafe fn create_compute_pipelines( 2150 &self, 2151 pipeline_cache: vk::PipelineCache, 2152 create_infos: &[vk::ComputePipelineCreateInfo], 2153 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2154 ) -> Result<Vec<vk::Pipeline>, (Vec<vk::Pipeline>, vk::Result)> { 2155 let mut pipelines = Vec::with_capacity(create_infos.len()); 2156 let err_code = (self.device_fn_1_0.create_compute_pipelines)( 2157 self.handle(), 2158 pipeline_cache, 2159 create_infos.len() as u32, 2160 create_infos.as_ptr(), 2161 allocation_callbacks.as_raw_ptr(), 2162 pipelines.as_mut_ptr(), 2163 ); 2164 pipelines.set_len(create_infos.len()); 2165 match err_code { 2166 vk::Result::SUCCESS => Ok(pipelines), 2167 _ => Err((pipelines, err_code)), 2168 } 2169 } 2170 2171 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateBuffer.html> 2172 #[inline] create_buffer( &self, create_info: &vk::BufferCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Buffer>2173 pub unsafe fn create_buffer( 2174 &self, 2175 create_info: &vk::BufferCreateInfo, 2176 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2177 ) -> VkResult<vk::Buffer> { 2178 let mut buffer = mem::zeroed(); 2179 (self.device_fn_1_0.create_buffer)( 2180 self.handle(), 2181 create_info, 2182 allocation_callbacks.as_raw_ptr(), 2183 &mut buffer, 2184 ) 2185 .result_with_success(buffer) 2186 } 2187 2188 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePipelineLayout.html> 2189 #[inline] create_pipeline_layout( &self, create_info: &vk::PipelineLayoutCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::PipelineLayout>2190 pub unsafe fn create_pipeline_layout( 2191 &self, 2192 create_info: &vk::PipelineLayoutCreateInfo, 2193 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2194 ) -> VkResult<vk::PipelineLayout> { 2195 let mut pipeline_layout = mem::zeroed(); 2196 (self.device_fn_1_0.create_pipeline_layout)( 2197 self.handle(), 2198 create_info, 2199 allocation_callbacks.as_raw_ptr(), 2200 &mut pipeline_layout, 2201 ) 2202 .result_with_success(pipeline_layout) 2203 } 2204 2205 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreatePipelineCache.html> 2206 #[inline] create_pipeline_cache( &self, create_info: &vk::PipelineCacheCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::PipelineCache>2207 pub unsafe fn create_pipeline_cache( 2208 &self, 2209 create_info: &vk::PipelineCacheCreateInfo, 2210 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2211 ) -> VkResult<vk::PipelineCache> { 2212 let mut pipeline_cache = mem::zeroed(); 2213 (self.device_fn_1_0.create_pipeline_cache)( 2214 self.handle(), 2215 create_info, 2216 allocation_callbacks.as_raw_ptr(), 2217 &mut pipeline_cache, 2218 ) 2219 .result_with_success(pipeline_cache) 2220 } 2221 2222 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPipelineCacheData.html> 2223 #[inline] get_pipeline_cache_data( &self, pipeline_cache: vk::PipelineCache, ) -> VkResult<Vec<u8>>2224 pub unsafe fn get_pipeline_cache_data( 2225 &self, 2226 pipeline_cache: vk::PipelineCache, 2227 ) -> VkResult<Vec<u8>> { 2228 read_into_uninitialized_vector(|count, data| { 2229 (self.device_fn_1_0.get_pipeline_cache_data)( 2230 self.handle(), 2231 pipeline_cache, 2232 count, 2233 data as _, 2234 ) 2235 }) 2236 } 2237 2238 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkMergePipelineCaches.html> 2239 #[inline] merge_pipeline_caches( &self, dst_cache: vk::PipelineCache, src_caches: &[vk::PipelineCache], ) -> VkResult<()>2240 pub unsafe fn merge_pipeline_caches( 2241 &self, 2242 dst_cache: vk::PipelineCache, 2243 src_caches: &[vk::PipelineCache], 2244 ) -> VkResult<()> { 2245 (self.device_fn_1_0.merge_pipeline_caches)( 2246 self.handle(), 2247 dst_cache, 2248 src_caches.len() as u32, 2249 src_caches.as_ptr(), 2250 ) 2251 .result() 2252 } 2253 2254 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkMapMemory.html> 2255 #[inline] map_memory( &self, memory: vk::DeviceMemory, offset: vk::DeviceSize, size: vk::DeviceSize, flags: vk::MemoryMapFlags, ) -> VkResult<*mut c_void>2256 pub unsafe fn map_memory( 2257 &self, 2258 memory: vk::DeviceMemory, 2259 offset: vk::DeviceSize, 2260 size: vk::DeviceSize, 2261 flags: vk::MemoryMapFlags, 2262 ) -> VkResult<*mut c_void> { 2263 let mut data: *mut c_void = ptr::null_mut(); 2264 (self.device_fn_1_0.map_memory)(self.handle(), memory, offset, size, flags, &mut data) 2265 .result_with_success(data) 2266 } 2267 2268 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUnmapMemory.html> 2269 #[inline] unmap_memory(&self, memory: vk::DeviceMemory)2270 pub unsafe fn unmap_memory(&self, memory: vk::DeviceMemory) { 2271 (self.device_fn_1_0.unmap_memory)(self.handle(), memory); 2272 } 2273 2274 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkInvalidateMappedMemoryRanges.html> 2275 #[inline] invalidate_mapped_memory_ranges( &self, ranges: &[vk::MappedMemoryRange], ) -> VkResult<()>2276 pub unsafe fn invalidate_mapped_memory_ranges( 2277 &self, 2278 ranges: &[vk::MappedMemoryRange], 2279 ) -> VkResult<()> { 2280 (self.device_fn_1_0.invalidate_mapped_memory_ranges)( 2281 self.handle(), 2282 ranges.len() as u32, 2283 ranges.as_ptr(), 2284 ) 2285 .result() 2286 } 2287 2288 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkFlushMappedMemoryRanges.html> 2289 #[inline] flush_mapped_memory_ranges( &self, ranges: &[vk::MappedMemoryRange], ) -> VkResult<()>2290 pub unsafe fn flush_mapped_memory_ranges( 2291 &self, 2292 ranges: &[vk::MappedMemoryRange], 2293 ) -> VkResult<()> { 2294 (self.device_fn_1_0.flush_mapped_memory_ranges)( 2295 self.handle(), 2296 ranges.len() as u32, 2297 ranges.as_ptr(), 2298 ) 2299 .result() 2300 } 2301 2302 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateFramebuffer.html> 2303 #[inline] create_framebuffer( &self, create_info: &vk::FramebufferCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Framebuffer>2304 pub unsafe fn create_framebuffer( 2305 &self, 2306 create_info: &vk::FramebufferCreateInfo, 2307 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2308 ) -> VkResult<vk::Framebuffer> { 2309 let mut framebuffer = mem::zeroed(); 2310 (self.device_fn_1_0.create_framebuffer)( 2311 self.handle(), 2312 create_info, 2313 allocation_callbacks.as_raw_ptr(), 2314 &mut framebuffer, 2315 ) 2316 .result_with_success(framebuffer) 2317 } 2318 2319 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceQueue.html> 2320 #[inline] get_device_queue(&self, queue_family_index: u32, queue_index: u32) -> vk::Queue2321 pub unsafe fn get_device_queue(&self, queue_family_index: u32, queue_index: u32) -> vk::Queue { 2322 let mut queue = mem::zeroed(); 2323 (self.device_fn_1_0.get_device_queue)( 2324 self.handle(), 2325 queue_family_index, 2326 queue_index, 2327 &mut queue, 2328 ); 2329 queue 2330 } 2331 2332 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPipelineBarrier.html> 2333 #[inline] 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], )2334 pub unsafe fn cmd_pipeline_barrier( 2335 &self, 2336 command_buffer: vk::CommandBuffer, 2337 src_stage_mask: vk::PipelineStageFlags, 2338 dst_stage_mask: vk::PipelineStageFlags, 2339 dependency_flags: vk::DependencyFlags, 2340 memory_barriers: &[vk::MemoryBarrier], 2341 buffer_memory_barriers: &[vk::BufferMemoryBarrier], 2342 image_memory_barriers: &[vk::ImageMemoryBarrier], 2343 ) { 2344 (self.device_fn_1_0.cmd_pipeline_barrier)( 2345 command_buffer, 2346 src_stage_mask, 2347 dst_stage_mask, 2348 dependency_flags, 2349 memory_barriers.len() as u32, 2350 memory_barriers.as_ptr(), 2351 buffer_memory_barriers.len() as u32, 2352 buffer_memory_barriers.as_ptr(), 2353 image_memory_barriers.len() as u32, 2354 image_memory_barriers.as_ptr(), 2355 ); 2356 } 2357 2358 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateRenderPass.html> 2359 #[inline] create_render_pass( &self, create_info: &vk::RenderPassCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::RenderPass>2360 pub unsafe fn create_render_pass( 2361 &self, 2362 create_info: &vk::RenderPassCreateInfo, 2363 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2364 ) -> VkResult<vk::RenderPass> { 2365 let mut renderpass = mem::zeroed(); 2366 (self.device_fn_1_0.create_render_pass)( 2367 self.handle(), 2368 create_info, 2369 allocation_callbacks.as_raw_ptr(), 2370 &mut renderpass, 2371 ) 2372 .result_with_success(renderpass) 2373 } 2374 2375 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBeginCommandBuffer.html> 2376 #[inline] begin_command_buffer( &self, command_buffer: vk::CommandBuffer, begin_info: &vk::CommandBufferBeginInfo, ) -> VkResult<()>2377 pub unsafe fn begin_command_buffer( 2378 &self, 2379 command_buffer: vk::CommandBuffer, 2380 begin_info: &vk::CommandBufferBeginInfo, 2381 ) -> VkResult<()> { 2382 (self.device_fn_1_0.begin_command_buffer)(command_buffer, begin_info).result() 2383 } 2384 2385 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkEndCommandBuffer.html> 2386 #[inline] end_command_buffer(&self, command_buffer: vk::CommandBuffer) -> VkResult<()>2387 pub unsafe fn end_command_buffer(&self, command_buffer: vk::CommandBuffer) -> VkResult<()> { 2388 (self.device_fn_1_0.end_command_buffer)(command_buffer).result() 2389 } 2390 2391 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkWaitForFences.html> 2392 #[inline] wait_for_fences( &self, fences: &[vk::Fence], wait_all: bool, timeout: u64, ) -> VkResult<()>2393 pub unsafe fn wait_for_fences( 2394 &self, 2395 fences: &[vk::Fence], 2396 wait_all: bool, 2397 timeout: u64, 2398 ) -> VkResult<()> { 2399 (self.device_fn_1_0.wait_for_fences)( 2400 self.handle(), 2401 fences.len() as u32, 2402 fences.as_ptr(), 2403 wait_all as u32, 2404 timeout, 2405 ) 2406 .result() 2407 } 2408 2409 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetFenceStatus.html> 2410 #[inline] get_fence_status(&self, fence: vk::Fence) -> VkResult<bool>2411 pub unsafe fn get_fence_status(&self, fence: vk::Fence) -> VkResult<bool> { 2412 let err_code = (self.device_fn_1_0.get_fence_status)(self.handle(), fence); 2413 match err_code { 2414 vk::Result::SUCCESS => Ok(true), 2415 vk::Result::NOT_READY => Ok(false), 2416 _ => Err(err_code), 2417 } 2418 } 2419 2420 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueWaitIdle.html> 2421 #[inline] queue_wait_idle(&self, queue: vk::Queue) -> VkResult<()>2422 pub unsafe fn queue_wait_idle(&self, queue: vk::Queue) -> VkResult<()> { 2423 (self.device_fn_1_0.queue_wait_idle)(queue).result() 2424 } 2425 2426 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueSubmit.html> 2427 #[inline] queue_submit( &self, queue: vk::Queue, submits: &[vk::SubmitInfo], fence: vk::Fence, ) -> VkResult<()>2428 pub unsafe fn queue_submit( 2429 &self, 2430 queue: vk::Queue, 2431 submits: &[vk::SubmitInfo], 2432 fence: vk::Fence, 2433 ) -> VkResult<()> { 2434 (self.device_fn_1_0.queue_submit)(queue, submits.len() as u32, submits.as_ptr(), fence) 2435 .result() 2436 } 2437 2438 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkQueueBindSparse.html> 2439 #[inline] queue_bind_sparse( &self, queue: vk::Queue, bind_info: &[vk::BindSparseInfo], fence: vk::Fence, ) -> VkResult<()>2440 pub unsafe fn queue_bind_sparse( 2441 &self, 2442 queue: vk::Queue, 2443 bind_info: &[vk::BindSparseInfo], 2444 fence: vk::Fence, 2445 ) -> VkResult<()> { 2446 (self.device_fn_1_0.queue_bind_sparse)( 2447 queue, 2448 bind_info.len() as u32, 2449 bind_info.as_ptr(), 2450 fence, 2451 ) 2452 .result() 2453 } 2454 2455 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateBufferView.html> 2456 #[inline] create_buffer_view( &self, create_info: &vk::BufferViewCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::BufferView>2457 pub unsafe fn create_buffer_view( 2458 &self, 2459 create_info: &vk::BufferViewCreateInfo, 2460 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2461 ) -> VkResult<vk::BufferView> { 2462 let mut buffer_view = mem::zeroed(); 2463 (self.device_fn_1_0.create_buffer_view)( 2464 self.handle(), 2465 create_info, 2466 allocation_callbacks.as_raw_ptr(), 2467 &mut buffer_view, 2468 ) 2469 .result_with_success(buffer_view) 2470 } 2471 2472 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyBufferView.html> 2473 #[inline] destroy_buffer_view( &self, buffer_view: vk::BufferView, allocation_callbacks: Option<&vk::AllocationCallbacks>, )2474 pub unsafe fn destroy_buffer_view( 2475 &self, 2476 buffer_view: vk::BufferView, 2477 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2478 ) { 2479 (self.device_fn_1_0.destroy_buffer_view)( 2480 self.handle(), 2481 buffer_view, 2482 allocation_callbacks.as_raw_ptr(), 2483 ); 2484 } 2485 2486 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateImageView.html> 2487 #[inline] create_image_view( &self, create_info: &vk::ImageViewCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::ImageView>2488 pub unsafe fn create_image_view( 2489 &self, 2490 create_info: &vk::ImageViewCreateInfo, 2491 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2492 ) -> VkResult<vk::ImageView> { 2493 let mut image_view = mem::zeroed(); 2494 (self.device_fn_1_0.create_image_view)( 2495 self.handle(), 2496 create_info, 2497 allocation_callbacks.as_raw_ptr(), 2498 &mut image_view, 2499 ) 2500 .result_with_success(image_view) 2501 } 2502 2503 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateCommandBuffers.html> 2504 #[inline] allocate_command_buffers( &self, allocate_info: &vk::CommandBufferAllocateInfo, ) -> VkResult<Vec<vk::CommandBuffer>>2505 pub unsafe fn allocate_command_buffers( 2506 &self, 2507 allocate_info: &vk::CommandBufferAllocateInfo, 2508 ) -> VkResult<Vec<vk::CommandBuffer>> { 2509 let mut buffers = Vec::with_capacity(allocate_info.command_buffer_count as usize); 2510 (self.device_fn_1_0.allocate_command_buffers)( 2511 self.handle(), 2512 allocate_info, 2513 buffers.as_mut_ptr(), 2514 ) 2515 .result()?; 2516 buffers.set_len(allocate_info.command_buffer_count as usize); 2517 Ok(buffers) 2518 } 2519 2520 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateCommandPool.html> 2521 #[inline] create_command_pool( &self, create_info: &vk::CommandPoolCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::CommandPool>2522 pub unsafe fn create_command_pool( 2523 &self, 2524 create_info: &vk::CommandPoolCreateInfo, 2525 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2526 ) -> VkResult<vk::CommandPool> { 2527 let mut pool = mem::zeroed(); 2528 (self.device_fn_1_0.create_command_pool)( 2529 self.handle(), 2530 create_info, 2531 allocation_callbacks.as_raw_ptr(), 2532 &mut pool, 2533 ) 2534 .result_with_success(pool) 2535 } 2536 2537 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateQueryPool.html> 2538 #[inline] create_query_pool( &self, create_info: &vk::QueryPoolCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::QueryPool>2539 pub unsafe fn create_query_pool( 2540 &self, 2541 create_info: &vk::QueryPoolCreateInfo, 2542 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2543 ) -> VkResult<vk::QueryPool> { 2544 let mut pool = mem::zeroed(); 2545 (self.device_fn_1_0.create_query_pool)( 2546 self.handle(), 2547 create_info, 2548 allocation_callbacks.as_raw_ptr(), 2549 &mut pool, 2550 ) 2551 .result_with_success(pool) 2552 } 2553 2554 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateImage.html> 2555 #[inline] create_image( &self, create_info: &vk::ImageCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Image>2556 pub unsafe fn create_image( 2557 &self, 2558 create_info: &vk::ImageCreateInfo, 2559 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2560 ) -> VkResult<vk::Image> { 2561 let mut image = mem::zeroed(); 2562 (self.device_fn_1_0.create_image)( 2563 self.handle(), 2564 create_info, 2565 allocation_callbacks.as_raw_ptr(), 2566 &mut image, 2567 ) 2568 .result_with_success(image) 2569 } 2570 2571 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSubresourceLayout.html> 2572 #[inline] get_image_subresource_layout( &self, image: vk::Image, subresource: vk::ImageSubresource, ) -> vk::SubresourceLayout2573 pub unsafe fn get_image_subresource_layout( 2574 &self, 2575 image: vk::Image, 2576 subresource: vk::ImageSubresource, 2577 ) -> vk::SubresourceLayout { 2578 let mut layout = mem::zeroed(); 2579 (self.device_fn_1_0.get_image_subresource_layout)( 2580 self.handle(), 2581 image, 2582 &subresource, 2583 &mut layout, 2584 ); 2585 layout 2586 } 2587 2588 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageMemoryRequirements.html> 2589 #[inline] get_image_memory_requirements(&self, image: vk::Image) -> vk::MemoryRequirements2590 pub unsafe fn get_image_memory_requirements(&self, image: vk::Image) -> vk::MemoryRequirements { 2591 let mut mem_req = mem::zeroed(); 2592 (self.device_fn_1_0.get_image_memory_requirements)(self.handle(), image, &mut mem_req); 2593 mem_req 2594 } 2595 2596 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetBufferMemoryRequirements.html> 2597 #[inline] get_buffer_memory_requirements( &self, buffer: vk::Buffer, ) -> vk::MemoryRequirements2598 pub unsafe fn get_buffer_memory_requirements( 2599 &self, 2600 buffer: vk::Buffer, 2601 ) -> vk::MemoryRequirements { 2602 let mut mem_req = mem::zeroed(); 2603 (self.device_fn_1_0.get_buffer_memory_requirements)(self.handle(), buffer, &mut mem_req); 2604 mem_req 2605 } 2606 2607 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkAllocateMemory.html> 2608 #[inline] allocate_memory( &self, allocate_info: &vk::MemoryAllocateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DeviceMemory>2609 pub unsafe fn allocate_memory( 2610 &self, 2611 allocate_info: &vk::MemoryAllocateInfo, 2612 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2613 ) -> VkResult<vk::DeviceMemory> { 2614 let mut memory = mem::zeroed(); 2615 (self.device_fn_1_0.allocate_memory)( 2616 self.handle(), 2617 allocate_info, 2618 allocation_callbacks.as_raw_ptr(), 2619 &mut memory, 2620 ) 2621 .result_with_success(memory) 2622 } 2623 2624 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateShaderModule.html> 2625 #[inline] create_shader_module( &self, create_info: &vk::ShaderModuleCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::ShaderModule>2626 pub unsafe fn create_shader_module( 2627 &self, 2628 create_info: &vk::ShaderModuleCreateInfo, 2629 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2630 ) -> VkResult<vk::ShaderModule> { 2631 let mut shader = mem::zeroed(); 2632 (self.device_fn_1_0.create_shader_module)( 2633 self.handle(), 2634 create_info, 2635 allocation_callbacks.as_raw_ptr(), 2636 &mut shader, 2637 ) 2638 .result_with_success(shader) 2639 } 2640 2641 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateFence.html> 2642 #[inline] create_fence( &self, create_info: &vk::FenceCreateInfo, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::Fence>2643 pub unsafe fn create_fence( 2644 &self, 2645 create_info: &vk::FenceCreateInfo, 2646 allocation_callbacks: Option<&vk::AllocationCallbacks>, 2647 ) -> VkResult<vk::Fence> { 2648 let mut fence = mem::zeroed(); 2649 (self.device_fn_1_0.create_fence)( 2650 self.handle(), 2651 create_info, 2652 allocation_callbacks.as_raw_ptr(), 2653 &mut fence, 2654 ) 2655 .result_with_success(fence) 2656 } 2657 2658 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindBufferMemory.html> 2659 #[inline] bind_buffer_memory( &self, buffer: vk::Buffer, device_memory: vk::DeviceMemory, offset: vk::DeviceSize, ) -> VkResult<()>2660 pub unsafe fn bind_buffer_memory( 2661 &self, 2662 buffer: vk::Buffer, 2663 device_memory: vk::DeviceMemory, 2664 offset: vk::DeviceSize, 2665 ) -> VkResult<()> { 2666 (self.device_fn_1_0.bind_buffer_memory)(self.handle(), buffer, device_memory, offset) 2667 .result() 2668 } 2669 2670 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkBindImageMemory.html> 2671 #[inline] bind_image_memory( &self, image: vk::Image, device_memory: vk::DeviceMemory, offset: vk::DeviceSize, ) -> VkResult<()>2672 pub unsafe fn bind_image_memory( 2673 &self, 2674 image: vk::Image, 2675 device_memory: vk::DeviceMemory, 2676 offset: vk::DeviceSize, 2677 ) -> VkResult<()> { 2678 (self.device_fn_1_0.bind_image_memory)(self.handle(), image, device_memory, offset).result() 2679 } 2680 2681 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetRenderAreaGranularity.html> 2682 #[inline] get_render_area_granularity(&self, render_pass: vk::RenderPass) -> vk::Extent2D2683 pub unsafe fn get_render_area_granularity(&self, render_pass: vk::RenderPass) -> vk::Extent2D { 2684 let mut granularity = mem::zeroed(); 2685 (self.device_fn_1_0.get_render_area_granularity)( 2686 self.handle(), 2687 render_pass, 2688 &mut granularity, 2689 ); 2690 granularity 2691 } 2692 2693 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetDeviceMemoryCommitment.html> 2694 #[inline] get_device_memory_commitment(&self, memory: vk::DeviceMemory) -> vk::DeviceSize2695 pub unsafe fn get_device_memory_commitment(&self, memory: vk::DeviceMemory) -> vk::DeviceSize { 2696 let mut committed_memory_in_bytes = 0; 2697 (self.device_fn_1_0.get_device_memory_commitment)( 2698 self.handle(), 2699 memory, 2700 &mut committed_memory_in_bytes, 2701 ); 2702 committed_memory_in_bytes 2703 } 2704 2705 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSparseMemoryRequirements.html> 2706 #[inline] get_image_sparse_memory_requirements( &self, image: vk::Image, ) -> Vec<vk::SparseImageMemoryRequirements>2707 pub unsafe fn get_image_sparse_memory_requirements( 2708 &self, 2709 image: vk::Image, 2710 ) -> Vec<vk::SparseImageMemoryRequirements> { 2711 read_into_uninitialized_vector(|count, data| { 2712 (self.device_fn_1_0.get_image_sparse_memory_requirements)( 2713 self.handle(), 2714 image, 2715 count, 2716 data, 2717 ); 2718 vk::Result::SUCCESS 2719 }) 2720 // The closure always returns SUCCESS 2721 .unwrap() 2722 } 2723 } 2724