• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     fp: vk::KhrCreateRenderpass2Fn,
12 }
13 
14 impl CreateRenderPass2 {
new(instance: &Instance, device: &Device) -> Self15     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     #[inline]
create_render_pass2( &self, create_info: &vk::RenderPassCreateInfo2, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::RenderPass>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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderPass2.html>
41     #[inline]
cmd_begin_render_pass2( &self, command_buffer: vk::CommandBuffer, render_pass_begin_info: &vk::RenderPassBeginInfo, subpass_begin_info: &vk::SubpassBeginInfo, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdNextSubpass2.html>
56     #[inline]
cmd_next_subpass2( &self, command_buffer: vk::CommandBuffer, subpass_begin_info: &vk::SubpassBeginInfo, subpass_end_info: &vk::SubpassEndInfo, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderPass2.html>
67     #[inline]
cmd_end_render_pass2( &self, command_buffer: vk::CommandBuffer, subpass_end_info: &vk::SubpassEndInfo, )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]
name() -> &'static CStr77     pub const fn name() -> &'static CStr {
78         vk::KhrCreateRenderpass2Fn::name()
79     }
80 
81     #[inline]
fp(&self) -> &vk::KhrCreateRenderpass2Fn82     pub fn fp(&self) -> &vk::KhrCreateRenderpass2Fn {
83         &self.fp
84     }
85 
86     #[inline]
device(&self) -> vk::Device87     pub fn device(&self) -> vk::Device {
88         self.handle
89     }
90 }
91