1 use crate::prelude::*; 2 use crate::vk; 3 use crate::RawPtr; 4 use crate::{Device, Instance}; 5 use std::ffi::CStr; 6 use std::mem; 7 8 #[derive(Clone)] 9 pub struct CreateRenderPass2 { 10 handle: vk::Device, 11 khr_create_renderpass2_fn: vk::KhrCreateRenderpass2Fn, 12 } 13 14 impl CreateRenderPass2 { new(instance: &Instance, device: &Device) -> Self15 pub fn new(instance: &Instance, device: &Device) -> Self { 16 let khr_create_renderpass2_fn = vk::KhrCreateRenderpass2Fn::load(|name| unsafe { 17 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 18 }); 19 Self { 20 handle: device.handle(), 21 khr_create_renderpass2_fn, 22 } 23 } 24 name() -> &'static CStr25 pub fn name() -> &'static CStr { 26 vk::KhrCreateRenderpass2Fn::name() 27 } 28 29 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateRenderPass2.html>"] create_render_pass2( &self, create_info: &vk::RenderPassCreateInfo2, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::RenderPass>30 pub unsafe fn create_render_pass2( 31 &self, 32 create_info: &vk::RenderPassCreateInfo2, 33 allocation_callbacks: Option<&vk::AllocationCallbacks>, 34 ) -> VkResult<vk::RenderPass> { 35 let mut renderpass = mem::zeroed(); 36 self.khr_create_renderpass2_fn 37 .create_render_pass2_khr( 38 self.handle, 39 create_info, 40 allocation_callbacks.as_raw_ptr(), 41 &mut renderpass, 42 ) 43 .result_with_success(renderpass) 44 } 45 46 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBeginRenderPass2.html>"] cmd_begin_render_pass2( &self, command_buffer: vk::CommandBuffer, render_pass_begin_info: &vk::RenderPassBeginInfo, subpass_begin_info: &vk::SubpassBeginInfo, )47 pub unsafe fn cmd_begin_render_pass2( 48 &self, 49 command_buffer: vk::CommandBuffer, 50 render_pass_begin_info: &vk::RenderPassBeginInfo, 51 subpass_begin_info: &vk::SubpassBeginInfo, 52 ) { 53 self.khr_create_renderpass2_fn.cmd_begin_render_pass2_khr( 54 command_buffer, 55 render_pass_begin_info, 56 subpass_begin_info, 57 ); 58 } 59 60 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdNextSubpass2.html>"] cmd_next_subpass2( &self, command_buffer: vk::CommandBuffer, subpass_begin_info: &vk::SubpassBeginInfo, subpass_end_info: &vk::SubpassEndInfo, )61 pub unsafe fn cmd_next_subpass2( 62 &self, 63 command_buffer: vk::CommandBuffer, 64 subpass_begin_info: &vk::SubpassBeginInfo, 65 subpass_end_info: &vk::SubpassEndInfo, 66 ) { 67 self.khr_create_renderpass2_fn.cmd_next_subpass2_khr( 68 command_buffer, 69 subpass_begin_info, 70 subpass_end_info, 71 ); 72 } 73 74 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdEndRenderPass2.html>"] cmd_end_render_pass2( &self, command_buffer: vk::CommandBuffer, subpass_end_info: &vk::SubpassEndInfo, )75 pub unsafe fn cmd_end_render_pass2( 76 &self, 77 command_buffer: vk::CommandBuffer, 78 subpass_end_info: &vk::SubpassEndInfo, 79 ) { 80 self.khr_create_renderpass2_fn 81 .cmd_end_render_pass2_khr(command_buffer, subpass_end_info); 82 } 83 fp(&self) -> &vk::KhrCreateRenderpass2Fn84 pub fn fp(&self) -> &vk::KhrCreateRenderpass2Fn { 85 &self.khr_create_renderpass2_fn 86 } 87 device(&self) -> vk::Device88 pub fn device(&self) -> vk::Device { 89 self.handle 90 } 91 } 92