• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::vk;
2 use crate::{Device, Instance};
3 use std::ffi::CStr;
4 use std::mem;
5 use std::ptr;
6 
7 #[derive(Clone)]
8 pub struct ExtendedDynamicState {
9     handle: vk::Instance,
10     extended_dynamic_state_fn: vk::ExtExtendedDynamicStateFn,
11 }
12 
13 impl ExtendedDynamicState {
new(instance: &Instance, device: &Device) -> Self14     pub fn new(instance: &Instance, device: &Device) -> Self {
15         let extended_dynamic_state_fn = vk::ExtExtendedDynamicStateFn::load(|name| unsafe {
16             mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
17         });
18         Self {
19             handle: instance.handle(),
20             extended_dynamic_state_fn,
21         }
22     }
23 
name() -> &'static CStr24     pub fn name() -> &'static CStr {
25         vk::ExtExtendedDynamicStateFn::name()
26     }
27 
28     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetCullModeEXT.html>"]
cmd_set_cull_mode( &self, command_buffer: vk::CommandBuffer, cull_mode: vk::CullModeFlags, )29     pub unsafe fn cmd_set_cull_mode(
30         &self,
31         command_buffer: vk::CommandBuffer,
32         cull_mode: vk::CullModeFlags,
33     ) {
34         self.extended_dynamic_state_fn
35             .cmd_set_cull_mode_ext(command_buffer, cull_mode)
36     }
37 
38     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetFrontFaceEXT.html>"]
cmd_set_front_face( &self, command_buffer: vk::CommandBuffer, front_face: vk::FrontFace, )39     pub unsafe fn cmd_set_front_face(
40         &self,
41         command_buffer: vk::CommandBuffer,
42         front_face: vk::FrontFace,
43     ) {
44         self.extended_dynamic_state_fn
45             .cmd_set_front_face_ext(command_buffer, front_face)
46     }
47 
48     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetPrimitiveTopologyEXT.html>"]
cmd_set_primitive_topology( &self, command_buffer: vk::CommandBuffer, primitive_topology: vk::PrimitiveTopology, )49     pub unsafe fn cmd_set_primitive_topology(
50         &self,
51         command_buffer: vk::CommandBuffer,
52         primitive_topology: vk::PrimitiveTopology,
53     ) {
54         self.extended_dynamic_state_fn
55             .cmd_set_primitive_topology_ext(command_buffer, primitive_topology)
56     }
57 
58     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetViewportWithCountEXT.html>"]
cmd_set_viewport_with_count( &self, command_buffer: vk::CommandBuffer, viewports: &[vk::Viewport], )59     pub unsafe fn cmd_set_viewport_with_count(
60         &self,
61         command_buffer: vk::CommandBuffer,
62         viewports: &[vk::Viewport],
63     ) {
64         self.extended_dynamic_state_fn
65             .cmd_set_viewport_with_count_ext(
66                 command_buffer,
67                 viewports.len() as u32,
68                 viewports.as_ptr(),
69             )
70     }
71 
72     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetScissorWithCountEXT.html>"]
cmd_set_scissor_with_count( &self, command_buffer: vk::CommandBuffer, scissors: &[vk::Rect2D], )73     pub unsafe fn cmd_set_scissor_with_count(
74         &self,
75         command_buffer: vk::CommandBuffer,
76         scissors: &[vk::Rect2D],
77     ) {
78         self.extended_dynamic_state_fn
79             .cmd_set_scissor_with_count_ext(
80                 command_buffer,
81                 scissors.len() as u32,
82                 scissors.as_ptr(),
83             )
84     }
85 
86     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBindVertexBuffers2EXT.html>"]
cmd_bind_vertex_buffers2( &self, command_buffer: vk::CommandBuffer, first_binding: u32, buffers: &[vk::Buffer], offsets: &[vk::DeviceSize], sizes: Option<&[vk::DeviceSize]>, strides: Option<&[vk::DeviceSize]>, )87     pub unsafe fn cmd_bind_vertex_buffers2(
88         &self,
89         command_buffer: vk::CommandBuffer,
90         first_binding: u32,
91         buffers: &[vk::Buffer],
92         offsets: &[vk::DeviceSize],
93         sizes: Option<&[vk::DeviceSize]>,
94         strides: Option<&[vk::DeviceSize]>,
95     ) {
96         assert_eq!(offsets.len(), buffers.len());
97         let p_sizes = if let Some(sizes) = sizes {
98             assert_eq!(sizes.len(), buffers.len());
99             sizes.as_ptr()
100         } else {
101             ptr::null()
102         };
103         let p_strides = if let Some(strides) = strides {
104             assert_eq!(strides.len(), buffers.len());
105             strides.as_ptr()
106         } else {
107             ptr::null()
108         };
109         self.extended_dynamic_state_fn.cmd_bind_vertex_buffers2_ext(
110             command_buffer,
111             first_binding,
112             buffers.len() as u32,
113             buffers.as_ptr(),
114             offsets.as_ptr(),
115             p_sizes,
116             p_strides,
117         )
118     }
119 
120     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthTestEnableEXT.html>"]
cmd_set_depth_test_enable( &self, command_buffer: vk::CommandBuffer, depth_test_enable: bool, )121     pub unsafe fn cmd_set_depth_test_enable(
122         &self,
123         command_buffer: vk::CommandBuffer,
124         depth_test_enable: bool,
125     ) {
126         self.extended_dynamic_state_fn
127             .cmd_set_depth_test_enable_ext(command_buffer, depth_test_enable.into())
128     }
129 
130     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthWriteEnableEXT.html>"]
cmd_set_depth_write_enable( &self, command_buffer: vk::CommandBuffer, depth_write_enable: bool, )131     pub unsafe fn cmd_set_depth_write_enable(
132         &self,
133         command_buffer: vk::CommandBuffer,
134         depth_write_enable: bool,
135     ) {
136         self.extended_dynamic_state_fn
137             .cmd_set_depth_write_enable_ext(command_buffer, depth_write_enable.into())
138     }
139 
140     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthCompareOpEXT.html>"]
cmd_set_depth_compare_op( &self, command_buffer: vk::CommandBuffer, depth_compare_op: vk::CompareOp, )141     pub unsafe fn cmd_set_depth_compare_op(
142         &self,
143         command_buffer: vk::CommandBuffer,
144         depth_compare_op: vk::CompareOp,
145     ) {
146         self.extended_dynamic_state_fn
147             .cmd_set_depth_compare_op_ext(command_buffer, depth_compare_op)
148     }
149 
150     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetDepthBoundsTestEnableEXT.html>"]
cmd_set_depth_bounds_test_enable( &self, command_buffer: vk::CommandBuffer, depth_bounds_test_enable: bool, )151     pub unsafe fn cmd_set_depth_bounds_test_enable(
152         &self,
153         command_buffer: vk::CommandBuffer,
154         depth_bounds_test_enable: bool,
155     ) {
156         self.extended_dynamic_state_fn
157             .cmd_set_depth_bounds_test_enable_ext(command_buffer, depth_bounds_test_enable.into())
158     }
159 
160     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilTestEnableEXT.html>"]
cmd_set_stencil_test_enable( &self, command_buffer: vk::CommandBuffer, stencil_test_enable: bool, )161     pub unsafe fn cmd_set_stencil_test_enable(
162         &self,
163         command_buffer: vk::CommandBuffer,
164         stencil_test_enable: bool,
165     ) {
166         self.extended_dynamic_state_fn
167             .cmd_set_stencil_test_enable_ext(command_buffer, stencil_test_enable.into())
168     }
169 
170     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdSetStencilOpEXT.html>"]
cmd_set_stencil_op( &self, command_buffer: vk::CommandBuffer, face_mask: vk::StencilFaceFlags, fail_op: vk::StencilOp, pass_op: vk::StencilOp, depth_fail_op: vk::StencilOp, compare_op: vk::CompareOp, )171     pub unsafe fn cmd_set_stencil_op(
172         &self,
173         command_buffer: vk::CommandBuffer,
174         face_mask: vk::StencilFaceFlags,
175         fail_op: vk::StencilOp,
176         pass_op: vk::StencilOp,
177         depth_fail_op: vk::StencilOp,
178         compare_op: vk::CompareOp,
179     ) {
180         self.extended_dynamic_state_fn.cmd_set_stencil_op_ext(
181             command_buffer,
182             face_mask,
183             fail_op,
184             pass_op,
185             depth_fail_op,
186             compare_op,
187         )
188     }
189 
fp(&self) -> &vk::ExtExtendedDynamicStateFn190     pub fn fp(&self) -> &vk::ExtExtendedDynamicStateFn {
191         &self.extended_dynamic_state_fn
192     }
193 
instance(&self) -> vk::Instance194     pub fn instance(&self) -> vk::Instance {
195         self.handle
196     }
197 }
198