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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateRenderPass2.html>
24    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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderPass2.html>
40    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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdNextSubpass2.html>
54    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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderPass2.html>
64    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}