erupt/generated/extensions/
nv_device_generated_commands.rs

1// DO NOT EDIT: @generated by erupt's generator
2///<s>Vulkan Manual Page</s> · Constant
3#[doc(alias = "VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION")]
4pub const NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION: u32 = 3;
5///<s>Vulkan Manual Page</s> · Constant
6#[doc(alias = "VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME")]
7pub const NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME: *const std::os::raw::c_char = crate::cstr!(
8    "VK_NV_device_generated_commands"
9);
10///<s>Vulkan Manual Page</s> · Constant
11pub const FN_CMD_EXECUTE_GENERATED_COMMANDS_NV: *const std::os::raw::c_char = crate::cstr!(
12    "vkCmdExecuteGeneratedCommandsNV"
13);
14///<s>Vulkan Manual Page</s> · Constant
15pub const FN_CMD_PREPROCESS_GENERATED_COMMANDS_NV: *const std::os::raw::c_char = crate::cstr!(
16    "vkCmdPreprocessGeneratedCommandsNV"
17);
18///<s>Vulkan Manual Page</s> · Constant
19pub const FN_CMD_BIND_PIPELINE_SHADER_GROUP_NV: *const std::os::raw::c_char = crate::cstr!(
20    "vkCmdBindPipelineShaderGroupNV"
21);
22///<s>Vulkan Manual Page</s> · Constant
23pub const FN_GET_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_NV: *const std::os::raw::c_char = crate::cstr!(
24    "vkGetGeneratedCommandsMemoryRequirementsNV"
25);
26///<s>Vulkan Manual Page</s> · Constant
27pub const FN_CREATE_INDIRECT_COMMANDS_LAYOUT_NV: *const std::os::raw::c_char = crate::cstr!(
28    "vkCreateIndirectCommandsLayoutNV"
29);
30///<s>Vulkan Manual Page</s> · Constant
31pub const FN_DESTROY_INDIRECT_COMMANDS_LAYOUT_NV: *const std::os::raw::c_char = crate::cstr!(
32    "vkDestroyIndirectCommandsLayoutNV"
33);
34crate::non_dispatchable_handle!(
35    IndirectCommandsLayoutNV, INDIRECT_COMMANDS_LAYOUT_NV,
36    "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutNV.html) · Non-dispatchable Handle",
37    "VkIndirectCommandsLayoutNV"
38);
39///Provided by [`crate::extensions::nv_device_generated_commands`]
40impl crate::vk1_0::AccessFlagBits {
41    pub const COMMAND_PREPROCESS_READ_NV: Self = Self(131072);
42    pub const COMMAND_PREPROCESS_WRITE_NV: Self = Self(262144);
43}
44///Provided by [`crate::extensions::nv_device_generated_commands`]
45impl crate::vk1_0::PipelineCreateFlagBits {
46    pub const INDIRECT_BINDABLE_NV: Self = Self(262144);
47}
48///Provided by [`crate::extensions::nv_device_generated_commands`]
49impl crate::vk1_0::StructureType {
50    pub const PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV: Self = Self(
51        1000277000,
52    );
53    pub const GRAPHICS_SHADER_GROUP_CREATE_INFO_NV: Self = Self(1000277001);
54    pub const GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV: Self = Self(1000277002);
55    pub const INDIRECT_COMMANDS_LAYOUT_TOKEN_NV: Self = Self(1000277003);
56    pub const INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV: Self = Self(1000277004);
57    pub const GENERATED_COMMANDS_INFO_NV: Self = Self(1000277005);
58    pub const GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV: Self = Self(1000277006);
59    pub const PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV: Self = Self(
60        1000277007,
61    );
62}
63///Provided by [`crate::extensions::nv_device_generated_commands`]
64impl crate::vk1_0::PipelineStageFlagBits {
65    pub const COMMAND_PREPROCESS_NV: Self = Self(131072);
66}
67///Provided by [`crate::extensions::nv_device_generated_commands`]
68impl crate::vk1_0::ObjectType {
69    pub const INDIRECT_COMMANDS_LAYOUT_NV: Self = Self(1000277000);
70}
71bitflags::bitflags! {
72    #[doc =
73    "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutUsageFlagsNV.html) · Bitmask of [`IndirectCommandsLayoutUsageFlagBitsNV`]"]
74    #[doc(alias = "VkIndirectCommandsLayoutUsageFlagsNV")] #[derive(Default)]
75    #[repr(transparent)] pub struct IndirectCommandsLayoutUsageFlagsNV : u32 { const
76    EXPLICIT_PREPROCESS_NV =
77    IndirectCommandsLayoutUsageFlagBitsNV::EXPLICIT_PREPROCESS_NV.0; const
78    INDEXED_SEQUENCES_NV = IndirectCommandsLayoutUsageFlagBitsNV::INDEXED_SEQUENCES_NV.0;
79    const UNORDERED_SEQUENCES_NV =
80    IndirectCommandsLayoutUsageFlagBitsNV::UNORDERED_SEQUENCES_NV.0; }
81}
82///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutUsageFlagBitsNV.html) · Bits enum of [`IndirectCommandsLayoutUsageFlagsNV`]
83#[doc(alias = "VkIndirectCommandsLayoutUsageFlagBitsNV")]
84#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
85#[repr(transparent)]
86pub struct IndirectCommandsLayoutUsageFlagBitsNV(pub u32);
87impl IndirectCommandsLayoutUsageFlagBitsNV {
88    #[inline]
89    ///Converts this enum variant to the corresponding bitmask
90    pub const fn bitmask(&self) -> IndirectCommandsLayoutUsageFlagsNV {
91        IndirectCommandsLayoutUsageFlagsNV::from_bits_truncate(self.0)
92    }
93}
94impl std::fmt::Debug for IndirectCommandsLayoutUsageFlagBitsNV {
95    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
96        f.write_str(
97            match self {
98                &Self::EXPLICIT_PREPROCESS_NV => "EXPLICIT_PREPROCESS_NV",
99                &Self::INDEXED_SEQUENCES_NV => "INDEXED_SEQUENCES_NV",
100                &Self::UNORDERED_SEQUENCES_NV => "UNORDERED_SEQUENCES_NV",
101                _ => "(unknown variant)",
102            },
103        )
104    }
105}
106///Provided by [`crate::extensions::nv_device_generated_commands`]
107impl crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutUsageFlagBitsNV {
108    pub const EXPLICIT_PREPROCESS_NV: Self = Self(1);
109    pub const INDEXED_SEQUENCES_NV: Self = Self(2);
110    pub const UNORDERED_SEQUENCES_NV: Self = Self(4);
111}
112///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsTokenTypeNV.html) · Enum
113#[doc(alias = "VkIndirectCommandsTokenTypeNV")]
114#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
115#[repr(transparent)]
116pub struct IndirectCommandsTokenTypeNV(pub i32);
117impl std::fmt::Debug for IndirectCommandsTokenTypeNV {
118    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
119        f.write_str(
120            match self {
121                &Self::SHADER_GROUP_NV => "SHADER_GROUP_NV",
122                &Self::STATE_FLAGS_NV => "STATE_FLAGS_NV",
123                &Self::INDEX_BUFFER_NV => "INDEX_BUFFER_NV",
124                &Self::VERTEX_BUFFER_NV => "VERTEX_BUFFER_NV",
125                &Self::PUSH_CONSTANT_NV => "PUSH_CONSTANT_NV",
126                &Self::DRAW_INDEXED_NV => "DRAW_INDEXED_NV",
127                &Self::DRAW_NV => "DRAW_NV",
128                &Self::DRAW_TASKS_NV => "DRAW_TASKS_NV",
129                _ => "(unknown variant)",
130            },
131        )
132    }
133}
134///Provided by [`crate::extensions::nv_device_generated_commands`]
135impl crate::extensions::nv_device_generated_commands::IndirectCommandsTokenTypeNV {
136    pub const SHADER_GROUP_NV: Self = Self(0);
137    pub const STATE_FLAGS_NV: Self = Self(1);
138    pub const INDEX_BUFFER_NV: Self = Self(2);
139    pub const VERTEX_BUFFER_NV: Self = Self(3);
140    pub const PUSH_CONSTANT_NV: Self = Self(4);
141    pub const DRAW_INDEXED_NV: Self = Self(5);
142    pub const DRAW_NV: Self = Self(6);
143    pub const DRAW_TASKS_NV: Self = Self(7);
144}
145bitflags::bitflags! {
146    #[doc =
147    "[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectStateFlagsNV.html) · Bitmask of [`IndirectStateFlagBitsNV`]"]
148    #[doc(alias = "VkIndirectStateFlagsNV")] #[derive(Default)] #[repr(transparent)] pub
149    struct IndirectStateFlagsNV : u32 { const FLAG_FRONTFACE_NV =
150    IndirectStateFlagBitsNV::FLAG_FRONTFACE_NV.0; }
151}
152///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectStateFlagBitsNV.html) · Bits enum of [`IndirectStateFlagsNV`]
153#[doc(alias = "VkIndirectStateFlagBitsNV")]
154#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Ord, PartialOrd)]
155#[repr(transparent)]
156pub struct IndirectStateFlagBitsNV(pub u32);
157impl IndirectStateFlagBitsNV {
158    #[inline]
159    ///Converts this enum variant to the corresponding bitmask
160    pub const fn bitmask(&self) -> IndirectStateFlagsNV {
161        IndirectStateFlagsNV::from_bits_truncate(self.0)
162    }
163}
164impl std::fmt::Debug for IndirectStateFlagBitsNV {
165    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
166        f.write_str(
167            match self {
168                &Self::FLAG_FRONTFACE_NV => "FLAG_FRONTFACE_NV",
169                _ => "(unknown variant)",
170            },
171        )
172    }
173}
174///Provided by [`crate::extensions::nv_device_generated_commands`]
175impl crate::extensions::nv_device_generated_commands::IndirectStateFlagBitsNV {
176    pub const FLAG_FRONTFACE_NV: Self = Self(1);
177}
178///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdExecuteGeneratedCommandsNV.html) · Function
179#[allow(non_camel_case_types)]
180pub type PFN_vkCmdExecuteGeneratedCommandsNV = unsafe extern "system" fn(
181    command_buffer: crate::vk1_0::CommandBuffer,
182    is_preprocessed: crate::vk1_0::Bool32,
183    p_generated_commands_info: *const crate::extensions::nv_device_generated_commands::GeneratedCommandsInfoNV,
184) -> ();
185///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPreprocessGeneratedCommandsNV.html) · Function
186#[allow(non_camel_case_types)]
187pub type PFN_vkCmdPreprocessGeneratedCommandsNV = unsafe extern "system" fn(
188    command_buffer: crate::vk1_0::CommandBuffer,
189    p_generated_commands_info: *const crate::extensions::nv_device_generated_commands::GeneratedCommandsInfoNV,
190) -> ();
191///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindPipelineShaderGroupNV.html) · Function
192#[allow(non_camel_case_types)]
193pub type PFN_vkCmdBindPipelineShaderGroupNV = unsafe extern "system" fn(
194    command_buffer: crate::vk1_0::CommandBuffer,
195    pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
196    pipeline: crate::vk1_0::Pipeline,
197    group_index: u32,
198) -> ();
199///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html) · Function
200#[allow(non_camel_case_types)]
201pub type PFN_vkGetGeneratedCommandsMemoryRequirementsNV = unsafe extern "system" fn(
202    device: crate::vk1_0::Device,
203    p_info: *const crate::extensions::nv_device_generated_commands::GeneratedCommandsMemoryRequirementsInfoNV,
204    p_memory_requirements: *mut crate::vk1_1::MemoryRequirements2,
205) -> ();
206///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateIndirectCommandsLayoutNV.html) · Function
207#[allow(non_camel_case_types)]
208pub type PFN_vkCreateIndirectCommandsLayoutNV = unsafe extern "system" fn(
209    device: crate::vk1_0::Device,
210    p_create_info: *const crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutCreateInfoNV,
211    p_allocator: *const crate::vk1_0::AllocationCallbacks,
212    p_indirect_commands_layout: *mut crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
213) -> crate::vk1_0::Result;
214///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyIndirectCommandsLayoutNV.html) · Function
215#[allow(non_camel_case_types)]
216pub type PFN_vkDestroyIndirectCommandsLayoutNV = unsafe extern "system" fn(
217    device: crate::vk1_0::Device,
218    indirect_commands_layout: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
219    p_allocator: *const crate::vk1_0::AllocationCallbacks,
220) -> ();
221impl<'a> crate::ExtendableFrom<'a, PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>
222for crate::vk1_0::DeviceCreateInfoBuilder<'a> {}
223impl<
224    'a,
225> crate::ExtendableFrom<'a, PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'_>>
226for crate::vk1_0::DeviceCreateInfoBuilder<'a> {}
227impl<'a> crate::ExtendableFrom<'a, GraphicsPipelineShaderGroupsCreateInfoNV>
228for crate::vk1_0::GraphicsPipelineCreateInfoBuilder<'a> {}
229impl<'a> crate::ExtendableFrom<'a, GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'_>>
230for crate::vk1_0::GraphicsPipelineCreateInfoBuilder<'a> {}
231///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.html) · Structure
232#[doc(alias = "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV")]
233#[derive(Copy, Clone)]
234#[repr(C)]
235pub struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
236    pub s_type: crate::vk1_0::StructureType,
237    pub p_next: *mut std::ffi::c_void,
238    pub device_generated_commands: crate::vk1_0::Bool32,
239}
240impl PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
241    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV;
242}
243impl Default for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
244    fn default() -> Self {
245        Self {
246            s_type: Self::STRUCTURE_TYPE,
247            p_next: std::ptr::null_mut(),
248            device_generated_commands: Default::default(),
249        }
250    }
251}
252impl std::fmt::Debug for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
253    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
254        f.debug_struct("PhysicalDeviceDeviceGeneratedCommandsFeaturesNV")
255            .field("s_type", &self.s_type)
256            .field("p_next", &self.p_next)
257            .field("device_generated_commands", &(self.device_generated_commands != 0))
258            .finish()
259    }
260}
261impl PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
262    #[inline]
263    pub fn into_builder<'a>(
264        self,
265    ) -> PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
266        PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder(
267            self,
268            std::marker::PhantomData,
269        )
270    }
271}
272#[derive(Copy, Clone)]
273///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.html) · Builder of [`PhysicalDeviceDeviceGeneratedCommandsFeaturesNV`]
274#[repr(transparent)]
275pub struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a>(
276    PhysicalDeviceDeviceGeneratedCommandsFeaturesNV,
277    std::marker::PhantomData<&'a ()>,
278);
279impl<'a> PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
280    #[inline]
281    pub fn new() -> PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
282        PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder(
283            Default::default(),
284            std::marker::PhantomData,
285        )
286    }
287    #[inline]
288    #[must_use]
289    pub fn device_generated_commands(mut self, device_generated_commands: bool) -> Self {
290        self.0.device_generated_commands = device_generated_commands as _;
291        self
292    }
293    #[inline]
294    /// Discards all lifetime information.
295    /// Use the `Deref` and `DerefMut` implementations if possible.
296    pub fn build_dangling(self) -> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
297        self.0
298    }
299}
300impl<'a> std::default::Default
301for PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
302    fn default() -> PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
303        Self::new()
304    }
305}
306impl<'a> std::fmt::Debug for PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
307    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
308        std::fmt::Debug::fmt(&self.0, f)
309    }
310}
311impl<'a> std::ops::Deref for PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
312    type Target = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
313    fn deref(&self) -> &Self::Target {
314        &self.0
315    }
316}
317impl<'a> std::ops::DerefMut
318for PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'a> {
319    fn deref_mut(&mut self) -> &mut Self::Target {
320        &mut self.0
321    }
322}
323///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.html) · Structure
324#[doc(alias = "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV")]
325#[derive(Copy, Clone)]
326#[repr(C)]
327pub struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
328    pub s_type: crate::vk1_0::StructureType,
329    pub p_next: *mut std::ffi::c_void,
330    pub max_graphics_shader_group_count: u32,
331    pub max_indirect_sequence_count: u32,
332    pub max_indirect_commands_token_count: u32,
333    pub max_indirect_commands_stream_count: u32,
334    pub max_indirect_commands_token_offset: u32,
335    pub max_indirect_commands_stream_stride: u32,
336    pub min_sequences_count_buffer_offset_alignment: u32,
337    pub min_sequences_index_buffer_offset_alignment: u32,
338    pub min_indirect_commands_buffer_offset_alignment: u32,
339}
340impl PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
341    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV;
342}
343impl Default for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
344    fn default() -> Self {
345        Self {
346            s_type: Self::STRUCTURE_TYPE,
347            p_next: std::ptr::null_mut(),
348            max_graphics_shader_group_count: Default::default(),
349            max_indirect_sequence_count: Default::default(),
350            max_indirect_commands_token_count: Default::default(),
351            max_indirect_commands_stream_count: Default::default(),
352            max_indirect_commands_token_offset: Default::default(),
353            max_indirect_commands_stream_stride: Default::default(),
354            min_sequences_count_buffer_offset_alignment: Default::default(),
355            min_sequences_index_buffer_offset_alignment: Default::default(),
356            min_indirect_commands_buffer_offset_alignment: Default::default(),
357        }
358    }
359}
360impl std::fmt::Debug for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
361    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
362        f.debug_struct("PhysicalDeviceDeviceGeneratedCommandsPropertiesNV")
363            .field("s_type", &self.s_type)
364            .field("p_next", &self.p_next)
365            .field(
366                "max_graphics_shader_group_count",
367                &self.max_graphics_shader_group_count,
368            )
369            .field("max_indirect_sequence_count", &self.max_indirect_sequence_count)
370            .field(
371                "max_indirect_commands_token_count",
372                &self.max_indirect_commands_token_count,
373            )
374            .field(
375                "max_indirect_commands_stream_count",
376                &self.max_indirect_commands_stream_count,
377            )
378            .field(
379                "max_indirect_commands_token_offset",
380                &self.max_indirect_commands_token_offset,
381            )
382            .field(
383                "max_indirect_commands_stream_stride",
384                &self.max_indirect_commands_stream_stride,
385            )
386            .field(
387                "min_sequences_count_buffer_offset_alignment",
388                &self.min_sequences_count_buffer_offset_alignment,
389            )
390            .field(
391                "min_sequences_index_buffer_offset_alignment",
392                &self.min_sequences_index_buffer_offset_alignment,
393            )
394            .field(
395                "min_indirect_commands_buffer_offset_alignment",
396                &self.min_indirect_commands_buffer_offset_alignment,
397            )
398            .finish()
399    }
400}
401impl PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
402    #[inline]
403    pub fn into_builder<'a>(
404        self,
405    ) -> PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
406        PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder(
407            self,
408            std::marker::PhantomData,
409        )
410    }
411}
412#[derive(Copy, Clone)]
413///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.html) · Builder of [`PhysicalDeviceDeviceGeneratedCommandsPropertiesNV`]
414#[repr(transparent)]
415pub struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a>(
416    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV,
417    std::marker::PhantomData<&'a ()>,
418);
419impl<'a> PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
420    #[inline]
421    pub fn new() -> PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
422        PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder(
423            Default::default(),
424            std::marker::PhantomData,
425        )
426    }
427    #[inline]
428    #[must_use]
429    pub fn max_graphics_shader_group_count(
430        mut self,
431        max_graphics_shader_group_count: u32,
432    ) -> Self {
433        self.0.max_graphics_shader_group_count = max_graphics_shader_group_count as _;
434        self
435    }
436    #[inline]
437    #[must_use]
438    pub fn max_indirect_sequence_count(
439        mut self,
440        max_indirect_sequence_count: u32,
441    ) -> Self {
442        self.0.max_indirect_sequence_count = max_indirect_sequence_count as _;
443        self
444    }
445    #[inline]
446    #[must_use]
447    pub fn max_indirect_commands_token_count(
448        mut self,
449        max_indirect_commands_token_count: u32,
450    ) -> Self {
451        self
452            .0
453            .max_indirect_commands_token_count = max_indirect_commands_token_count as _;
454        self
455    }
456    #[inline]
457    #[must_use]
458    pub fn max_indirect_commands_stream_count(
459        mut self,
460        max_indirect_commands_stream_count: u32,
461    ) -> Self {
462        self
463            .0
464            .max_indirect_commands_stream_count = max_indirect_commands_stream_count
465            as _;
466        self
467    }
468    #[inline]
469    #[must_use]
470    pub fn max_indirect_commands_token_offset(
471        mut self,
472        max_indirect_commands_token_offset: u32,
473    ) -> Self {
474        self
475            .0
476            .max_indirect_commands_token_offset = max_indirect_commands_token_offset
477            as _;
478        self
479    }
480    #[inline]
481    #[must_use]
482    pub fn max_indirect_commands_stream_stride(
483        mut self,
484        max_indirect_commands_stream_stride: u32,
485    ) -> Self {
486        self
487            .0
488            .max_indirect_commands_stream_stride = max_indirect_commands_stream_stride
489            as _;
490        self
491    }
492    #[inline]
493    #[must_use]
494    pub fn min_sequences_count_buffer_offset_alignment(
495        mut self,
496        min_sequences_count_buffer_offset_alignment: u32,
497    ) -> Self {
498        self
499            .0
500            .min_sequences_count_buffer_offset_alignment = min_sequences_count_buffer_offset_alignment
501            as _;
502        self
503    }
504    #[inline]
505    #[must_use]
506    pub fn min_sequences_index_buffer_offset_alignment(
507        mut self,
508        min_sequences_index_buffer_offset_alignment: u32,
509    ) -> Self {
510        self
511            .0
512            .min_sequences_index_buffer_offset_alignment = min_sequences_index_buffer_offset_alignment
513            as _;
514        self
515    }
516    #[inline]
517    #[must_use]
518    pub fn min_indirect_commands_buffer_offset_alignment(
519        mut self,
520        min_indirect_commands_buffer_offset_alignment: u32,
521    ) -> Self {
522        self
523            .0
524            .min_indirect_commands_buffer_offset_alignment = min_indirect_commands_buffer_offset_alignment
525            as _;
526        self
527    }
528    #[inline]
529    /// Discards all lifetime information.
530    /// Use the `Deref` and `DerefMut` implementations if possible.
531    pub fn build_dangling(self) -> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
532        self.0
533    }
534}
535impl<'a> std::default::Default
536for PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
537    fn default() -> PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
538        Self::new()
539    }
540}
541impl<'a> std::fmt::Debug
542for PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
543    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
544        std::fmt::Debug::fmt(&self.0, f)
545    }
546}
547impl<'a> std::ops::Deref
548for PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
549    type Target = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV;
550    fn deref(&self) -> &Self::Target {
551        &self.0
552    }
553}
554impl<'a> std::ops::DerefMut
555for PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'a> {
556    fn deref_mut(&mut self) -> &mut Self::Target {
557        &mut self.0
558    }
559}
560///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGraphicsShaderGroupCreateInfoNV.html) · Structure
561#[doc(alias = "VkGraphicsShaderGroupCreateInfoNV")]
562#[derive(Copy, Clone)]
563#[repr(C)]
564pub struct GraphicsShaderGroupCreateInfoNV {
565    pub s_type: crate::vk1_0::StructureType,
566    pub p_next: *const std::ffi::c_void,
567    pub stage_count: u32,
568    pub p_stages: *const crate::vk1_0::PipelineShaderStageCreateInfo,
569    pub p_vertex_input_state: *const crate::vk1_0::PipelineVertexInputStateCreateInfo,
570    pub p_tessellation_state: *const crate::vk1_0::PipelineTessellationStateCreateInfo,
571}
572impl GraphicsShaderGroupCreateInfoNV {
573    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::GRAPHICS_SHADER_GROUP_CREATE_INFO_NV;
574}
575impl Default for GraphicsShaderGroupCreateInfoNV {
576    fn default() -> Self {
577        Self {
578            s_type: Self::STRUCTURE_TYPE,
579            p_next: std::ptr::null(),
580            stage_count: Default::default(),
581            p_stages: std::ptr::null(),
582            p_vertex_input_state: std::ptr::null(),
583            p_tessellation_state: std::ptr::null(),
584        }
585    }
586}
587impl std::fmt::Debug for GraphicsShaderGroupCreateInfoNV {
588    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
589        f.debug_struct("GraphicsShaderGroupCreateInfoNV")
590            .field("s_type", &self.s_type)
591            .field("p_next", &self.p_next)
592            .field("stage_count", &self.stage_count)
593            .field("p_stages", &self.p_stages)
594            .field("p_vertex_input_state", &self.p_vertex_input_state)
595            .field("p_tessellation_state", &self.p_tessellation_state)
596            .finish()
597    }
598}
599impl GraphicsShaderGroupCreateInfoNV {
600    #[inline]
601    pub fn into_builder<'a>(self) -> GraphicsShaderGroupCreateInfoNVBuilder<'a> {
602        GraphicsShaderGroupCreateInfoNVBuilder(self, std::marker::PhantomData)
603    }
604}
605#[derive(Copy, Clone)]
606///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGraphicsShaderGroupCreateInfoNV.html) · Builder of [`GraphicsShaderGroupCreateInfoNV`]
607#[repr(transparent)]
608pub struct GraphicsShaderGroupCreateInfoNVBuilder<'a>(
609    GraphicsShaderGroupCreateInfoNV,
610    std::marker::PhantomData<&'a ()>,
611);
612impl<'a> GraphicsShaderGroupCreateInfoNVBuilder<'a> {
613    #[inline]
614    pub fn new() -> GraphicsShaderGroupCreateInfoNVBuilder<'a> {
615        GraphicsShaderGroupCreateInfoNVBuilder(
616            Default::default(),
617            std::marker::PhantomData,
618        )
619    }
620    #[inline]
621    #[must_use]
622    pub fn stages(
623        mut self,
624        stages: &'a [crate::vk1_0::PipelineShaderStageCreateInfoBuilder],
625    ) -> Self {
626        self.0.p_stages = stages.as_ptr() as _;
627        self.0.stage_count = stages.len() as _;
628        self
629    }
630    #[inline]
631    #[must_use]
632    pub fn vertex_input_state(
633        mut self,
634        vertex_input_state: &'a crate::vk1_0::PipelineVertexInputStateCreateInfo,
635    ) -> Self {
636        self.0.p_vertex_input_state = vertex_input_state as _;
637        self
638    }
639    #[inline]
640    #[must_use]
641    pub fn tessellation_state(
642        mut self,
643        tessellation_state: &'a crate::vk1_0::PipelineTessellationStateCreateInfo,
644    ) -> Self {
645        self.0.p_tessellation_state = tessellation_state as _;
646        self
647    }
648    #[inline]
649    /// Discards all lifetime information.
650    /// Use the `Deref` and `DerefMut` implementations if possible.
651    pub fn build_dangling(self) -> GraphicsShaderGroupCreateInfoNV {
652        self.0
653    }
654}
655impl<'a> std::default::Default for GraphicsShaderGroupCreateInfoNVBuilder<'a> {
656    fn default() -> GraphicsShaderGroupCreateInfoNVBuilder<'a> {
657        Self::new()
658    }
659}
660impl<'a> std::fmt::Debug for GraphicsShaderGroupCreateInfoNVBuilder<'a> {
661    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
662        std::fmt::Debug::fmt(&self.0, f)
663    }
664}
665impl<'a> std::ops::Deref for GraphicsShaderGroupCreateInfoNVBuilder<'a> {
666    type Target = GraphicsShaderGroupCreateInfoNV;
667    fn deref(&self) -> &Self::Target {
668        &self.0
669    }
670}
671impl<'a> std::ops::DerefMut for GraphicsShaderGroupCreateInfoNVBuilder<'a> {
672    fn deref_mut(&mut self) -> &mut Self::Target {
673        &mut self.0
674    }
675}
676///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineShaderGroupsCreateInfoNV.html) · Structure
677#[doc(alias = "VkGraphicsPipelineShaderGroupsCreateInfoNV")]
678#[derive(Copy, Clone)]
679#[repr(C)]
680pub struct GraphicsPipelineShaderGroupsCreateInfoNV {
681    pub s_type: crate::vk1_0::StructureType,
682    pub p_next: *const std::ffi::c_void,
683    pub group_count: u32,
684    pub p_groups: *const crate::extensions::nv_device_generated_commands::GraphicsShaderGroupCreateInfoNV,
685    pub pipeline_count: u32,
686    pub p_pipelines: *const crate::vk1_0::Pipeline,
687}
688impl GraphicsPipelineShaderGroupsCreateInfoNV {
689    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV;
690}
691impl Default for GraphicsPipelineShaderGroupsCreateInfoNV {
692    fn default() -> Self {
693        Self {
694            s_type: Self::STRUCTURE_TYPE,
695            p_next: std::ptr::null(),
696            group_count: Default::default(),
697            p_groups: std::ptr::null(),
698            pipeline_count: Default::default(),
699            p_pipelines: std::ptr::null(),
700        }
701    }
702}
703impl std::fmt::Debug for GraphicsPipelineShaderGroupsCreateInfoNV {
704    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
705        f.debug_struct("GraphicsPipelineShaderGroupsCreateInfoNV")
706            .field("s_type", &self.s_type)
707            .field("p_next", &self.p_next)
708            .field("group_count", &self.group_count)
709            .field("p_groups", &self.p_groups)
710            .field("pipeline_count", &self.pipeline_count)
711            .field("p_pipelines", &self.p_pipelines)
712            .finish()
713    }
714}
715impl GraphicsPipelineShaderGroupsCreateInfoNV {
716    #[inline]
717    pub fn into_builder<'a>(
718        self,
719    ) -> GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
720        GraphicsPipelineShaderGroupsCreateInfoNVBuilder(self, std::marker::PhantomData)
721    }
722}
723#[derive(Copy, Clone)]
724///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineShaderGroupsCreateInfoNV.html) · Builder of [`GraphicsPipelineShaderGroupsCreateInfoNV`]
725#[repr(transparent)]
726pub struct GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a>(
727    GraphicsPipelineShaderGroupsCreateInfoNV,
728    std::marker::PhantomData<&'a ()>,
729);
730impl<'a> GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
731    #[inline]
732    pub fn new() -> GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
733        GraphicsPipelineShaderGroupsCreateInfoNVBuilder(
734            Default::default(),
735            std::marker::PhantomData,
736        )
737    }
738    #[inline]
739    #[must_use]
740    pub fn groups(
741        mut self,
742        groups: &'a [crate::extensions::nv_device_generated_commands::GraphicsShaderGroupCreateInfoNVBuilder],
743    ) -> Self {
744        self.0.p_groups = groups.as_ptr() as _;
745        self.0.group_count = groups.len() as _;
746        self
747    }
748    #[inline]
749    #[must_use]
750    pub fn pipelines(mut self, pipelines: &'a [crate::vk1_0::Pipeline]) -> Self {
751        self.0.p_pipelines = pipelines.as_ptr() as _;
752        self.0.pipeline_count = pipelines.len() as _;
753        self
754    }
755    #[inline]
756    /// Discards all lifetime information.
757    /// Use the `Deref` and `DerefMut` implementations if possible.
758    pub fn build_dangling(self) -> GraphicsPipelineShaderGroupsCreateInfoNV {
759        self.0
760    }
761}
762impl<'a> std::default::Default for GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
763    fn default() -> GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
764        Self::new()
765    }
766}
767impl<'a> std::fmt::Debug for GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
768    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
769        std::fmt::Debug::fmt(&self.0, f)
770    }
771}
772impl<'a> std::ops::Deref for GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
773    type Target = GraphicsPipelineShaderGroupsCreateInfoNV;
774    fn deref(&self) -> &Self::Target {
775        &self.0
776    }
777}
778impl<'a> std::ops::DerefMut for GraphicsPipelineShaderGroupsCreateInfoNVBuilder<'a> {
779    fn deref_mut(&mut self) -> &mut Self::Target {
780        &mut self.0
781    }
782}
783///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindShaderGroupIndirectCommandNV.html) · Structure
784#[doc(alias = "VkBindShaderGroupIndirectCommandNV")]
785#[derive(Copy, Clone, Hash, PartialEq, Eq)]
786#[repr(C)]
787pub struct BindShaderGroupIndirectCommandNV {
788    pub group_index: u32,
789}
790impl Default for BindShaderGroupIndirectCommandNV {
791    fn default() -> Self {
792        Self {
793            group_index: Default::default(),
794        }
795    }
796}
797impl std::fmt::Debug for BindShaderGroupIndirectCommandNV {
798    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
799        f.debug_struct("BindShaderGroupIndirectCommandNV")
800            .field("group_index", &self.group_index)
801            .finish()
802    }
803}
804impl BindShaderGroupIndirectCommandNV {
805    #[inline]
806    pub fn into_builder<'a>(self) -> BindShaderGroupIndirectCommandNVBuilder<'a> {
807        BindShaderGroupIndirectCommandNVBuilder(self, std::marker::PhantomData)
808    }
809}
810#[derive(Copy, Clone)]
811///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindShaderGroupIndirectCommandNV.html) · Builder of [`BindShaderGroupIndirectCommandNV`]
812#[repr(transparent)]
813pub struct BindShaderGroupIndirectCommandNVBuilder<'a>(
814    BindShaderGroupIndirectCommandNV,
815    std::marker::PhantomData<&'a ()>,
816);
817impl<'a> BindShaderGroupIndirectCommandNVBuilder<'a> {
818    #[inline]
819    pub fn new() -> BindShaderGroupIndirectCommandNVBuilder<'a> {
820        BindShaderGroupIndirectCommandNVBuilder(
821            Default::default(),
822            std::marker::PhantomData,
823        )
824    }
825    #[inline]
826    #[must_use]
827    pub fn group_index(mut self, group_index: u32) -> Self {
828        self.0.group_index = group_index as _;
829        self
830    }
831    #[inline]
832    pub fn build(self) -> BindShaderGroupIndirectCommandNV {
833        self.0
834    }
835}
836impl<'a> std::default::Default for BindShaderGroupIndirectCommandNVBuilder<'a> {
837    fn default() -> BindShaderGroupIndirectCommandNVBuilder<'a> {
838        Self::new()
839    }
840}
841impl<'a> std::fmt::Debug for BindShaderGroupIndirectCommandNVBuilder<'a> {
842    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
843        std::fmt::Debug::fmt(&self.0, f)
844    }
845}
846impl<'a> std::ops::Deref for BindShaderGroupIndirectCommandNVBuilder<'a> {
847    type Target = BindShaderGroupIndirectCommandNV;
848    fn deref(&self) -> &Self::Target {
849        &self.0
850    }
851}
852impl<'a> std::ops::DerefMut for BindShaderGroupIndirectCommandNVBuilder<'a> {
853    fn deref_mut(&mut self) -> &mut Self::Target {
854        &mut self.0
855    }
856}
857///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindIndexBufferIndirectCommandNV.html) · Structure
858#[doc(alias = "VkBindIndexBufferIndirectCommandNV")]
859#[derive(Copy, Clone, Hash, PartialEq, Eq)]
860#[repr(C)]
861pub struct BindIndexBufferIndirectCommandNV {
862    pub buffer_address: crate::vk1_0::DeviceAddress,
863    pub size: u32,
864    pub index_type: crate::vk1_0::IndexType,
865}
866impl Default for BindIndexBufferIndirectCommandNV {
867    fn default() -> Self {
868        Self {
869            buffer_address: Default::default(),
870            size: Default::default(),
871            index_type: Default::default(),
872        }
873    }
874}
875impl std::fmt::Debug for BindIndexBufferIndirectCommandNV {
876    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
877        f.debug_struct("BindIndexBufferIndirectCommandNV")
878            .field("buffer_address", &self.buffer_address)
879            .field("size", &self.size)
880            .field("index_type", &self.index_type)
881            .finish()
882    }
883}
884impl BindIndexBufferIndirectCommandNV {
885    #[inline]
886    pub fn into_builder<'a>(self) -> BindIndexBufferIndirectCommandNVBuilder<'a> {
887        BindIndexBufferIndirectCommandNVBuilder(self, std::marker::PhantomData)
888    }
889}
890#[derive(Copy, Clone)]
891///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindIndexBufferIndirectCommandNV.html) · Builder of [`BindIndexBufferIndirectCommandNV`]
892#[repr(transparent)]
893pub struct BindIndexBufferIndirectCommandNVBuilder<'a>(
894    BindIndexBufferIndirectCommandNV,
895    std::marker::PhantomData<&'a ()>,
896);
897impl<'a> BindIndexBufferIndirectCommandNVBuilder<'a> {
898    #[inline]
899    pub fn new() -> BindIndexBufferIndirectCommandNVBuilder<'a> {
900        BindIndexBufferIndirectCommandNVBuilder(
901            Default::default(),
902            std::marker::PhantomData,
903        )
904    }
905    #[inline]
906    #[must_use]
907    pub fn buffer_address(
908        mut self,
909        buffer_address: crate::vk1_0::DeviceAddress,
910    ) -> Self {
911        self.0.buffer_address = buffer_address as _;
912        self
913    }
914    #[inline]
915    #[must_use]
916    pub fn size(mut self, size: u32) -> Self {
917        self.0.size = size as _;
918        self
919    }
920    #[inline]
921    #[must_use]
922    pub fn index_type(mut self, index_type: crate::vk1_0::IndexType) -> Self {
923        self.0.index_type = index_type as _;
924        self
925    }
926    #[inline]
927    pub fn build(self) -> BindIndexBufferIndirectCommandNV {
928        self.0
929    }
930}
931impl<'a> std::default::Default for BindIndexBufferIndirectCommandNVBuilder<'a> {
932    fn default() -> BindIndexBufferIndirectCommandNVBuilder<'a> {
933        Self::new()
934    }
935}
936impl<'a> std::fmt::Debug for BindIndexBufferIndirectCommandNVBuilder<'a> {
937    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
938        std::fmt::Debug::fmt(&self.0, f)
939    }
940}
941impl<'a> std::ops::Deref for BindIndexBufferIndirectCommandNVBuilder<'a> {
942    type Target = BindIndexBufferIndirectCommandNV;
943    fn deref(&self) -> &Self::Target {
944        &self.0
945    }
946}
947impl<'a> std::ops::DerefMut for BindIndexBufferIndirectCommandNVBuilder<'a> {
948    fn deref_mut(&mut self) -> &mut Self::Target {
949        &mut self.0
950    }
951}
952///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindVertexBufferIndirectCommandNV.html) · Structure
953#[doc(alias = "VkBindVertexBufferIndirectCommandNV")]
954#[derive(Copy, Clone, Hash, PartialEq, Eq)]
955#[repr(C)]
956pub struct BindVertexBufferIndirectCommandNV {
957    pub buffer_address: crate::vk1_0::DeviceAddress,
958    pub size: u32,
959    pub stride: u32,
960}
961impl Default for BindVertexBufferIndirectCommandNV {
962    fn default() -> Self {
963        Self {
964            buffer_address: Default::default(),
965            size: Default::default(),
966            stride: Default::default(),
967        }
968    }
969}
970impl std::fmt::Debug for BindVertexBufferIndirectCommandNV {
971    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
972        f.debug_struct("BindVertexBufferIndirectCommandNV")
973            .field("buffer_address", &self.buffer_address)
974            .field("size", &self.size)
975            .field("stride", &self.stride)
976            .finish()
977    }
978}
979impl BindVertexBufferIndirectCommandNV {
980    #[inline]
981    pub fn into_builder<'a>(self) -> BindVertexBufferIndirectCommandNVBuilder<'a> {
982        BindVertexBufferIndirectCommandNVBuilder(self, std::marker::PhantomData)
983    }
984}
985#[derive(Copy, Clone)]
986///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindVertexBufferIndirectCommandNV.html) · Builder of [`BindVertexBufferIndirectCommandNV`]
987#[repr(transparent)]
988pub struct BindVertexBufferIndirectCommandNVBuilder<'a>(
989    BindVertexBufferIndirectCommandNV,
990    std::marker::PhantomData<&'a ()>,
991);
992impl<'a> BindVertexBufferIndirectCommandNVBuilder<'a> {
993    #[inline]
994    pub fn new() -> BindVertexBufferIndirectCommandNVBuilder<'a> {
995        BindVertexBufferIndirectCommandNVBuilder(
996            Default::default(),
997            std::marker::PhantomData,
998        )
999    }
1000    #[inline]
1001    #[must_use]
1002    pub fn buffer_address(
1003        mut self,
1004        buffer_address: crate::vk1_0::DeviceAddress,
1005    ) -> Self {
1006        self.0.buffer_address = buffer_address as _;
1007        self
1008    }
1009    #[inline]
1010    #[must_use]
1011    pub fn size(mut self, size: u32) -> Self {
1012        self.0.size = size as _;
1013        self
1014    }
1015    #[inline]
1016    #[must_use]
1017    pub fn stride(mut self, stride: u32) -> Self {
1018        self.0.stride = stride as _;
1019        self
1020    }
1021    #[inline]
1022    pub fn build(self) -> BindVertexBufferIndirectCommandNV {
1023        self.0
1024    }
1025}
1026impl<'a> std::default::Default for BindVertexBufferIndirectCommandNVBuilder<'a> {
1027    fn default() -> BindVertexBufferIndirectCommandNVBuilder<'a> {
1028        Self::new()
1029    }
1030}
1031impl<'a> std::fmt::Debug for BindVertexBufferIndirectCommandNVBuilder<'a> {
1032    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1033        std::fmt::Debug::fmt(&self.0, f)
1034    }
1035}
1036impl<'a> std::ops::Deref for BindVertexBufferIndirectCommandNVBuilder<'a> {
1037    type Target = BindVertexBufferIndirectCommandNV;
1038    fn deref(&self) -> &Self::Target {
1039        &self.0
1040    }
1041}
1042impl<'a> std::ops::DerefMut for BindVertexBufferIndirectCommandNVBuilder<'a> {
1043    fn deref_mut(&mut self) -> &mut Self::Target {
1044        &mut self.0
1045    }
1046}
1047///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkSetStateFlagsIndirectCommandNV.html) · Structure
1048#[doc(alias = "VkSetStateFlagsIndirectCommandNV")]
1049#[derive(Copy, Clone, Hash, PartialEq, Eq)]
1050#[repr(C)]
1051pub struct SetStateFlagsIndirectCommandNV {
1052    pub data: u32,
1053}
1054impl Default for SetStateFlagsIndirectCommandNV {
1055    fn default() -> Self {
1056        Self { data: Default::default() }
1057    }
1058}
1059impl std::fmt::Debug for SetStateFlagsIndirectCommandNV {
1060    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1061        f.debug_struct("SetStateFlagsIndirectCommandNV")
1062            .field("data", &self.data)
1063            .finish()
1064    }
1065}
1066impl SetStateFlagsIndirectCommandNV {
1067    #[inline]
1068    pub fn into_builder<'a>(self) -> SetStateFlagsIndirectCommandNVBuilder<'a> {
1069        SetStateFlagsIndirectCommandNVBuilder(self, std::marker::PhantomData)
1070    }
1071}
1072#[derive(Copy, Clone)]
1073///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkSetStateFlagsIndirectCommandNV.html) · Builder of [`SetStateFlagsIndirectCommandNV`]
1074#[repr(transparent)]
1075pub struct SetStateFlagsIndirectCommandNVBuilder<'a>(
1076    SetStateFlagsIndirectCommandNV,
1077    std::marker::PhantomData<&'a ()>,
1078);
1079impl<'a> SetStateFlagsIndirectCommandNVBuilder<'a> {
1080    #[inline]
1081    pub fn new() -> SetStateFlagsIndirectCommandNVBuilder<'a> {
1082        SetStateFlagsIndirectCommandNVBuilder(
1083            Default::default(),
1084            std::marker::PhantomData,
1085        )
1086    }
1087    #[inline]
1088    #[must_use]
1089    pub fn data(mut self, data: u32) -> Self {
1090        self.0.data = data as _;
1091        self
1092    }
1093    #[inline]
1094    pub fn build(self) -> SetStateFlagsIndirectCommandNV {
1095        self.0
1096    }
1097}
1098impl<'a> std::default::Default for SetStateFlagsIndirectCommandNVBuilder<'a> {
1099    fn default() -> SetStateFlagsIndirectCommandNVBuilder<'a> {
1100        Self::new()
1101    }
1102}
1103impl<'a> std::fmt::Debug for SetStateFlagsIndirectCommandNVBuilder<'a> {
1104    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1105        std::fmt::Debug::fmt(&self.0, f)
1106    }
1107}
1108impl<'a> std::ops::Deref for SetStateFlagsIndirectCommandNVBuilder<'a> {
1109    type Target = SetStateFlagsIndirectCommandNV;
1110    fn deref(&self) -> &Self::Target {
1111        &self.0
1112    }
1113}
1114impl<'a> std::ops::DerefMut for SetStateFlagsIndirectCommandNVBuilder<'a> {
1115    fn deref_mut(&mut self) -> &mut Self::Target {
1116        &mut self.0
1117    }
1118}
1119///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsStreamNV.html) · Structure
1120#[doc(alias = "VkIndirectCommandsStreamNV")]
1121#[derive(Copy, Clone, Hash, PartialEq, Eq)]
1122#[repr(C)]
1123pub struct IndirectCommandsStreamNV {
1124    pub buffer: crate::vk1_0::Buffer,
1125    pub offset: crate::vk1_0::DeviceSize,
1126}
1127impl Default for IndirectCommandsStreamNV {
1128    fn default() -> Self {
1129        Self {
1130            buffer: Default::default(),
1131            offset: Default::default(),
1132        }
1133    }
1134}
1135impl std::fmt::Debug for IndirectCommandsStreamNV {
1136    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1137        f.debug_struct("IndirectCommandsStreamNV")
1138            .field("buffer", &self.buffer)
1139            .field("offset", &self.offset)
1140            .finish()
1141    }
1142}
1143impl IndirectCommandsStreamNV {
1144    #[inline]
1145    pub fn into_builder<'a>(self) -> IndirectCommandsStreamNVBuilder<'a> {
1146        IndirectCommandsStreamNVBuilder(self, std::marker::PhantomData)
1147    }
1148}
1149#[derive(Copy, Clone)]
1150///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsStreamNV.html) · Builder of [`IndirectCommandsStreamNV`]
1151#[repr(transparent)]
1152pub struct IndirectCommandsStreamNVBuilder<'a>(
1153    IndirectCommandsStreamNV,
1154    std::marker::PhantomData<&'a ()>,
1155);
1156impl<'a> IndirectCommandsStreamNVBuilder<'a> {
1157    #[inline]
1158    pub fn new() -> IndirectCommandsStreamNVBuilder<'a> {
1159        IndirectCommandsStreamNVBuilder(Default::default(), std::marker::PhantomData)
1160    }
1161    #[inline]
1162    #[must_use]
1163    pub fn buffer(mut self, buffer: crate::vk1_0::Buffer) -> Self {
1164        self.0.buffer = buffer as _;
1165        self
1166    }
1167    #[inline]
1168    #[must_use]
1169    pub fn offset(mut self, offset: crate::vk1_0::DeviceSize) -> Self {
1170        self.0.offset = offset as _;
1171        self
1172    }
1173    #[inline]
1174    pub fn build(self) -> IndirectCommandsStreamNV {
1175        self.0
1176    }
1177}
1178impl<'a> std::default::Default for IndirectCommandsStreamNVBuilder<'a> {
1179    fn default() -> IndirectCommandsStreamNVBuilder<'a> {
1180        Self::new()
1181    }
1182}
1183impl<'a> std::fmt::Debug for IndirectCommandsStreamNVBuilder<'a> {
1184    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1185        std::fmt::Debug::fmt(&self.0, f)
1186    }
1187}
1188impl<'a> std::ops::Deref for IndirectCommandsStreamNVBuilder<'a> {
1189    type Target = IndirectCommandsStreamNV;
1190    fn deref(&self) -> &Self::Target {
1191        &self.0
1192    }
1193}
1194impl<'a> std::ops::DerefMut for IndirectCommandsStreamNVBuilder<'a> {
1195    fn deref_mut(&mut self) -> &mut Self::Target {
1196        &mut self.0
1197    }
1198}
1199///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutTokenNV.html) · Structure
1200#[doc(alias = "VkIndirectCommandsLayoutTokenNV")]
1201#[derive(Copy, Clone)]
1202#[repr(C)]
1203pub struct IndirectCommandsLayoutTokenNV {
1204    pub s_type: crate::vk1_0::StructureType,
1205    pub p_next: *const std::ffi::c_void,
1206    pub token_type: crate::extensions::nv_device_generated_commands::IndirectCommandsTokenTypeNV,
1207    pub stream: u32,
1208    pub offset: u32,
1209    pub vertex_binding_unit: u32,
1210    pub vertex_dynamic_stride: crate::vk1_0::Bool32,
1211    pub pushconstant_pipeline_layout: crate::vk1_0::PipelineLayout,
1212    pub pushconstant_shader_stage_flags: crate::vk1_0::ShaderStageFlags,
1213    pub pushconstant_offset: u32,
1214    pub pushconstant_size: u32,
1215    pub indirect_state_flags: crate::extensions::nv_device_generated_commands::IndirectStateFlagsNV,
1216    pub index_type_count: u32,
1217    pub p_index_types: *const crate::vk1_0::IndexType,
1218    pub p_index_type_values: *const u32,
1219}
1220impl IndirectCommandsLayoutTokenNV {
1221    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::INDIRECT_COMMANDS_LAYOUT_TOKEN_NV;
1222}
1223impl Default for IndirectCommandsLayoutTokenNV {
1224    fn default() -> Self {
1225        Self {
1226            s_type: Self::STRUCTURE_TYPE,
1227            p_next: std::ptr::null(),
1228            token_type: Default::default(),
1229            stream: Default::default(),
1230            offset: Default::default(),
1231            vertex_binding_unit: Default::default(),
1232            vertex_dynamic_stride: Default::default(),
1233            pushconstant_pipeline_layout: Default::default(),
1234            pushconstant_shader_stage_flags: Default::default(),
1235            pushconstant_offset: Default::default(),
1236            pushconstant_size: Default::default(),
1237            indirect_state_flags: Default::default(),
1238            index_type_count: Default::default(),
1239            p_index_types: std::ptr::null(),
1240            p_index_type_values: std::ptr::null(),
1241        }
1242    }
1243}
1244impl std::fmt::Debug for IndirectCommandsLayoutTokenNV {
1245    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1246        f.debug_struct("IndirectCommandsLayoutTokenNV")
1247            .field("s_type", &self.s_type)
1248            .field("p_next", &self.p_next)
1249            .field("token_type", &self.token_type)
1250            .field("stream", &self.stream)
1251            .field("offset", &self.offset)
1252            .field("vertex_binding_unit", &self.vertex_binding_unit)
1253            .field("vertex_dynamic_stride", &(self.vertex_dynamic_stride != 0))
1254            .field("pushconstant_pipeline_layout", &self.pushconstant_pipeline_layout)
1255            .field(
1256                "pushconstant_shader_stage_flags",
1257                &self.pushconstant_shader_stage_flags,
1258            )
1259            .field("pushconstant_offset", &self.pushconstant_offset)
1260            .field("pushconstant_size", &self.pushconstant_size)
1261            .field("indirect_state_flags", &self.indirect_state_flags)
1262            .field("index_type_count", &self.index_type_count)
1263            .field("p_index_types", &self.p_index_types)
1264            .field("p_index_type_values", &self.p_index_type_values)
1265            .finish()
1266    }
1267}
1268impl IndirectCommandsLayoutTokenNV {
1269    #[inline]
1270    pub fn into_builder<'a>(self) -> IndirectCommandsLayoutTokenNVBuilder<'a> {
1271        IndirectCommandsLayoutTokenNVBuilder(self, std::marker::PhantomData)
1272    }
1273}
1274#[derive(Copy, Clone)]
1275///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutTokenNV.html) · Builder of [`IndirectCommandsLayoutTokenNV`]
1276#[repr(transparent)]
1277pub struct IndirectCommandsLayoutTokenNVBuilder<'a>(
1278    IndirectCommandsLayoutTokenNV,
1279    std::marker::PhantomData<&'a ()>,
1280);
1281impl<'a> IndirectCommandsLayoutTokenNVBuilder<'a> {
1282    #[inline]
1283    pub fn new() -> IndirectCommandsLayoutTokenNVBuilder<'a> {
1284        IndirectCommandsLayoutTokenNVBuilder(
1285            Default::default(),
1286            std::marker::PhantomData,
1287        )
1288    }
1289    #[inline]
1290    #[must_use]
1291    pub fn token_type(
1292        mut self,
1293        token_type: crate::extensions::nv_device_generated_commands::IndirectCommandsTokenTypeNV,
1294    ) -> Self {
1295        self.0.token_type = token_type as _;
1296        self
1297    }
1298    #[inline]
1299    #[must_use]
1300    pub fn stream(mut self, stream: u32) -> Self {
1301        self.0.stream = stream as _;
1302        self
1303    }
1304    #[inline]
1305    #[must_use]
1306    pub fn offset(mut self, offset: u32) -> Self {
1307        self.0.offset = offset as _;
1308        self
1309    }
1310    #[inline]
1311    #[must_use]
1312    pub fn vertex_binding_unit(mut self, vertex_binding_unit: u32) -> Self {
1313        self.0.vertex_binding_unit = vertex_binding_unit as _;
1314        self
1315    }
1316    #[inline]
1317    #[must_use]
1318    pub fn vertex_dynamic_stride(mut self, vertex_dynamic_stride: bool) -> Self {
1319        self.0.vertex_dynamic_stride = vertex_dynamic_stride as _;
1320        self
1321    }
1322    #[inline]
1323    #[must_use]
1324    pub fn pushconstant_pipeline_layout(
1325        mut self,
1326        pushconstant_pipeline_layout: crate::vk1_0::PipelineLayout,
1327    ) -> Self {
1328        self.0.pushconstant_pipeline_layout = pushconstant_pipeline_layout as _;
1329        self
1330    }
1331    #[inline]
1332    #[must_use]
1333    pub fn pushconstant_shader_stage_flags(
1334        mut self,
1335        pushconstant_shader_stage_flags: crate::vk1_0::ShaderStageFlags,
1336    ) -> Self {
1337        self.0.pushconstant_shader_stage_flags = pushconstant_shader_stage_flags as _;
1338        self
1339    }
1340    #[inline]
1341    #[must_use]
1342    pub fn pushconstant_offset(mut self, pushconstant_offset: u32) -> Self {
1343        self.0.pushconstant_offset = pushconstant_offset as _;
1344        self
1345    }
1346    #[inline]
1347    #[must_use]
1348    pub fn pushconstant_size(mut self, pushconstant_size: u32) -> Self {
1349        self.0.pushconstant_size = pushconstant_size as _;
1350        self
1351    }
1352    #[inline]
1353    #[must_use]
1354    pub fn indirect_state_flags(
1355        mut self,
1356        indirect_state_flags: crate::extensions::nv_device_generated_commands::IndirectStateFlagsNV,
1357    ) -> Self {
1358        self.0.indirect_state_flags = indirect_state_flags as _;
1359        self
1360    }
1361    #[inline]
1362    #[must_use]
1363    pub fn index_types(mut self, index_types: &'a [crate::vk1_0::IndexType]) -> Self {
1364        self.0.p_index_types = index_types.as_ptr() as _;
1365        self.0.index_type_count = index_types.len() as _;
1366        self
1367    }
1368    #[inline]
1369    #[must_use]
1370    pub fn index_type_values(mut self, index_type_values: &'a [u32]) -> Self {
1371        self.0.p_index_type_values = index_type_values.as_ptr() as _;
1372        self.0.index_type_count = index_type_values.len() as _;
1373        self
1374    }
1375    #[inline]
1376    /// Discards all lifetime information.
1377    /// Use the `Deref` and `DerefMut` implementations if possible.
1378    pub fn build_dangling(self) -> IndirectCommandsLayoutTokenNV {
1379        self.0
1380    }
1381}
1382impl<'a> std::default::Default for IndirectCommandsLayoutTokenNVBuilder<'a> {
1383    fn default() -> IndirectCommandsLayoutTokenNVBuilder<'a> {
1384        Self::new()
1385    }
1386}
1387impl<'a> std::fmt::Debug for IndirectCommandsLayoutTokenNVBuilder<'a> {
1388    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1389        std::fmt::Debug::fmt(&self.0, f)
1390    }
1391}
1392impl<'a> std::ops::Deref for IndirectCommandsLayoutTokenNVBuilder<'a> {
1393    type Target = IndirectCommandsLayoutTokenNV;
1394    fn deref(&self) -> &Self::Target {
1395        &self.0
1396    }
1397}
1398impl<'a> std::ops::DerefMut for IndirectCommandsLayoutTokenNVBuilder<'a> {
1399    fn deref_mut(&mut self) -> &mut Self::Target {
1400        &mut self.0
1401    }
1402}
1403///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutCreateInfoNV.html) · Structure
1404#[doc(alias = "VkIndirectCommandsLayoutCreateInfoNV")]
1405#[derive(Copy, Clone)]
1406#[repr(C)]
1407pub struct IndirectCommandsLayoutCreateInfoNV {
1408    pub s_type: crate::vk1_0::StructureType,
1409    pub p_next: *const std::ffi::c_void,
1410    pub flags: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutUsageFlagsNV,
1411    pub pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1412    pub token_count: u32,
1413    pub p_tokens: *const crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutTokenNV,
1414    pub stream_count: u32,
1415    pub p_stream_strides: *const u32,
1416}
1417impl IndirectCommandsLayoutCreateInfoNV {
1418    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV;
1419}
1420impl Default for IndirectCommandsLayoutCreateInfoNV {
1421    fn default() -> Self {
1422        Self {
1423            s_type: Self::STRUCTURE_TYPE,
1424            p_next: std::ptr::null(),
1425            flags: Default::default(),
1426            pipeline_bind_point: Default::default(),
1427            token_count: Default::default(),
1428            p_tokens: std::ptr::null(),
1429            stream_count: Default::default(),
1430            p_stream_strides: std::ptr::null(),
1431        }
1432    }
1433}
1434impl std::fmt::Debug for IndirectCommandsLayoutCreateInfoNV {
1435    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1436        f.debug_struct("IndirectCommandsLayoutCreateInfoNV")
1437            .field("s_type", &self.s_type)
1438            .field("p_next", &self.p_next)
1439            .field("flags", &self.flags)
1440            .field("pipeline_bind_point", &self.pipeline_bind_point)
1441            .field("token_count", &self.token_count)
1442            .field("p_tokens", &self.p_tokens)
1443            .field("stream_count", &self.stream_count)
1444            .field("p_stream_strides", &self.p_stream_strides)
1445            .finish()
1446    }
1447}
1448impl IndirectCommandsLayoutCreateInfoNV {
1449    #[inline]
1450    pub fn into_builder<'a>(self) -> IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1451        IndirectCommandsLayoutCreateInfoNVBuilder(self, std::marker::PhantomData)
1452    }
1453}
1454#[derive(Copy, Clone)]
1455///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutCreateInfoNV.html) · Builder of [`IndirectCommandsLayoutCreateInfoNV`]
1456#[repr(transparent)]
1457pub struct IndirectCommandsLayoutCreateInfoNVBuilder<'a>(
1458    IndirectCommandsLayoutCreateInfoNV,
1459    std::marker::PhantomData<&'a ()>,
1460);
1461impl<'a> IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1462    #[inline]
1463    pub fn new() -> IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1464        IndirectCommandsLayoutCreateInfoNVBuilder(
1465            Default::default(),
1466            std::marker::PhantomData,
1467        )
1468    }
1469    #[inline]
1470    #[must_use]
1471    pub fn flags(
1472        mut self,
1473        flags: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutUsageFlagsNV,
1474    ) -> Self {
1475        self.0.flags = flags as _;
1476        self
1477    }
1478    #[inline]
1479    #[must_use]
1480    pub fn pipeline_bind_point(
1481        mut self,
1482        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1483    ) -> Self {
1484        self.0.pipeline_bind_point = pipeline_bind_point as _;
1485        self
1486    }
1487    #[inline]
1488    #[must_use]
1489    pub fn tokens(
1490        mut self,
1491        tokens: &'a [crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutTokenNVBuilder],
1492    ) -> Self {
1493        self.0.p_tokens = tokens.as_ptr() as _;
1494        self.0.token_count = tokens.len() as _;
1495        self
1496    }
1497    #[inline]
1498    #[must_use]
1499    pub fn stream_strides(mut self, stream_strides: &'a [u32]) -> Self {
1500        self.0.p_stream_strides = stream_strides.as_ptr() as _;
1501        self.0.stream_count = stream_strides.len() as _;
1502        self
1503    }
1504    #[inline]
1505    /// Discards all lifetime information.
1506    /// Use the `Deref` and `DerefMut` implementations if possible.
1507    pub fn build_dangling(self) -> IndirectCommandsLayoutCreateInfoNV {
1508        self.0
1509    }
1510}
1511impl<'a> std::default::Default for IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1512    fn default() -> IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1513        Self::new()
1514    }
1515}
1516impl<'a> std::fmt::Debug for IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1517    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1518        std::fmt::Debug::fmt(&self.0, f)
1519    }
1520}
1521impl<'a> std::ops::Deref for IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1522    type Target = IndirectCommandsLayoutCreateInfoNV;
1523    fn deref(&self) -> &Self::Target {
1524        &self.0
1525    }
1526}
1527impl<'a> std::ops::DerefMut for IndirectCommandsLayoutCreateInfoNVBuilder<'a> {
1528    fn deref_mut(&mut self) -> &mut Self::Target {
1529        &mut self.0
1530    }
1531}
1532///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsInfoNV.html) · Structure
1533#[doc(alias = "VkGeneratedCommandsInfoNV")]
1534#[derive(Copy, Clone)]
1535#[repr(C)]
1536pub struct GeneratedCommandsInfoNV {
1537    pub s_type: crate::vk1_0::StructureType,
1538    pub p_next: *const std::ffi::c_void,
1539    pub pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1540    pub pipeline: crate::vk1_0::Pipeline,
1541    pub indirect_commands_layout: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
1542    pub stream_count: u32,
1543    pub p_streams: *const crate::extensions::nv_device_generated_commands::IndirectCommandsStreamNV,
1544    pub sequences_count: u32,
1545    pub preprocess_buffer: crate::vk1_0::Buffer,
1546    pub preprocess_offset: crate::vk1_0::DeviceSize,
1547    pub preprocess_size: crate::vk1_0::DeviceSize,
1548    pub sequences_count_buffer: crate::vk1_0::Buffer,
1549    pub sequences_count_offset: crate::vk1_0::DeviceSize,
1550    pub sequences_index_buffer: crate::vk1_0::Buffer,
1551    pub sequences_index_offset: crate::vk1_0::DeviceSize,
1552}
1553impl GeneratedCommandsInfoNV {
1554    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::GENERATED_COMMANDS_INFO_NV;
1555}
1556impl Default for GeneratedCommandsInfoNV {
1557    fn default() -> Self {
1558        Self {
1559            s_type: Self::STRUCTURE_TYPE,
1560            p_next: std::ptr::null(),
1561            pipeline_bind_point: Default::default(),
1562            pipeline: Default::default(),
1563            indirect_commands_layout: Default::default(),
1564            stream_count: Default::default(),
1565            p_streams: std::ptr::null(),
1566            sequences_count: Default::default(),
1567            preprocess_buffer: Default::default(),
1568            preprocess_offset: Default::default(),
1569            preprocess_size: Default::default(),
1570            sequences_count_buffer: Default::default(),
1571            sequences_count_offset: Default::default(),
1572            sequences_index_buffer: Default::default(),
1573            sequences_index_offset: Default::default(),
1574        }
1575    }
1576}
1577impl std::fmt::Debug for GeneratedCommandsInfoNV {
1578    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1579        f.debug_struct("GeneratedCommandsInfoNV")
1580            .field("s_type", &self.s_type)
1581            .field("p_next", &self.p_next)
1582            .field("pipeline_bind_point", &self.pipeline_bind_point)
1583            .field("pipeline", &self.pipeline)
1584            .field("indirect_commands_layout", &self.indirect_commands_layout)
1585            .field("stream_count", &self.stream_count)
1586            .field("p_streams", &self.p_streams)
1587            .field("sequences_count", &self.sequences_count)
1588            .field("preprocess_buffer", &self.preprocess_buffer)
1589            .field("preprocess_offset", &self.preprocess_offset)
1590            .field("preprocess_size", &self.preprocess_size)
1591            .field("sequences_count_buffer", &self.sequences_count_buffer)
1592            .field("sequences_count_offset", &self.sequences_count_offset)
1593            .field("sequences_index_buffer", &self.sequences_index_buffer)
1594            .field("sequences_index_offset", &self.sequences_index_offset)
1595            .finish()
1596    }
1597}
1598impl GeneratedCommandsInfoNV {
1599    #[inline]
1600    pub fn into_builder<'a>(self) -> GeneratedCommandsInfoNVBuilder<'a> {
1601        GeneratedCommandsInfoNVBuilder(self, std::marker::PhantomData)
1602    }
1603}
1604#[derive(Copy, Clone)]
1605///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsInfoNV.html) · Builder of [`GeneratedCommandsInfoNV`]
1606#[repr(transparent)]
1607pub struct GeneratedCommandsInfoNVBuilder<'a>(
1608    GeneratedCommandsInfoNV,
1609    std::marker::PhantomData<&'a ()>,
1610);
1611impl<'a> GeneratedCommandsInfoNVBuilder<'a> {
1612    #[inline]
1613    pub fn new() -> GeneratedCommandsInfoNVBuilder<'a> {
1614        GeneratedCommandsInfoNVBuilder(Default::default(), std::marker::PhantomData)
1615    }
1616    #[inline]
1617    #[must_use]
1618    pub fn pipeline_bind_point(
1619        mut self,
1620        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1621    ) -> Self {
1622        self.0.pipeline_bind_point = pipeline_bind_point as _;
1623        self
1624    }
1625    #[inline]
1626    #[must_use]
1627    pub fn pipeline(mut self, pipeline: crate::vk1_0::Pipeline) -> Self {
1628        self.0.pipeline = pipeline as _;
1629        self
1630    }
1631    #[inline]
1632    #[must_use]
1633    pub fn indirect_commands_layout(
1634        mut self,
1635        indirect_commands_layout: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
1636    ) -> Self {
1637        self.0.indirect_commands_layout = indirect_commands_layout as _;
1638        self
1639    }
1640    #[inline]
1641    #[must_use]
1642    pub fn streams(
1643        mut self,
1644        streams: &'a [crate::extensions::nv_device_generated_commands::IndirectCommandsStreamNVBuilder],
1645    ) -> Self {
1646        self.0.p_streams = streams.as_ptr() as _;
1647        self.0.stream_count = streams.len() as _;
1648        self
1649    }
1650    #[inline]
1651    #[must_use]
1652    pub fn sequences_count(mut self, sequences_count: u32) -> Self {
1653        self.0.sequences_count = sequences_count as _;
1654        self
1655    }
1656    #[inline]
1657    #[must_use]
1658    pub fn preprocess_buffer(mut self, preprocess_buffer: crate::vk1_0::Buffer) -> Self {
1659        self.0.preprocess_buffer = preprocess_buffer as _;
1660        self
1661    }
1662    #[inline]
1663    #[must_use]
1664    pub fn preprocess_offset(
1665        mut self,
1666        preprocess_offset: crate::vk1_0::DeviceSize,
1667    ) -> Self {
1668        self.0.preprocess_offset = preprocess_offset as _;
1669        self
1670    }
1671    #[inline]
1672    #[must_use]
1673    pub fn preprocess_size(mut self, preprocess_size: crate::vk1_0::DeviceSize) -> Self {
1674        self.0.preprocess_size = preprocess_size as _;
1675        self
1676    }
1677    #[inline]
1678    #[must_use]
1679    pub fn sequences_count_buffer(
1680        mut self,
1681        sequences_count_buffer: crate::vk1_0::Buffer,
1682    ) -> Self {
1683        self.0.sequences_count_buffer = sequences_count_buffer as _;
1684        self
1685    }
1686    #[inline]
1687    #[must_use]
1688    pub fn sequences_count_offset(
1689        mut self,
1690        sequences_count_offset: crate::vk1_0::DeviceSize,
1691    ) -> Self {
1692        self.0.sequences_count_offset = sequences_count_offset as _;
1693        self
1694    }
1695    #[inline]
1696    #[must_use]
1697    pub fn sequences_index_buffer(
1698        mut self,
1699        sequences_index_buffer: crate::vk1_0::Buffer,
1700    ) -> Self {
1701        self.0.sequences_index_buffer = sequences_index_buffer as _;
1702        self
1703    }
1704    #[inline]
1705    #[must_use]
1706    pub fn sequences_index_offset(
1707        mut self,
1708        sequences_index_offset: crate::vk1_0::DeviceSize,
1709    ) -> Self {
1710        self.0.sequences_index_offset = sequences_index_offset as _;
1711        self
1712    }
1713    #[inline]
1714    /// Discards all lifetime information.
1715    /// Use the `Deref` and `DerefMut` implementations if possible.
1716    pub fn build_dangling(self) -> GeneratedCommandsInfoNV {
1717        self.0
1718    }
1719}
1720impl<'a> std::default::Default for GeneratedCommandsInfoNVBuilder<'a> {
1721    fn default() -> GeneratedCommandsInfoNVBuilder<'a> {
1722        Self::new()
1723    }
1724}
1725impl<'a> std::fmt::Debug for GeneratedCommandsInfoNVBuilder<'a> {
1726    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1727        std::fmt::Debug::fmt(&self.0, f)
1728    }
1729}
1730impl<'a> std::ops::Deref for GeneratedCommandsInfoNVBuilder<'a> {
1731    type Target = GeneratedCommandsInfoNV;
1732    fn deref(&self) -> &Self::Target {
1733        &self.0
1734    }
1735}
1736impl<'a> std::ops::DerefMut for GeneratedCommandsInfoNVBuilder<'a> {
1737    fn deref_mut(&mut self) -> &mut Self::Target {
1738        &mut self.0
1739    }
1740}
1741///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsMemoryRequirementsInfoNV.html) · Structure
1742#[doc(alias = "VkGeneratedCommandsMemoryRequirementsInfoNV")]
1743#[derive(Copy, Clone)]
1744#[repr(C)]
1745pub struct GeneratedCommandsMemoryRequirementsInfoNV {
1746    pub s_type: crate::vk1_0::StructureType,
1747    pub p_next: *const std::ffi::c_void,
1748    pub pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1749    pub pipeline: crate::vk1_0::Pipeline,
1750    pub indirect_commands_layout: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
1751    pub max_sequences_count: u32,
1752}
1753impl GeneratedCommandsMemoryRequirementsInfoNV {
1754    pub const STRUCTURE_TYPE: crate::vk1_0::StructureType = crate::vk1_0::StructureType::GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV;
1755}
1756impl Default for GeneratedCommandsMemoryRequirementsInfoNV {
1757    fn default() -> Self {
1758        Self {
1759            s_type: Self::STRUCTURE_TYPE,
1760            p_next: std::ptr::null(),
1761            pipeline_bind_point: Default::default(),
1762            pipeline: Default::default(),
1763            indirect_commands_layout: Default::default(),
1764            max_sequences_count: Default::default(),
1765        }
1766    }
1767}
1768impl std::fmt::Debug for GeneratedCommandsMemoryRequirementsInfoNV {
1769    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1770        f.debug_struct("GeneratedCommandsMemoryRequirementsInfoNV")
1771            .field("s_type", &self.s_type)
1772            .field("p_next", &self.p_next)
1773            .field("pipeline_bind_point", &self.pipeline_bind_point)
1774            .field("pipeline", &self.pipeline)
1775            .field("indirect_commands_layout", &self.indirect_commands_layout)
1776            .field("max_sequences_count", &self.max_sequences_count)
1777            .finish()
1778    }
1779}
1780impl GeneratedCommandsMemoryRequirementsInfoNV {
1781    #[inline]
1782    pub fn into_builder<'a>(
1783        self,
1784    ) -> GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1785        GeneratedCommandsMemoryRequirementsInfoNVBuilder(self, std::marker::PhantomData)
1786    }
1787}
1788#[derive(Copy, Clone)]
1789///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsMemoryRequirementsInfoNV.html) · Builder of [`GeneratedCommandsMemoryRequirementsInfoNV`]
1790#[repr(transparent)]
1791pub struct GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a>(
1792    GeneratedCommandsMemoryRequirementsInfoNV,
1793    std::marker::PhantomData<&'a ()>,
1794);
1795impl<'a> GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1796    #[inline]
1797    pub fn new() -> GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1798        GeneratedCommandsMemoryRequirementsInfoNVBuilder(
1799            Default::default(),
1800            std::marker::PhantomData,
1801        )
1802    }
1803    #[inline]
1804    #[must_use]
1805    pub fn pipeline_bind_point(
1806        mut self,
1807        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1808    ) -> Self {
1809        self.0.pipeline_bind_point = pipeline_bind_point as _;
1810        self
1811    }
1812    #[inline]
1813    #[must_use]
1814    pub fn pipeline(mut self, pipeline: crate::vk1_0::Pipeline) -> Self {
1815        self.0.pipeline = pipeline as _;
1816        self
1817    }
1818    #[inline]
1819    #[must_use]
1820    pub fn indirect_commands_layout(
1821        mut self,
1822        indirect_commands_layout: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
1823    ) -> Self {
1824        self.0.indirect_commands_layout = indirect_commands_layout as _;
1825        self
1826    }
1827    #[inline]
1828    #[must_use]
1829    pub fn max_sequences_count(mut self, max_sequences_count: u32) -> Self {
1830        self.0.max_sequences_count = max_sequences_count as _;
1831        self
1832    }
1833    #[inline]
1834    /// Discards all lifetime information.
1835    /// Use the `Deref` and `DerefMut` implementations if possible.
1836    pub fn build_dangling(self) -> GeneratedCommandsMemoryRequirementsInfoNV {
1837        self.0
1838    }
1839}
1840impl<'a> std::default::Default for GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1841    fn default() -> GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1842        Self::new()
1843    }
1844}
1845impl<'a> std::fmt::Debug for GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1846    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1847        std::fmt::Debug::fmt(&self.0, f)
1848    }
1849}
1850impl<'a> std::ops::Deref for GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1851    type Target = GeneratedCommandsMemoryRequirementsInfoNV;
1852    fn deref(&self) -> &Self::Target {
1853        &self.0
1854    }
1855}
1856impl<'a> std::ops::DerefMut for GeneratedCommandsMemoryRequirementsInfoNVBuilder<'a> {
1857    fn deref_mut(&mut self) -> &mut Self::Target {
1858        &mut self.0
1859    }
1860}
1861impl<'a> crate::ExtendableFrom<'a, PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>
1862for crate::vk1_1::PhysicalDeviceFeatures2Builder<'a> {}
1863impl<
1864    'a,
1865> crate::ExtendableFrom<'a, PhysicalDeviceDeviceGeneratedCommandsFeaturesNVBuilder<'_>>
1866for crate::vk1_1::PhysicalDeviceFeatures2Builder<'a> {}
1867impl<'a> crate::ExtendableFrom<'a, PhysicalDeviceDeviceGeneratedCommandsPropertiesNV>
1868for crate::vk1_1::PhysicalDeviceProperties2Builder<'a> {}
1869impl<
1870    'a,
1871> crate::ExtendableFrom<'a, PhysicalDeviceDeviceGeneratedCommandsPropertiesNVBuilder<'_>>
1872for crate::vk1_1::PhysicalDeviceProperties2Builder<'a> {}
1873///Provided by [`crate::extensions::nv_device_generated_commands`]
1874impl crate::DeviceLoader {
1875    #[inline]
1876    #[track_caller]
1877    ///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdExecuteGeneratedCommandsNV.html) · Function
1878    #[doc(alias = "vkCmdExecuteGeneratedCommandsNV")]
1879    pub unsafe fn cmd_execute_generated_commands_nv(
1880        &self,
1881        command_buffer: crate::vk1_0::CommandBuffer,
1882        is_preprocessed: bool,
1883        generated_commands_info: &crate::extensions::nv_device_generated_commands::GeneratedCommandsInfoNV,
1884    ) -> () {
1885        let _function = self
1886            .cmd_execute_generated_commands_nv
1887            .expect(crate::NOT_LOADED_MESSAGE);
1888        let _return = _function(
1889            command_buffer as _,
1890            is_preprocessed as _,
1891            generated_commands_info as _,
1892        );
1893        ()
1894    }
1895    #[inline]
1896    #[track_caller]
1897    ///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPreprocessGeneratedCommandsNV.html) · Function
1898    #[doc(alias = "vkCmdPreprocessGeneratedCommandsNV")]
1899    pub unsafe fn cmd_preprocess_generated_commands_nv(
1900        &self,
1901        command_buffer: crate::vk1_0::CommandBuffer,
1902        generated_commands_info: &crate::extensions::nv_device_generated_commands::GeneratedCommandsInfoNV,
1903    ) -> () {
1904        let _function = self
1905            .cmd_preprocess_generated_commands_nv
1906            .expect(crate::NOT_LOADED_MESSAGE);
1907        let _return = _function(command_buffer as _, generated_commands_info as _);
1908        ()
1909    }
1910    #[inline]
1911    #[track_caller]
1912    ///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdBindPipelineShaderGroupNV.html) · Function
1913    #[doc(alias = "vkCmdBindPipelineShaderGroupNV")]
1914    pub unsafe fn cmd_bind_pipeline_shader_group_nv(
1915        &self,
1916        command_buffer: crate::vk1_0::CommandBuffer,
1917        pipeline_bind_point: crate::vk1_0::PipelineBindPoint,
1918        pipeline: crate::vk1_0::Pipeline,
1919        group_index: u32,
1920    ) -> () {
1921        let _function = self
1922            .cmd_bind_pipeline_shader_group_nv
1923            .expect(crate::NOT_LOADED_MESSAGE);
1924        let _return = _function(
1925            command_buffer as _,
1926            pipeline_bind_point as _,
1927            pipeline as _,
1928            group_index as _,
1929        );
1930        ()
1931    }
1932    #[inline]
1933    #[track_caller]
1934    ///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html) · Function
1935    #[doc(alias = "vkGetGeneratedCommandsMemoryRequirementsNV")]
1936    pub unsafe fn get_generated_commands_memory_requirements_nv(
1937        &self,
1938        info: &crate::extensions::nv_device_generated_commands::GeneratedCommandsMemoryRequirementsInfoNV,
1939        memory_requirements: &mut crate::vk1_1::MemoryRequirements2,
1940    ) -> () {
1941        let _function = self
1942            .get_generated_commands_memory_requirements_nv
1943            .expect(crate::NOT_LOADED_MESSAGE);
1944        let _return = _function(self.handle, info as _, memory_requirements as _);
1945        ()
1946    }
1947    #[inline]
1948    #[track_caller]
1949    ///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateIndirectCommandsLayoutNV.html) · Function
1950    #[doc(alias = "vkCreateIndirectCommandsLayoutNV")]
1951    pub unsafe fn create_indirect_commands_layout_nv(
1952        &self,
1953        create_info: &crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutCreateInfoNV,
1954        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
1955    ) -> crate::utils::VulkanResult<
1956            crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
1957        > {
1958        let _function = self
1959            .create_indirect_commands_layout_nv
1960            .expect(crate::NOT_LOADED_MESSAGE);
1961        let mut indirect_commands_layout = Default::default();
1962        let _return = _function(
1963            self.handle,
1964            create_info as _,
1965            match allocator {
1966                Some(v) => v,
1967                None => std::ptr::null(),
1968            },
1969            &mut indirect_commands_layout,
1970        );
1971        crate::utils::VulkanResult::new(_return, indirect_commands_layout)
1972    }
1973    #[inline]
1974    #[track_caller]
1975    ///[Vulkan Manual Page](https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyIndirectCommandsLayoutNV.html) · Function
1976    #[doc(alias = "vkDestroyIndirectCommandsLayoutNV")]
1977    pub unsafe fn destroy_indirect_commands_layout_nv(
1978        &self,
1979        indirect_commands_layout: crate::extensions::nv_device_generated_commands::IndirectCommandsLayoutNV,
1980        allocator: Option<&crate::vk1_0::AllocationCallbacks>,
1981    ) -> () {
1982        let _function = self
1983            .destroy_indirect_commands_layout_nv
1984            .expect(crate::NOT_LOADED_MESSAGE);
1985        let _return = _function(
1986            self.handle,
1987            indirect_commands_layout as _,
1988            match allocator {
1989                Some(v) => v,
1990                None => std::ptr::null(),
1991            },
1992        );
1993        ()
1994    }
1995}