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