1 use crate::vk;
2 use crate::{Device, Instance};
3 use std::ffi::CStr;
4 use std::mem;
5 
6 #[derive(Clone)]
7 pub struct DynamicRendering {
8     fp: vk::KhrDynamicRenderingFn,
9 }
10 
11 impl DynamicRendering {
new(instance: &Instance, device: &Device) -> Self12     pub fn new(instance: &Instance, device: &Device) -> Self {
13         let fp = vk::KhrDynamicRenderingFn::load(|name| unsafe {
14             mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
15         });
16         Self { fp }
17     }
18 
19     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBeginRenderingKHR.html>
20     #[inline]
cmd_begin_rendering( &self, command_buffer: vk::CommandBuffer, rendering_info: &vk::RenderingInfoKHR, )21     pub unsafe fn cmd_begin_rendering(
22         &self,
23         command_buffer: vk::CommandBuffer,
24         rendering_info: &vk::RenderingInfoKHR,
25     ) {
26         (self.fp.cmd_begin_rendering_khr)(command_buffer, rendering_info)
27     }
28 
29     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdEndRenderingKHR.html>
30     #[inline]
cmd_end_rendering(&self, command_buffer: vk::CommandBuffer)31     pub unsafe fn cmd_end_rendering(&self, command_buffer: vk::CommandBuffer) {
32         (self.fp.cmd_end_rendering_khr)(command_buffer)
33     }
34 
35     #[inline]
name() -> &'static CStr36     pub const fn name() -> &'static CStr {
37         vk::KhrDynamicRenderingFn::name()
38     }
39 
40     #[inline]
fp(&self) -> &vk::KhrDynamicRenderingFn41     pub fn fp(&self) -> &vk::KhrDynamicRenderingFn {
42         &self.fp
43     }
44 }
45