ash/extensions/khr/
create_render_pass2.rs
1use 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 pub unsafe fn create_render_pass2(
25 &self,
26 create_info: &vk::RenderPassCreateInfo2,
27 allocation_callbacks: Option<&vk::AllocationCallbacks>,
28 ) -> VkResult<vk::RenderPass> {
29 let mut renderpass = mem::zeroed();
30 (self.fp.create_render_pass2_khr)(
31 self.handle,
32 create_info,
33 allocation_callbacks.as_raw_ptr(),
34 &mut renderpass,
35 )
36 .result_with_success(renderpass)
37 }
38
39 pub unsafe fn cmd_begin_render_pass2(
41 &self,
42 command_buffer: vk::CommandBuffer,
43 render_pass_begin_info: &vk::RenderPassBeginInfo,
44 subpass_begin_info: &vk::SubpassBeginInfo,
45 ) {
46 (self.fp.cmd_begin_render_pass2_khr)(
47 command_buffer,
48 render_pass_begin_info,
49 subpass_begin_info,
50 );
51 }
52
53 pub unsafe fn cmd_next_subpass2(
55 &self,
56 command_buffer: vk::CommandBuffer,
57 subpass_begin_info: &vk::SubpassBeginInfo,
58 subpass_end_info: &vk::SubpassEndInfo,
59 ) {
60 (self.fp.cmd_next_subpass2_khr)(command_buffer, subpass_begin_info, subpass_end_info);
61 }
62
63 pub unsafe fn cmd_end_render_pass2(
65 &self,
66 command_buffer: vk::CommandBuffer,
67 subpass_end_info: &vk::SubpassEndInfo,
68 ) {
69 (self.fp.cmd_end_render_pass2_khr)(command_buffer, subpass_end_info);
70 }
71
72 pub const fn name() -> &'static CStr {
73 vk::KhrCreateRenderpass2Fn::name()
74 }
75
76 pub fn fp(&self) -> &vk::KhrCreateRenderpass2Fn {
77 &self.fp
78 }
79
80 pub fn device(&self) -> vk::Device {
81 self.handle
82 }
83}