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