ash/extensions/ext/
extended_dynamic_state3.rs

1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::CStr;
4use std::mem;
5
6/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html>
7#[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetTessellationDomainOriginEXT.html>
21    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClampEnableEXT.html>
31    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPolygonModeEXT.html>
41    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationSamplesEXT.html>
51    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleMaskEXT.html>
61    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetAlphaToCoverageEnableEXT.html>
77    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetAlphaToOneEnableEXT.html>
90    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLogicOpEnableEXT.html>
100    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEnableEXT.html>
110    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEquationEXT.html>
126    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorWriteMaskEXT.html>
142    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationStreamEXT.html>
158    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetConservativeRasterizationModeEXT.html>
168    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html>
181    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClipEnableEXT.html>
194    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleLocationsEnableEXT.html>
204    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendAdvancedEXT.html>
217    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetProvokingVertexModeEXT.html>
233    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineRasterizationModeEXT.html>
243    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineStippleEnableEXT.html>
253    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html>
263    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportWScalingEnableNV.html>
276    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportSwizzleNV.html>
289    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageToColorEnableNV.html>
305    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageToColorLocationNV.html>
318    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationModeNV.html>
328    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationTableEnableNV.html>
338    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationTableNV.html>
351    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetShadingRateImageEnableNV.html>
365    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html>
378    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageReductionModeNV.html>
391    #[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}