• 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 
6 /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html>
7 #[derive(Clone)]
8 pub struct ExtendedDynamicState3 {
9     fp: vk::ExtExtendedDynamicState3Fn,
10 }
11 
12 impl ExtendedDynamicState3 {
new(instance: &Instance, device: &Device) -> Self13     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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetTessellationDomainOriginEXT.html>
21     #[inline]
cmd_set_tessellation_domain_origin( &self, command_buffer: vk::CommandBuffer, domain_origin: vk::TessellationDomainOrigin, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClampEnableEXT.html>
31     #[inline]
cmd_set_depth_clamp_enable( &self, command_buffer: vk::CommandBuffer, depth_clamp_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPolygonModeEXT.html>
41     #[inline]
cmd_set_polygon_mode( &self, command_buffer: vk::CommandBuffer, polygon_mode: vk::PolygonMode, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationSamplesEXT.html>
51     #[inline]
cmd_set_rasterization_samples( &self, command_buffer: vk::CommandBuffer, rasterization_samples: vk::SampleCountFlags, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleMaskEXT.html>
61     #[inline]
cmd_set_sample_mask( &self, command_buffer: vk::CommandBuffer, samples: vk::SampleCountFlags, sample_mask: &[vk::SampleMask], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetAlphaToCoverageEnableEXT.html>
77     #[inline]
cmd_set_alpha_to_coverage_enable( &self, command_buffer: vk::CommandBuffer, alpha_to_coverage_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetAlphaToOneEnableEXT.html>
90     #[inline]
cmd_set_alpha_to_one_enable( &self, command_buffer: vk::CommandBuffer, alpha_to_one_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLogicOpEnableEXT.html>
100     #[inline]
cmd_set_logic_op_enable( &self, command_buffer: vk::CommandBuffer, logic_op_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEnableEXT.html>
110     #[inline]
cmd_set_color_blend_enable( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_blend_enables: &[vk::Bool32], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEquationEXT.html>
126     #[inline]
cmd_set_color_blend_equation( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_blend_equations: &[vk::ColorBlendEquationEXT], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorWriteMaskEXT.html>
142     #[inline]
cmd_set_color_write_mask( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_write_masks: &[vk::ColorComponentFlags], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationStreamEXT.html>
158     #[inline]
cmd_set_rasterization_stream( &self, command_buffer: vk::CommandBuffer, rasterization_stream: u32, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetConservativeRasterizationModeEXT.html>
168     #[inline]
cmd_set_conservative_rasterization_mode( &self, command_buffer: vk::CommandBuffer, conservative_rasterization_mode: vk::ConservativeRasterizationModeEXT, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html>
181     #[inline]
cmd_set_extra_primitive_overestimation_size( &self, command_buffer: vk::CommandBuffer, extra_primitive_overestimation_size: f32, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClipEnableEXT.html>
194     #[inline]
cmd_set_depth_clip_enable( &self, command_buffer: vk::CommandBuffer, depth_clip_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleLocationsEnableEXT.html>
204     #[inline]
cmd_set_sample_locations_enable( &self, command_buffer: vk::CommandBuffer, sample_locations_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendAdvancedEXT.html>
217     #[inline]
cmd_set_color_blend_advanced( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_blend_advanced: &[vk::ColorBlendAdvancedEXT], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetProvokingVertexModeEXT.html>
233     #[inline]
cmd_set_provoking_vertex_mode( &self, command_buffer: vk::CommandBuffer, provoking_vertex_mode: vk::ProvokingVertexModeEXT, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineRasterizationModeEXT.html>
243     #[inline]
cmd_set_line_rasterization_mode( &self, command_buffer: vk::CommandBuffer, line_rasterization_mode: vk::LineRasterizationModeEXT, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineStippleEnableEXT.html>
253     #[inline]
cmd_set_line_stipple_enable( &self, command_buffer: vk::CommandBuffer, stippled_line_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html>
263     #[inline]
cmd_set_depth_clip_negative_one_to_one( &self, command_buffer: vk::CommandBuffer, negative_one_to_one: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportWScalingEnableNV.html>
276     #[inline]
cmd_set_viewport_w_scaling_enable_nv( &self, command_buffer: vk::CommandBuffer, viewport_w_scaling_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportSwizzleNV.html>
289     #[inline]
cmd_set_viewport_swizzle_nv( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, viewport_swizzles: &[vk::ViewportSwizzleNV], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageToColorEnableNV.html>
305     #[inline]
cmd_set_coverage_to_color_enable_nv( &self, command_buffer: vk::CommandBuffer, coverage_to_color_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageToColorLocationNV.html>
318     #[inline]
cmd_set_coverage_to_color_location_nv( &self, command_buffer: vk::CommandBuffer, coverage_to_color_location: u32, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationModeNV.html>
328     #[inline]
cmd_set_coverage_modulation_mode_nv( &self, command_buffer: vk::CommandBuffer, coverage_modulation_mode: vk::CoverageModulationModeNV, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationTableEnableNV.html>
338     #[inline]
cmd_set_coverage_modulation_table_enable_nv( &self, command_buffer: vk::CommandBuffer, coverage_modulation_table_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationTableNV.html>
351     #[inline]
cmd_set_coverage_modulation_table_nv( &self, command_buffer: vk::CommandBuffer, coverage_modulation_table: &[f32], )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetShadingRateImageEnableNV.html>
365     #[inline]
cmd_set_shading_rate_image_enable_nv( &self, command_buffer: vk::CommandBuffer, shading_rate_image_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html>
378     #[inline]
cmd_set_representative_fragment_test_enable_nv( &self, command_buffer: vk::CommandBuffer, representative_fragment_test_enable: bool, )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     /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageReductionModeNV.html>
391     #[inline]
cmd_set_coverage_reduction_mode_nv( &self, command_buffer: vk::CommandBuffer, coverage_reduction_mode: vk::CoverageReductionModeNV, )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]
name() -> &'static CStr401     pub const fn name() -> &'static CStr {
402         vk::ExtExtendedDynamicState3Fn::name()
403     }
404 
405     #[inline]
fp(&self) -> &vk::ExtExtendedDynamicState3Fn406     pub fn fp(&self) -> &vk::ExtExtendedDynamicState3Fn {
407         &self.fp
408     }
409 }
410