1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::CStr;
4use std::mem;
5
6#[derive(Clone)]
8pub struct ExtendedDynamicState3 {
9 fp: vk::ExtExtendedDynamicState3Fn,
10}
11
12impl ExtendedDynamicState3 {
13 pub fn new(instance: &Instance, device: &Device) -> Self {
14 let fp = vk::ExtExtendedDynamicState3Fn::load(|name| unsafe {
15 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
16 });
17 Self { fp }
18 }
19
20 #[inline]
22 pub unsafe fn cmd_set_tessellation_domain_origin(
23 &self,
24 command_buffer: vk::CommandBuffer,
25 domain_origin: vk::TessellationDomainOrigin,
26 ) {
27 (self.fp.cmd_set_tessellation_domain_origin_ext)(command_buffer, domain_origin)
28 }
29
30 #[inline]
32 pub unsafe fn cmd_set_depth_clamp_enable(
33 &self,
34 command_buffer: vk::CommandBuffer,
35 depth_clamp_enable: bool,
36 ) {
37 (self.fp.cmd_set_depth_clamp_enable_ext)(command_buffer, depth_clamp_enable.into())
38 }
39
40 #[inline]
42 pub unsafe fn cmd_set_polygon_mode(
43 &self,
44 command_buffer: vk::CommandBuffer,
45 polygon_mode: vk::PolygonMode,
46 ) {
47 (self.fp.cmd_set_polygon_mode_ext)(command_buffer, polygon_mode)
48 }
49
50 #[inline]
52 pub unsafe fn cmd_set_rasterization_samples(
53 &self,
54 command_buffer: vk::CommandBuffer,
55 rasterization_samples: vk::SampleCountFlags,
56 ) {
57 (self.fp.cmd_set_rasterization_samples_ext)(command_buffer, rasterization_samples)
58 }
59
60 #[inline]
62 pub unsafe fn cmd_set_sample_mask(
63 &self,
64 command_buffer: vk::CommandBuffer,
65 samples: vk::SampleCountFlags,
66 sample_mask: &[vk::SampleMask],
67 ) {
68 assert!(
69 samples.as_raw().is_power_of_two(),
70 "Only one SampleCount bit must be set"
71 );
72 assert_eq!(samples.as_raw() as usize / 32, sample_mask.len());
73 (self.fp.cmd_set_sample_mask_ext)(command_buffer, samples, sample_mask.as_ptr())
74 }
75
76 #[inline]
78 pub unsafe fn cmd_set_alpha_to_coverage_enable(
79 &self,
80 command_buffer: vk::CommandBuffer,
81 alpha_to_coverage_enable: bool,
82 ) {
83 (self.fp.cmd_set_alpha_to_coverage_enable_ext)(
84 command_buffer,
85 alpha_to_coverage_enable.into(),
86 )
87 }
88
89 #[inline]
91 pub unsafe fn cmd_set_alpha_to_one_enable(
92 &self,
93 command_buffer: vk::CommandBuffer,
94 alpha_to_one_enable: bool,
95 ) {
96 (self.fp.cmd_set_alpha_to_one_enable_ext)(command_buffer, alpha_to_one_enable.into())
97 }
98
99 #[inline]
101 pub unsafe fn cmd_set_logic_op_enable(
102 &self,
103 command_buffer: vk::CommandBuffer,
104 logic_op_enable: bool,
105 ) {
106 (self.fp.cmd_set_logic_op_enable_ext)(command_buffer, logic_op_enable.into())
107 }
108
109 #[inline]
111 pub unsafe fn cmd_set_color_blend_enable(
112 &self,
113 command_buffer: vk::CommandBuffer,
114 first_attachment: u32,
115 color_blend_enables: &[vk::Bool32],
116 ) {
117 (self.fp.cmd_set_color_blend_enable_ext)(
118 command_buffer,
119 first_attachment,
120 color_blend_enables.len() as u32,
121 color_blend_enables.as_ptr(),
122 )
123 }
124
125 #[inline]
127 pub unsafe fn cmd_set_color_blend_equation(
128 &self,
129 command_buffer: vk::CommandBuffer,
130 first_attachment: u32,
131 color_blend_equations: &[vk::ColorBlendEquationEXT],
132 ) {
133 (self.fp.cmd_set_color_blend_equation_ext)(
134 command_buffer,
135 first_attachment,
136 color_blend_equations.len() as u32,
137 color_blend_equations.as_ptr(),
138 )
139 }
140
141 #[inline]
143 pub unsafe fn cmd_set_color_write_mask(
144 &self,
145 command_buffer: vk::CommandBuffer,
146 first_attachment: u32,
147 color_write_masks: &[vk::ColorComponentFlags],
148 ) {
149 (self.fp.cmd_set_color_write_mask_ext)(
150 command_buffer,
151 first_attachment,
152 color_write_masks.len() as u32,
153 color_write_masks.as_ptr(),
154 )
155 }
156
157 #[inline]
159 pub unsafe fn cmd_set_rasterization_stream(
160 &self,
161 command_buffer: vk::CommandBuffer,
162 rasterization_stream: u32,
163 ) {
164 (self.fp.cmd_set_rasterization_stream_ext)(command_buffer, rasterization_stream)
165 }
166
167 #[inline]
169 pub unsafe fn cmd_set_conservative_rasterization_mode(
170 &self,
171 command_buffer: vk::CommandBuffer,
172 conservative_rasterization_mode: vk::ConservativeRasterizationModeEXT,
173 ) {
174 (self.fp.cmd_set_conservative_rasterization_mode_ext)(
175 command_buffer,
176 conservative_rasterization_mode,
177 )
178 }
179
180 #[inline]
182 pub unsafe fn cmd_set_extra_primitive_overestimation_size(
183 &self,
184 command_buffer: vk::CommandBuffer,
185 extra_primitive_overestimation_size: f32,
186 ) {
187 (self.fp.cmd_set_extra_primitive_overestimation_size_ext)(
188 command_buffer,
189 extra_primitive_overestimation_size,
190 )
191 }
192
193 #[inline]
195 pub unsafe fn cmd_set_depth_clip_enable(
196 &self,
197 command_buffer: vk::CommandBuffer,
198 depth_clip_enable: bool,
199 ) {
200 (self.fp.cmd_set_depth_clip_enable_ext)(command_buffer, depth_clip_enable.into())
201 }
202
203 #[inline]
205 pub unsafe fn cmd_set_sample_locations_enable(
206 &self,
207 command_buffer: vk::CommandBuffer,
208 sample_locations_enable: bool,
209 ) {
210 (self.fp.cmd_set_sample_locations_enable_ext)(
211 command_buffer,
212 sample_locations_enable.into(),
213 )
214 }
215
216 #[inline]
218 pub unsafe fn cmd_set_color_blend_advanced(
219 &self,
220 command_buffer: vk::CommandBuffer,
221 first_attachment: u32,
222 color_blend_advanced: &[vk::ColorBlendAdvancedEXT],
223 ) {
224 (self.fp.cmd_set_color_blend_advanced_ext)(
225 command_buffer,
226 first_attachment,
227 color_blend_advanced.len() as u32,
228 color_blend_advanced.as_ptr(),
229 )
230 }
231
232 #[inline]
234 pub unsafe fn cmd_set_provoking_vertex_mode(
235 &self,
236 command_buffer: vk::CommandBuffer,
237 provoking_vertex_mode: vk::ProvokingVertexModeEXT,
238 ) {
239 (self.fp.cmd_set_provoking_vertex_mode_ext)(command_buffer, provoking_vertex_mode)
240 }
241
242 #[inline]
244 pub unsafe fn cmd_set_line_rasterization_mode(
245 &self,
246 command_buffer: vk::CommandBuffer,
247 line_rasterization_mode: vk::LineRasterizationModeEXT,
248 ) {
249 (self.fp.cmd_set_line_rasterization_mode_ext)(command_buffer, line_rasterization_mode)
250 }
251
252 #[inline]
254 pub unsafe fn cmd_set_line_stipple_enable(
255 &self,
256 command_buffer: vk::CommandBuffer,
257 stippled_line_enable: bool,
258 ) {
259 (self.fp.cmd_set_line_stipple_enable_ext)(command_buffer, stippled_line_enable.into())
260 }
261
262 #[inline]
264 pub unsafe fn cmd_set_depth_clip_negative_one_to_one(
265 &self,
266 command_buffer: vk::CommandBuffer,
267 negative_one_to_one: bool,
268 ) {
269 (self.fp.cmd_set_depth_clip_negative_one_to_one_ext)(
270 command_buffer,
271 negative_one_to_one.into(),
272 )
273 }
274
275 #[inline]
277 pub unsafe fn cmd_set_viewport_w_scaling_enable_nv(
278 &self,
279 command_buffer: vk::CommandBuffer,
280 viewport_w_scaling_enable: bool,
281 ) {
282 (self.fp.cmd_set_viewport_w_scaling_enable_nv)(
283 command_buffer,
284 viewport_w_scaling_enable.into(),
285 )
286 }
287
288 #[inline]
290 pub unsafe fn cmd_set_viewport_swizzle_nv(
291 &self,
292 command_buffer: vk::CommandBuffer,
293 first_attachment: u32,
294 viewport_swizzles: &[vk::ViewportSwizzleNV],
295 ) {
296 (self.fp.cmd_set_viewport_swizzle_nv)(
297 command_buffer,
298 first_attachment,
299 viewport_swizzles.len() as u32,
300 viewport_swizzles.as_ptr(),
301 )
302 }
303
304 #[inline]
306 pub unsafe fn cmd_set_coverage_to_color_enable_nv(
307 &self,
308 command_buffer: vk::CommandBuffer,
309 coverage_to_color_enable: bool,
310 ) {
311 (self.fp.cmd_set_coverage_to_color_enable_nv)(
312 command_buffer,
313 coverage_to_color_enable.into(),
314 )
315 }
316
317 #[inline]
319 pub unsafe fn cmd_set_coverage_to_color_location_nv(
320 &self,
321 command_buffer: vk::CommandBuffer,
322 coverage_to_color_location: u32,
323 ) {
324 (self.fp.cmd_set_coverage_to_color_location_nv)(command_buffer, coverage_to_color_location)
325 }
326
327 #[inline]
329 pub unsafe fn cmd_set_coverage_modulation_mode_nv(
330 &self,
331 command_buffer: vk::CommandBuffer,
332 coverage_modulation_mode: vk::CoverageModulationModeNV,
333 ) {
334 (self.fp.cmd_set_coverage_modulation_mode_nv)(command_buffer, coverage_modulation_mode)
335 }
336
337 #[inline]
339 pub unsafe fn cmd_set_coverage_modulation_table_enable_nv(
340 &self,
341 command_buffer: vk::CommandBuffer,
342 coverage_modulation_table_enable: bool,
343 ) {
344 (self.fp.cmd_set_coverage_modulation_table_enable_nv)(
345 command_buffer,
346 coverage_modulation_table_enable.into(),
347 )
348 }
349
350 #[inline]
352 pub unsafe fn cmd_set_coverage_modulation_table_nv(
353 &self,
354 command_buffer: vk::CommandBuffer,
355 coverage_modulation_table: &[f32],
356 ) {
357 (self.fp.cmd_set_coverage_modulation_table_nv)(
358 command_buffer,
359 coverage_modulation_table.len() as u32,
360 coverage_modulation_table.as_ptr(),
361 )
362 }
363
364 #[inline]
366 pub unsafe fn cmd_set_shading_rate_image_enable_nv(
367 &self,
368 command_buffer: vk::CommandBuffer,
369 shading_rate_image_enable: bool,
370 ) {
371 (self.fp.cmd_set_shading_rate_image_enable_nv)(
372 command_buffer,
373 shading_rate_image_enable.into(),
374 )
375 }
376
377 #[inline]
379 pub unsafe fn cmd_set_representative_fragment_test_enable_nv(
380 &self,
381 command_buffer: vk::CommandBuffer,
382 representative_fragment_test_enable: bool,
383 ) {
384 (self.fp.cmd_set_representative_fragment_test_enable_nv)(
385 command_buffer,
386 representative_fragment_test_enable.into(),
387 )
388 }
389
390 #[inline]
392 pub unsafe fn cmd_set_coverage_reduction_mode_nv(
393 &self,
394 command_buffer: vk::CommandBuffer,
395 coverage_reduction_mode: vk::CoverageReductionModeNV,
396 ) {
397 (self.fp.cmd_set_coverage_reduction_mode_nv)(command_buffer, coverage_reduction_mode)
398 }
399
400 #[inline]
401 pub const fn name() -> &'static CStr {
402 vk::ExtExtendedDynamicState3Fn::name()
403 }
404
405 #[inline]
406 pub fn fp(&self) -> &vk::ExtExtendedDynamicState3Fn {
407 &self.fp
408 }
409}