1 use crate::vk; 2 use crate::{Device, Instance}; 3 use std::ffi::CStr; 4 use std::mem; 5 6 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state2.html> 7 #[derive(Clone)] 8 pub struct ExtendedDynamicState2 { 9 fp: vk::ExtExtendedDynamicState2Fn, 10 } 11 12 impl ExtendedDynamicState2 { new(instance: &Instance, device: &Device) -> Self13 pub fn new(instance: &Instance, device: &Device) -> Self { 14 let fp = vk::ExtExtendedDynamicState2Fn::load(|name| unsafe { 15 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 16 }); 17 Self { fp } 18 } 19 20 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPatchControlPointsEXT.html> 21 #[inline] cmd_set_patch_control_points( &self, command_buffer: vk::CommandBuffer, patch_control_points: u32, )22 pub unsafe fn cmd_set_patch_control_points( 23 &self, 24 command_buffer: vk::CommandBuffer, 25 patch_control_points: u32, 26 ) { 27 (self.fp.cmd_set_patch_control_points_ext)(command_buffer, patch_control_points) 28 } 29 30 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizerDiscardEnableEXT.html> 31 #[inline] cmd_set_rasterizer_discard_enable( &self, command_buffer: vk::CommandBuffer, rasterizer_discard_enable: bool, )32 pub unsafe fn cmd_set_rasterizer_discard_enable( 33 &self, 34 command_buffer: vk::CommandBuffer, 35 rasterizer_discard_enable: bool, 36 ) { 37 (self.fp.cmd_set_rasterizer_discard_enable_ext)( 38 command_buffer, 39 rasterizer_discard_enable.into(), 40 ) 41 } 42 43 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthBiasEnableEXT.html> 44 #[inline] cmd_set_depth_bias_enable( &self, command_buffer: vk::CommandBuffer, depth_bias_enable: bool, )45 pub unsafe fn cmd_set_depth_bias_enable( 46 &self, 47 command_buffer: vk::CommandBuffer, 48 depth_bias_enable: bool, 49 ) { 50 (self.fp.cmd_set_depth_bias_enable_ext)(command_buffer, depth_bias_enable.into()) 51 } 52 53 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLogicOpEXT.html> 54 #[inline] cmd_set_logic_op( &self, command_buffer: vk::CommandBuffer, logic_op: vk::LogicOp, )55 pub unsafe fn cmd_set_logic_op( 56 &self, 57 command_buffer: vk::CommandBuffer, 58 logic_op: vk::LogicOp, 59 ) { 60 (self.fp.cmd_set_logic_op_ext)(command_buffer, logic_op) 61 } 62 63 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPrimitiveRestartEnableEXT.html> 64 #[inline] cmd_set_primitive_restart_enable( &self, command_buffer: vk::CommandBuffer, primitive_restart_enable: bool, )65 pub unsafe fn cmd_set_primitive_restart_enable( 66 &self, 67 command_buffer: vk::CommandBuffer, 68 primitive_restart_enable: bool, 69 ) { 70 (self.fp.cmd_set_primitive_restart_enable_ext)( 71 command_buffer, 72 primitive_restart_enable.into(), 73 ) 74 } 75 76 #[inline] name() -> &'static CStr77 pub const fn name() -> &'static CStr { 78 vk::ExtExtendedDynamicState2Fn::name() 79 } 80 81 #[inline] fp(&self) -> &vk::ExtExtendedDynamicState2Fn82 pub fn fp(&self) -> &vk::ExtExtendedDynamicState2Fn { 83 &self.fp 84 } 85 } 86